dashUCL is an iOS-native application that provides students at University College London with access to essential information to help them navigate their study and campus life. The underlying technology retrieves UCL data from API endpoints developed by UCL API.
This app integrates and displays user information
and timetables
, as well as search functionality for people, department information, study spaces, and available rooms
.
Other features such as booking and management
of study spaces and available rooms
may also be developed in the future.
For this setup to work you need to have xcode and node + pnpm installed. This guide has only been tested on MacOS.
- Clone the repository:
git clone https://github.com/zkbkb/dashUCL.git
cd dashUCL
- Install dependencies:
pnpm install
-
Open the project in xcode:
open DashUCL.xcodeproj
-
Run the project:
pnpm run ios
Before running the project, you need to setup the configuration files. Including:
- Get UCL API Client ID and Client Secret from UCL API
This project uses xcconfig files to manage environment-specific settings such as API keys and service URLs. I use supabase to perform the backend functions. Take it as an example, to set up your configuration:
- Copy the example configuration file:
cp Config.xcconfig.example Config.xcconfig
- Setup Supabase project, create your own edge functions:
cd supabase
supabase functions new [YOUR_FUNCTION_NAME]
- Deploy your edge functions:
supabase functions deploy [YOUR_FUNCTION_NAME]
- Edit
Config.xcconfig
with your actual values:
UCL_CLIENT_ID = your_client_id_here # Get from UCL API
SUPABASE_URL = your_supabase_url_here
SUPABASE_FUNCTIONS_URL = your_supabase_functions_url_here
SUPABASE_AUTH_URL = your_supabase_auth_url_here
You can stored the UCL API Client ID and Secret in the environment variables of the supabase project.
- Setup Supabase environment variables:
cd supabase
cp .env.example .env
- Edit
supabase/.env
with your credentials.
Note: Make sure to exclude the configuration files containing secrets (*.xcconfig and supabase/.env) from version control in .gitignore.
(Generated on 2025-03-21 by Claude)
- Frontend Framework: Swift and SwiftUI
- Backend: Edge functions written in TypeScript for API integration
- Server: Supabase cloud computing services
- Architecture Pattern: MVVM (Model-View-ViewModel)
The application follows a feature-oriented directory structure, organizing code by functionality, which makes the codebase more maintainable and enables better feature isolation.
- App: Application entry point and configuration
- Features: Feature modules organized by business domain
- Core: Shared services, models, and utilities
- UI: Reusable UI components and views
- Extensions: Swift and iOS framework extensions
- Resources: Assets and static resources
The application initializes global services like theme management and authentication state observation during startup.
A centralized NavigationManager
handles all navigation throughout the app, enabling:
- Programmatic navigation between screens
- Deep linking support
- Navigation history management
- Tab-based navigation with a custom tab bar
The network layer is responsible for all API interactions and includes:
- REST API client for UCL services
- Response parsing and error handling
- Caching of network responses
- Mock services for testing and development
- Type-safe API endpoints definition
The application implements several storage mechanisms:
CacheManager
: For temporary data cachingPersistentStorage
: For long-term data persistenceDataCleanupService
: For maintaining storage efficiencyStaticDataManager
: For managing predefined data sets
The app supports theming with:
- Light and dark mode
- In SwiftUI, uses
Color
andColorScheme
to manage the theme.
The home screen provides access to key information and serves as the main entry point to the application. It includes personalized content for the signed-in user, such as upcoming timetable events and frequently accessed resources.
The timetable feature displays the student's class schedule with:
- Day, week, and month views
- Event details including location, time, and instructor information
- Notifications for upcoming events (In Settings)
The spaces feature helps students find and use campus facilities:
- Study space and Computer cluster availability monitoring and search
- Navigation to spaces
- Though data is retrieved from UCL API, the app hardcodes some public building information for response consistency.
A universal search feature allows searching across:
- People and staff directories
- Department information
- Study Spaces and Computer Clusters
The settings section provides user configuration options:
- Account management
- Notification preferences
- Theme selection
- Other entries for information and support
The login feature handles user authentication:
- UCL credentials login
- Session persistence
- Secure token management
- Terms and conditions agreement