Ecosystem architecture
Gapwise is one product ecosystem. gapwise contains the single web application for all university editions. Repository boundaries separate deployment, trust, and ownership; they do not create parallel sources of truth.
All canonical repositories are owned by the Gapwise GitHub organization at https://github.com/GapwiseHQ. Andrew Muratov remains the creator and primary maintainer.
Repository ownership
Section titled “Repository ownership”| Repository | Owns |
|---|---|
GapwiseHQ/gapwise |
web/PWA behavior, canonical student-state semantics, deterministic timetable/gap/routing logic, public API v1, OpenAPI, and both official SDK implementations |
GapwiseHQ/android |
native Android UX, device integration, secure mobile persistence, and Android distribution |
GapwiseHQ/ios |
native iOS UX, device integration, secure mobile persistence, and iOS distribution |
GapwiseHQ/ai |
OAuth/MCP delegation, permission checks, minimized delegated snapshots, and bounded AI actions |
GapwiseHQ/data |
campus-data provenance, evidence, schemas, attribution, transformations, and reuse guidance |
GapwiseHQ/cli |
repeatable university scaffolding and validation commands |
GapwiseHQ/docs |
canonical public documentation of released first-party contracts |
GapwiseHQ/status |
independently deployed service health and incident communication |
The canonical web implementation and campus data for all supported universities are consolidated into gapwise and data, respectively. The JavaScript and Python SDKs remain in gapwise/sdk; a separate SDK repository would duplicate stable published source.
University edition flow
Section titled “University edition flow”hostname -> universities.json -> university timetable adapter -> shared meetings | |data/universities/<id>/campus.json -> campus catalog + path graph -> shared UI/routingGapwise resolves hostnames dynamically: gapwise.ca selects U of T, carleton.gapwise.ca selects Carleton, tmu.gapwise.ca selects TMU, queens.gapwise.ca selects Queen’s, laurier.gapwise.ca selects Laurier, york.gapwise.ca selects York, and mcmaster.gapwise.ca selects McMaster. See Add a university for the scaffold, data, testing, and deployment workflow.
Source-of-truth flow
Section titled “Source-of-truth flow”campus evidence / canonical data | v gapwise core deterministic product semantics / | \ / | \ student public mobile web API client | +-----+-----+ | | v v TypeScript SDK Python SDK npm + JSR PyPI
private student state | | explicit minimized delegation v ai repository OAuth/MCP
released contracts ---> docs repositoryprovenance/evidence --> data repositorypublic service health -> status repositorySDK distribution model
Section titled “SDK distribution model”Gapwise maintains two SDK implementations, not one SDK per runtime:
- TypeScript:
@gapwise/sdk- npm
0.1.1is published with provenance; - JSR
0.1.1is published with provenance through the core repository’s GitHub Actions OIDC publisher; - Node, Bun, and Deno are runtime/portability targets for this same implementation.
- npm
- Python:
gapwise==0.1.0- published on PyPI through Trusted Publishing;
- synchronous and asynchronous clients expose the same public v1 resources.
TypeScript and Python are equal first-party SDKs. Language-appropriate naming is expected, but capabilities, bounded enum values, uncertainty semantics, errors, and examples should stay aligned with OpenAPI v1.
Cross-repository rules
Section titled “Cross-repository rules”- OpenAPI and the core implementation own public HTTP behavior.
- Mobile consumes canonical semantics instead of reimplementing timetable/routing truth.
- AI receives explicit delegated context and does not become an authoritative timetable engine.
- Data explains where campus facts came from and preserves fact/inference/uncertainty distinctions.
- Docs describe released behavior and link to owning repositories rather than inventing contracts.
- Status reports operational evidence and does not infer package/product truth from uptime.
- Registry, runtime, app-store, and AI-client compatibility claims require external evidence.
- A meaningful contract change should be reviewed for downstream effects in every affected repository.
Canonical public surfaces
Section titled “Canonical public surfaces”- GitHub:
https://github.com/GapwiseHQ - App:
https://gapwise.ca - API:
https://api.gapwise.ca/v1 - OpenAPI:
https://api.gapwise.ca/openapi.json - Docs:
https://docs.gapwise.ca - Data:
https://data.gapwise.ca - AI/MCP:
https://ai.gapwise.ca/api/mcp - Status:
https://status.gapwise.ca
The public API and SDKs expose campus intelligence only. Private student context remains behind separate authentication/delegation boundaries.
Change-impact checklist
Section titled “Change-impact checklist”Before calling an ecosystem change complete, check whether it affects:
- OpenAPI/public API behavior;
- TypeScript SDK code/types/examples and npm/JSR distribution;
- Python SDK code/types/examples and PyPI distribution;
- native mobile semantics or adapters;
- data schemas/provenance/uncertainty;
- AI delegated schemas/permissions/tools;
- public documentation;
- status probes, canonical endpoints, or incident terminology;
- privacy, security, accessibility, attribution, or source-of-truth statements.
Connected does not mean duplicated: every surface should know how it relates to the others while preserving clear ownership.