React · TypeScript · TanStack · MapLibre · Supabase · Bun · Vercel · Cloudflare · Resend · OpenAPI · MCP
App · API · Android · iOS · AI · Data · Docs · Status · OpenAPI
Gapwise began with a common student challenge: a university timetable shows when classes meet, but offers no guidance on what to do with the time between them, how long walking routes take across campus, or when to leave to arrive on time.
Gapwise turns university timetable schedules into an intelligent, campus-aware model of a student's day:
- What is next? Contextual class schedules with real-time countdowns.
- Where do I need to go? Source-backed building identities, footprints, and entrance locations.
- When should I leave? Deterministic leave-by and arrival calculations accounting for route duration and setup buffers.
- How much usable time do I have? Automatic detection of gaps between classes, minus travel and transition buffers.
- Can I go there? Feasibility checks evaluating whether a student can visit a campus destination and return before the next class starts.
All timetable parsing happens locally in the browser with zero account requirement. Guest mode is first-class, and optional cloud sync uses browser-side encryption.
The project originated at the University of Toronto and has expanded into a unified multi-university platform serving institutions across Canada.
Gapwise is one application serving dedicated university editions via host-based routing:
| University | Campus Scope | Timetable Source | Edition URL |
|---|---|---|---|
| University of Toronto | Mississauga, St. George, and Scarborough | ACORN (.ics calendar export) |
gapwise.ca |
| Carleton University | Main Campus | Carleton Central (text paste or .ics) |
carleton.gapwise.ca |
| Toronto Metropolitan University | Downtown Campus | MyServiceHub (text paste or Google Calendar .ics) |
tmu.gapwise.ca |
| Queen's University | Kingston Main Campus | SOLUS Student Center (text paste or .ics) |
queens.gapwise.ca |
| Wilfrid Laurier University | Waterloo Campus | LORIS (text paste or .ics) |
laurier.gapwise.ca |
| York University | Keele Campus | York Courses Timetable (text paste or .ics) |
york.gapwise.ca |
| McMaster University | Hamilton Main Campus | Mosaic Student Center (text paste or .ics) |
mcmaster.gapwise.ca |
| Western University | London Campus | Student Center (text paste or .ics) |
western.gapwise.ca |
| University of Guelph | Guelph Campus | WebAdvisor (text paste or .ics) |
guelph.gapwise.ca |
| University of Ottawa | Downtown Campus | uoCampus (text paste or .ics) |
uottawa.gapwise.ca |
| Brock University | St. Catharines Campus | BrockDB / Student Portal (text paste or .ics) |
brock.gapwise.ca |
| University of British Columbia | Vancouver / Point Grey Campus | Workday View My Courses (table copy/paste) | ubc.gapwise.ca |
| University of Waterloo | Main Campus | Quest Class Schedule (list-view copy/paste) | waterloo.gapwise.ca |
- Local-first browser parsing: University calendar files (
.ics) and pasted schedule text are parsed on-device. No schedule data is uploaded simply to render a timetable. - University adapters: Dedicated parsing logic handles university-specific timetable layouts, course code conventions, section types, and room notations.
- First-class guest mode: Full functionality is available without creating an account or signing in.
- Realistic demo timetables: Every university edition includes an authentic demo timetable allowing students to explore features before importing their own schedule.
- Real-time countdowns to the next class or active gap.
- Deterministic walking-time estimates between campus buildings.
- Protected transition buffers and pack-up times prevent late arrivals.
- Safe fallbacks for online, TBA, approximate, or unmapped locations.
- Automatically calculates free windows between classes across the week.
- Evaluates usable time by subtracting walking duration, buffer times, and transit overhead.
- Categorizes gap opportunities for focused study, quick resets, meals, or library visits.
- "Can I go there?" evaluates whether a round trip to a specific campus spot fits within an available gap.
- Building registries with verified polygon footprints, native codes, and aliases.
- Mapped exterior entrances and pedestrian routing networks derived from OpenStreetMap snapshots.
- Step-free routing fails closed when verified accessibility evidence is unavailable, preventing misleading navigation advice.
- Interactive in-browser timeline scrubber allowing students to simulate any campus day from morning to evening.
- Visualizes class progression, walking transitions, gap windows, and leave-by states.
Gapwise avoids fragmented forks by implementing a clean four-tier architecture:
┌─────────────────────────────────────────────────────────────┐
│ ONE GAPWISE APPLICATION │
│ Shared React / TanStack Core · UI · Routing Engine │
└──────────────────────────────┬──────────────────────────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Host-Based │ │ Timetable │ │ Canonical │
│ Editions │ │ Adapters │ │ Campus Data │
│ universities.│ │ src/ │ │ GapwiseHQ/ │
│ json │ │ universities/│ │ data │
└──────────────┘ └──────────────┘ └──────────────┘
- Hostname resolution: The production hostname (e.g.,
carleton.gapwise.ca) resolves the active university configuration inuniversities.json. For local development,?university=<id>selects the active edition. - Timetable adapters: Each university implements an adapter that normalizes native schedule formats into the shared
Meetingcontract. - Campus data snapshots: Validated building footprints, entrance nodes, and pedestrian path graphs are pinned from
GapwiseHQ/dataat build time, ensuring offline reliability and zero runtime coupling. - Isolated SEO & social previews: Each university edition generates its own
sitemap.xml,robots.txt, schema.org metadata, and dedicated 1200×630 Open Graph preview image with zero cross-university leakage.
Campus facts, geometry, and routing evidence are maintained in GapwiseHQ/data and explored at data.gapwise.ca.
- Source-backed: Building geometries and path networks are extracted from OpenStreetMap under the Open Database License (ODbL 1.0) and cross-verified against official university campus directories.
- Uncertainty is preserved: Missing, inferred, or unverified access points are explicitly tagged rather than masked as confident routing paths.
- Auditable distribution: Pinned dataset releases include SHA-256 integrity checksums and machine-readable manifests.
Gapwise is built around strict data minimization and defense in depth:
- Local-first schedule processing: Timetable parsing and schedule arithmetic run client-side in WebAssembly/JavaScript.
- No account required: Complete timetable, gap planning, and campus routing features work out of the box in guest mode.
- Browser-encrypted cloud sync: Optional multi-device sync encrypts timetable state client-side using AES-256-GCM before sending payloads to Supabase.
- Foreground-only location: Live location is strictly opt-in and foreground-only; location coordinates are never logged or stored.
- Scoped AI delegation: The Model Context Protocol (MCP) service at ai.gapwise.ca provides assistant integrations through explicit, revocable OAuth delegation. AI clients cannot modify academic schedules.
- No advertising or data sales: Zero trackers, zero third-party advertising, and zero monetization of student schedule data.
Read PRIVACY.md, SECURITY.md, and docs/PRIVATE_CLOUD_SECURITY_ARCHITECTURE.md for full architectural audits.
| Repository | Role | Primary Surface |
|---|---|---|
gapwise |
Canonical multi-university web application, core semantics, public API, and SDKs | gapwise.ca / api.gapwise.ca |
data |
Canonical multi-university campus navigation datasets, schemas, and contribution studio | data.gapwise.ca |
docs |
Platform developer documentation, API/SDK references, and integration guides | docs.gapwise.ca |
ai |
Remote Model Context Protocol (MCP) server for public campus tools and delegated context | ai.gapwise.ca |
status |
Independent operational status monitoring and incident reporting | status.gapwise.ca |
android |
Native Kotlin + Jetpack Compose Android client | Android app |
ios |
Native Swift + SwiftUI iOS client | iOS app |
cli |
Public campus discovery and queries, plus university integration scaffolding | CLI guide |
.github |
Organization profile, community health files, and governance defaults | GitHub profile |
# Clone the repository
git clone https://github.com/GapwiseHQ/gapwise.git
cd gapwise
# Install dependencies
bun install --frozen-lockfile
# Start development server
bun run devVisit http://localhost:5173 to test the default edition, or use http://localhost:5173/?university=<id> (e.g., ?university=carleton, ?university=york) to preview a specific university edition.
bun run typecheck # TypeScript compilation verification
bun run lint # ESLint and code style checks
bun test # Full unit and integration test suite
bun run validate:universities # Multi-university platform contract validation
bun run build # Production Vite build, SEO generation, and asset checks
bunx prettier --check . # Code formatting checkGapwise is created and engineered by Andrew Muratov, leading platform architecture, full-stack development, campus data pipelines, cryptography, and systems design across the ecosystem.
Original code and documentation are released under the MIT License. Third-party libraries, map data (OpenStreetMap under ODbL 1.0), fonts, and services remain subject to their respective licenses. See THIRD_PARTY_NOTICES.md.
Built for the spaces between classes.