01 · Foundation
Product Overview
ISCO TMS is an enterprise transportation management platform for university bus operations. It is delivered as three role-specific clients sharing one backend, one identity layer, and one design system. The architecture is modular so future modules can be added without restructuring navigation or data ownership.
Student App
Mobile · iOS / Android
Booking, QR pass, subscriptions, bookings history, complaints, announcements.
Supervisor App
Mobile · iOS / Android
Attendance (QR / phone / offline), daily schedule, expenses, non-subscribers, revenue.
Admin Dashboard
Web · Responsive
Full CRUD, trip templates, scheduling, analytics, complaints triage, reports, settings.
Architecture Principles
Admin owns the operational data
- All departure schedules originate from reusable Trip Templates.
- Students consume schedules; supervisors execute trips; neither creates them.
- Bus assignment is system-driven, never a student choice.
Field operations never block on network
- QR attendance and expense capture work fully offline.
- A local queue persists actions and syncs automatically on reconnect.
- Conflict rules guarantee one departure scan + one return scan.
Least-privilege by design
- Each role has a dedicated app surface and permission scope.
- Supervisor capabilities are gated by Admin-granted permissions.
- Anonymous complaints strip identity before reaching Admin triage.
Modular for future versions
- Navigation reserves slots for new modules (e.g. Live Tracking, Parent App).
- Each module is a self-contained feature with its own screens and permissions.
- Shared design system keeps new modules visually consistent.
02 · Foundation
System Map
A high-level map of clients, the shared platform services they depend on, and the direction of data flow. Admin writes the operational model; Student and Supervisor apps read and append transactional events.
- Student App (mobile)
- Supervisor App (mobile)
- Admin Dashboard (web)
- Identity & Access (roles)
- Scheduling & Trips engine
- Payments & Subscriptions
- Notifications & Announcements
- Offline Sync & Attendance ledger
- Admin writes: routes, templates, trips, users, packages, announcements.
- Student appends: bookings, complaints, payments.
- Supervisor appends: attendance, expenses, non-subscriber records.
Direction of authority
03 · Foundation
Module Inventory
Every capability in the platform grouped into functional modules. Ownership tags indicate the primary actor. The reserved Future Modules branch shows where the architecture is designed to grow.
- ISCO TMS Platformv1.0
- Identity & Access
- Authenticationshared
- Role selectionshared
- Profiles & guardians
- Operations
- Universities & Destinationsadmin
- Routesadmin
- Trip Templatesadmin
- Trips (scheduled instances)admin
- Drivers · Buses · Supervisorsadmin
- Ridership
- Bookingstudent
- QR Passstudent
- Attendance ledgersupervisor
- Non-subscriberssupervisor
- Commerce
- Packages & Subscriptions
- Payments
- Expensessupervisor
- Engagement
- Announcementstargeted
- Complaintsanon-capable
- Notifications
- Intelligence
- Analytics & Chartsadmin
- Reports (PDF / Excel)admin
- Future Modulesreserved
- Live Tracking / GPS
- Parent / Guardian App
- Driver App
- Multi-company tenancy
04 · Foundation
Roles & Permissions
The authoritative capability matrix. Supervisor 'Limited' cells are conditional and controlled by Admin-granted permissions — for example managing return trips is only available when Admin enables it for that route.
| Capability | Student | Supervisor | Admin |
|---|---|---|---|
| Book departure time | Full | None | None |
| View own QR pass | Full | None | None |
| View bus schedule | View | View | Full |
| Scan / record attendance | None | Full | View |
| Create departure schedules | None | None | Full |
| Manage return trips | None | Limited | Full |
| Record expenses | None | Full | View |
| Record non-subscribers | None | Full | View |
| Submit complaint | Full | None | None |
| Triage / resolve complaints | None | None | Full |
| Send announcements | None | None | Full |
| View announcements | View | Limited | Full |
| Manage users (CRUD) | None | None | Full |
| View analytics & reports | None | None | Full |
09 · Screen Map
Auth & Onboarding
A single shared entry funnel resolves the user into one of three role contexts. Account type selection determines which app surface, navigation, and permission scope load after authentication.
Brand load + session/token check.
Credentials. Handles error, lockout, and forgot-password paths.
Student · Supervisor · Admin. Skipped if the account is bound to a single role.
Loads the role-specific shell, navigation, and permissions.
Edge cases handled at the funnel
10 · Screen Map
Student Screen Hierarchy
Parent and child screens for the Student app. The Home Dashboard is a hub that deep-links into every other area. Booking is a guided flow; QR Pass is offline-capable.
- Student Approot
- Home Dashboardhub
- Student name & current route
- Subscription status widget
- Payment status widget
- Remaining trips + next trip
- Latest announcement preview
- Quick actions: Book · QR · Bookings · Complaints
- Schedule
- Departure & arrival times
- Stations list
- Available seats indicator
- Book Tripflow
- Select departure time (only)
- System assigns bus + driver + supervisor
- Confirmation + booking receipt
- QR Passoffline
- Unique student QR
- Trip balance
- Subscription status
- Ride count
- My Bookings
- Upcoming
- Completed
- Cancelled
- Complaints
- New complaint
- Anonymous vs Normal toggle
- Complaint history & status
- Announcements
- List
- Detail
- Profile
- Personal information
- Subscription information
- Payment information
- Guardian information
11 · Screen Map
Supervisor Screen Hierarchy
The Supervisor app is execution-focused. Schedules are read-only for departures; return-trip management appears only when Admin grants the permission. Attendance is the operational core and works offline.
- Supervisor Approot
- Dashboardhub
- Today's riders
- Today's revenue
- Expenses
- Balance
- Scheduleread-only
- Today's assigned trips
- Return trip managementif permitted
- Attendanceoffline
- QR scan (departure / return)
- Phone number search
- Offline attendance queue
- Sync status indicator
- Expenses
- Fuel
- Cleaning
- Driver expenses
- Other
- Non-subscribers
- Record passenger
- Phone + paid amount
- Announcementsroute-scoped
- Announcements for assigned routes only
- Profile
- Personal & assignment info
12 · Screen Map
Admin Screen Hierarchy
The most complex surface. Trip Templates are the pivotal concept: Admin authors reusable schedules once, then instantiates Trips from them rather than rebuilding a schedule every day.
- Admin Dashboardroot
- Analytics Homehub
- KPIs: students, supervisors, drivers, routes, trips
- Revenue · Expenses · Profit
- Subscriptions & expired subscriptions
- Charts: by university, by route, revenue, trips, occupancy
- People
- Students — CRUD, search, filters, QRCRUD
- Supervisors — CRUD, assign routeCRUD
- Drivers — CRUD, phone, notesCRUD
- Operations
- Universities
- Destinations (From → To)
- Routes
- Trip Templates — reusable schedulesreusable
- Trips
- Departure time
- Route + destination
- Driver + supervisor + bus
- Commerce
- Packages
- Payments
- Engagement
- Announcements — one / multiple / all routestargeted
- Complaints — view, assign, resolve, close
- Insights
- Reports — PDF
- Reports — Excel
- Settings
- System configuration & permissions
13 · Core Flows
Booking Flow
The defining product rule: a student books a departure TIME, never a specific bus. The system resolves the time slot to the correct bus (and its driver + supervisor) based on capacity and route assignment.
From Home quick action or the Schedule screen.
e.g. 7:00 AM. Student sees only time slots, seats, and stations.
Engine matches the slot to Bus A / B / C by capacity & route, attaching driver + supervisor.
Checks active subscription, remaining trips, and seat availability.
Booking created, trip balance decremented, receipt issued.
Active subscription + remaining trips + seat available → booking confirmed.
Expired subscription, zero balance, or full slot → show reason + resolution (renew / pick another time).
Why time-based booking
14 · Core Flows
Attendance Flow
Supervisors record ridership on the bus using QR, phone search, or offline capture. The controlling invariant: exactly one departure scan and one return scan per student per trip — duplicates are rejected.
QR Scan
- Scan student QR pass
- Works fully offline
- Fastest during boarding
Phone Search
- Search by phone number
- Fallback when QR unavailable
- Manual confirm
Offline Capture
- Queued locally
- Auto-syncs on reconnect
- No connectivity required
Scan lifecycle
Departure or Return?
Reject if this leg already scanned.
Write to ledger (local or synced).
Departure or return recorded; rider count updates.
Blocked with a clear "already scanned" message — no double counting, no double charge.
15 · Core Flows
Offline Sync Flow
Field devices must function without connectivity. Attendance and expense actions write to a durable local queue and reconcile with the server automatically when the network returns, with deterministic conflict handling.
QR scan / expense / non-subscriber recorded on device.
Persisted durably with a client timestamp and idempotency key.
Background listener watches for network availability.
Batched upload in order; server dedupes by idempotency key.
Server acknowledges; local items marked synced; UI badge clears.
Queued items commit as-is and are removed from the local queue.
One-scan-per-leg rule wins; the earliest valid scan is kept, later duplicates discarded and reported.
Sync status is always visible
16 · Core Flows
Complaint Flow
Students can raise complaints in Normal or Anonymous mode. Anonymous complaints strip identifying data before they reach Admin. Admin then triages through a defined state machine.
Attached to student identity; supports follow-up and status notifications back to the student.
Identity removed at submission; Admin sees content only, cannot trace or reply to a person.
Admin triage state machine
New complaint lands in the queue.
Route to owner / team.
Action taken & documented.
Final state; metrics recorded.
Privacy guarantee
17 · Core Flows
Announcement & Notification Flow
Admin composes an announcement and targets one route, multiple routes, or all routes. Delivery fans out to the students on those routes and to supervisors assigned to them.
Title, body, and optional priority.
One route · multiple routes · all routes.
Expand routes → students + assigned supervisors.
Push notification + in-app inbox entry.
Student Home preview + Announcements list; Supervisor route-scoped list.
Receives on assigned route
- Latest announcement preview on Home
- Full list + detail screen
- Push notification
Route-scoped only
- Sees announcements for assigned routes only
- No cross-route visibility
18 · Core Flows
Admin Workflow
The setup-to-operate lifecycle. Admin configures the operational model once (foundational data + reusable templates), then runs daily operations by instantiating trips rather than rebuilding schedules.
One-time / periodic setup
From → To
Drivers, supervisors, students
Reusable schedules
Daily operation (no schedule rebuild)
From templates
Driver · supervisor · bus
Live occupancy, revenue, attendance
Export PDF / Excel
Templates eliminate daily rework
19 · System
Screen & Data Dependencies
Relationships that constrain build order and runtime behavior. Upstream entities must exist before downstream screens are usable, which also defines a natural implementation sequence.
A trip cannot exist without a template.
Templates are authored against a route.
Students book time slots that resolve to trips.
Attendance validates against an active booking / subscription.
QR pass reflects live subscription + balance.
Announcement audience is derived from routes.
Reports aggregate operational events.
Implementation order follows dependencies
20 · System
Error & Empty States
Every screen must define its non-happy-path states. These are first-class deliverables, not afterthoughts — each state has a clear message and a recovery affordance.
Empty
stateNo bookings, no complaints, no trips yet.
"No upcoming trips — book your first ride."
Offline
stateDevice lost connectivity.
Banner: "Offline — attendance will sync automatically."
Error
stateAction failed or server error.
Inline error + retry, never a dead end.
Loading
stateData in flight.
Skeletons matching final layout.
Blocked / Denied
statePermission or eligibility failure.
"Subscription expired — renew to book."
Success / Confirmed
stateAction committed.
Confirmation + receipt / next step.
21 · System
Business Rules
The invariants every client and service must enforce. These are non-negotiable and drive validation, permissions, and conflict resolution across the platform.
22 · System
Scalability & Roadmap
The architecture is intentionally modular. New modules attach to an existing navigation group and reuse the shared design system and identity layer, so growth does not require restructuring.
Reserved future modules
Operational depth
- Live GPS tracking & ETA for students and Admin
- Driver App (separate role surface)
- In-app payments & auto-renew subscriptions
- Push-based real-time occupancy
Platform expansion
- Parent / Guardian companion app
- Multi-company tenancy (SaaS)
- Configurable roles & permission builder
- Advanced BI & predictive demand analytics
Extension pattern