Campus DU
Dhaka University super-app: 40,000+ students, offline directory, crowdsourced bus tracking.
The Problem
Dhaka University's 40,000+ students and 2,000+ faculty are scattered across 50+ fragmented department websites. There's no centralized contact directory, no GPS on the 15+ campus shuttle routes, no blood-donor network, and no unified notice board with push notifications.
The Solution
Campus DU consolidates every campus service into one offline-capable Flutter app. An SQLite-backed contact directory works without internet, crowdsourced GPS aggregation tracks buses without any hardware install, and a FastAPI backend (Postgres + Redis) gates access behind institutional Google OAuth (@du.ac.bd only).
Key Features
- Offline contact directory: 2,000+ employees across 80+ departments
- Crowdsourced bus tracking via WebSocket + median GPS aggregation
- Blood donor registry with WhatsApp/call integration
- Auto-scraped DU notices with push notifications
- OpenStreetMap-based interactive campus map
- @du.ac.bd-restricted Google Workspace OAuth
- Incremental Drift sync via last_updated timestamps
Technical Challenges
01 · Bus Tracking Without Hardware
DU operates 15+ buses with zero GPS hardware budget. Solution: crowdsource location from rider smartphones via WebSocket, store ephemeral locations in Redis with a 30-second TTL per user, and serve a median-aggregated location to handle GPS noise and outliers.
02 · Offline-First Architecture
Campus WiFi is unreliable and the directory must work offline. Solution: Drift (SQLite ORM) caches the entire contact directory on first launch and incrementally syncs via last_updated timestamps thereafter.
03 · Polymorphic Contact Directory
Six entity types (faculties, departments, offices, institutes, halls, research centres) all have employees but different shapes. Solution: a single EmployeeRole junction table with entity_type + entity_id columns flattens the polymorphism without a Cartesian explosion of join tables.
04 · Real-Time at Scale
Thousands of WebSocket connections per bus route would melt a single server. Solution: Redis stores ephemeral locations, a per-bus connection manager handles fan-out, and 5-second rate limiting throttles each rider client.
Future Scope
- Event calendar with reminders
- Faculty office-hours booking
- Peer-to-peer study group finder