Lectures — Academic Companion
Offline-first Android academic companion for MUST students. Full semester timetable bundled in-app, live class tracker, lecture notes, task deadlines, academic calendar, and a real-time campus vacant-room finder across 92 rooms in 7 buildings. Kotlin + Jetpack Compose M3 + Room. No accounts, no telemetry.
A native Android academic companion for Mbarara University of Science and Technology students. MUST publishes timetables as large HTML tables per programme and per room — answering "what do I have next, and where can I sit down?" means scanning one table then cross-referencing another, on a phone, often on a slow connection. The official Pulse app covers timetable, attendance, announcements and campus maps but is credential-gated and server-backed, so it answers nothing without a connection. Lectures fills that gap: the full semester timetable is bundled in the app and works the moment you install it — no download, no login, no signal. A live "Happening Now" tracker shows real-time progress and countdowns. Notes link to specific class sessions. Tasks carry priority tiers and deadline alarms. The vacant-room finder cross-references every room's bookings against 92 rooms across 7 buildings on 2 campuses (Kihumuro and Town, 7 km apart), with a minimum study-gap filter and "free until" display so you are not sent to a room that frees up for one minute. Built on Clean MVVM with unidirectional data flow: Jetpack Compose M3 for the UI, Kotlin Coroutines and Flow for state, and a Room/SQLite single source of truth. Strictly on-device — no analytics, no tracking, no network collection. CI via GitHub Actions. Six documented subsystems with a full docs/ index in the repo.
Highlights
- Real-time campus vacant-rooms finder: 92 rooms, 7 buildings, 2 campuses
- Full semester timetable bundled in-app — works the moment you install it
- Zero telemetry: no tracking, no data harvesting, on-device only
- Six documented subsystems with a full docs/ index in the repo
- CI via GitHub Actions
Technical architecture
- UI layer: Jetpack Compose M3 screens (Timetable, Calendar, Notes, Tasks) render state from ViewModels.
- ViewModel layer: Clean MVVM with unidirectional data flow — screens emit user events, ViewModels expose UiState via StateFlow.
- Repository layer: a single TimetableRepository acts as the source of truth and data-sync engine.
- Data layer: Room/SQLite for on-device persistence; AlarmManager schedules class and deadline notifications.
- Privacy: zero telemetry — no analytics, no network collection; all student data stays on device.