Campus Social App is an innovative mobile application for modern university campus ecology, which provides a cross-lingual and high-efficiency campus information exchange platform for students via NFC fast authentication, real-time Chinese/English translation and intelligent content recommendation.
This app not only solves the problem of information fragmentation, but also helps students to access learning resources, discover academic activities and share learning experiences, as well as provides practical information on life such as lost and found, campus food and accommodation, and provides students with channels for socialising and communication. For schools, this app can help with better news broadcasting, events promotion and enhancing students' sense of belonging and engagement on campus, making it particularly suitable for modern universities with a high degree of internationalisation and a diverse student body.
This project demonstrates the potential of mobile technologies in creating connected & interactive campus environments by providing an innovative platform for student communication and content discovery.
GitHub Repository - https://github.com/ucl-casa-ce/casa0015-mobile-assessment
https://reikimen.github.io/casa0015-landing-page/
- NFC Authentication: Secure login using campus NFC cards
- Bilingual Support: Automatic translation between Chinese and English
- Content Categories: Organized posts by topics (Study, Activities, Lost & Found, Food, Accommodation)
- Shake-to-Refresh: Unique content update gesture
- Social Interactions: Like, comment, and share posts within the community
The screenshots offer a clear and intuitive glimpse of the key features:
| NFC Quick Login | Smart Bilingual Support |
|---|---|
![]() |
![]() |
|
πΈ Campus Card Verification πΈ One-Tap Login πΈ Fast and Seamless |
πΈ Real-Time Translation πΈ Instant Language Switching πΈ Smart Adaptation |
| Shake & Pull to Refresh | Content Publishing Test |
|---|---|
![]() |
![]() |
|
πΈ Shake to Refresh πΈ Pull Down to Update πΈ Instant Feedback |
πΈ Quick Post Creation πΈ Rich Media Support πΈ Interactive Engagement |
The app supports Chinese and English with automatic content translation:
- UI elements translated via
.arbfiles - Content translation powered by Google Cloud Translation API
- Language preference saved locally
The app uses NFC-based authentication:
-
User taps their campus NFC card
-
App reads the card UID
-
Authentication service validates the card
-
User session is created
-
Framework: Flutter 3.6.1+
-
State Management: Provider
-
Authentication: NFC Manager
-
Networking: HTTP/Dio
-
Local Storage: Shared Preferences
-
UI Components: Material Design, Cached Network Image
-
Internationalization: Flutter Localizations
-
Image Handling: Image Picker, Permission Handler
Our project adheres to modern Flutter development best practices with a focus on maintainability, performance, and user experience. This section provides comprehensive guidance for setting up the development environment, understanding our project architecture, and contributing to the codebase. Whether you're joining as a new developer or maintaining existing features, these guidelines ensure consistent code quality and seamless collaboration across the team. The following subsections cover installation procedures, project structure details, and contribution workflows to help you get started efficiently.
The latest release can be found at build/app/outputs/flutter-apk/app-release.apk
- Flutter SDK: >=3.6.1
- Dart SDK: >=3.0.0
- Android Studio / VS Code with Flutter extensions
- Android SDK 21 or higher (for Android)
- iOS 12.0 or higher (for iOS)
-
Clone the repository
git clone https://github.com/Reikimen/casa0015-ucl-community
-
Install dependencies
flutter pub get
-
Set up environment variables
-
Copy the
.env.examplefile to
.envcp .env.example .env
-
Edit the
.envfile and add your API keys:
GOOGLE_TRANSLATION_API_KEY=your_actual_api_key_here
-
-
Run the app
flutter run
- Google Cloud Translation API
- Get an API key from Google Cloud Console
- Enable Google Cloud Translation API in your project
- Add your API key to the
.envfile (see Setup Instructions)
- NFC Configuration
- Ensure your device supports NFC
- Grant NFC permissions when prompted
- Test with supported NFC cards (see docs for compatible card types)
- Security Note
- Never commit your
.envfile to version control - The
.gitignorefile is configured to exclude sensitive files - For production deployment, set environment variables directly in your hosting platform
- Never commit your
The application follows a clean architecture pattern with a clear separation of concerns. This structure promotes maintainability, scalability, and easy testing.
The app follows a clean architecture pattern with:
- Providers: State management for app, user, and post data
- Services: API and authentication services
- Models: Data models for posts, comments, and users
- Screens: UI components organized by feature
- Widgets: Reusable UI components
lib/
βββ main.dart # Application entry point
βββ app.dart # Application configuration and theme setup
βββ routes/ # Navigation and routing
β βββ app_router.dart # Route generation and navigation logic
βββ providers/ # State management using Provider pattern
β βββ app_provider.dart # Application-wide state (language, translation)
β βββ user_provider.dart # User authentication and session state
β βββ post_provider.dart # Posts and content management
βββ models/ # Data models
β βββ user_model.dart # User data structure
β βββ post_model.dart # Post content model
β βββ comment_model.dart # Comment data structure
β βββ auth_result.dart # Authentication result model
βββ services/ # Business logic and external services
β βββ api_service.dart # API communication layer
β βββ auth_service.dart # Authentication service
β βββ storage_service.dart # Local storage management
βββ screens/ # UI pages
β βββ home/ # Home screen and tabs
β β βββ home_screen.dart # Main home container
β β βββ stared_tab.dart # Following/starred content tab
β β βββ explore_tab.dart # Discovery tab with categories
β β βββ hot_tab.dart # Trending posts tab
β βββ profile/ # User profile
β β βββ profile_screen.dart # User profile display
β βββ post/ # Post-related screens
β β βββ post_detail.dart # Individual post view
β β βββ post_create.dart # Create new post screen
β βββ auth/ # Authentication screens
β βββ login_screen.dart # Login options screen
β βββ nfc_login.dart # NFC card authentication
βββ widgets/ # Reusable UI components
β βββ app_drawer.dart # Navigation drawer
β βββ post_card.dart # Post display card
β βββ subcategory_bar.dart # Category selection bar
β βββ shake_detector.dart # Shake gesture detector
βββ utils/ # Utilities and helpers
β βββ constants.dart # Application constants
β βββ helpers.dart # Helper functions
β βββ config.dart # Environment configuration
βββ l10n/ # Localization resources
βββ app_en.arb # English translations
βββ app_zh.arb # Chinese translations
The application uses the Provider pattern for state management, with three main providers:
- AppProvider: Manages application-wide state such as language preferences, auto-translation settings, and theme
- UserProvider: Handles user authentication state, NFC login, and user session management
- PostProvider: Manages posts, categories, and content interaction logic
Services layer handles external API calls, local storage, and business logic:
- ApiService: Centralizes all HTTP requests and API communications
- AuthService: Manages authentication flows, including NFC card login
- StorageService: Handles persistent local data storage using SharedPreferences
The screens are organized by feature:
- Home: Contains the main navigation structure with three tabs (Stared, Explore, Hot)
- Profile: User profile and settings
- Post: Post creation, viewing, and interaction
- Auth: Login methods including NFC authentication
The app supports both English and Chinese languages:
- Translation files are located in the
l10ndirectory - Uses ARB files for managing translations
- Includes auto-translation feature using Google Translate API
The project uses dotenv for environment configuration:
- API keys are stored in
.envfile (not included in the repository) - Configuration is accessed through the
Configclass inutils/config.dart
- pubspec.yaml: Defines dependencies and assets
- .env: Stores environment variables (API keys, etc.)
- android/app/src/main/AndroidManifest.xml: Android permissions and metadata
We welcome contributions! Please follow these steps:
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Project Lead: Dankao Chen
Email: zczqdc2@ucl.ac.uk
GitHub: @Dankao
-
UCL CASA for project support
-
Flutter community for excellent packages
-
Google Cloud for translation services
-
All contributors and testers
Me, Dankao Chen HERE, confirm that the work presented in this assessment is my own. Where information has been derived from other sources, I confirm that this has been indicated in the work.
29/04/2025





