Venue model
Waylocate maps use a layered architecture so university, mall, airport, and other venue types share one rendering core.
Layers
1. Data plane
FloorBundle: geometry, cells, portals, semantics- Public campus CDN/API provider chain
- Indoor pathfinding (pure, no React)
- Blended indoor + outdoor routing
2. Map host (rendering plane)
- MapLibre + Three.js custom layer
- Scene graph, visibility, navigation ribbons
- Must not import from application-specific code
3. Venue profile (configuration plane)
VenueType,VenueProfile: terminology, visualization preset, theme overrides- Theme merge chain: default ← profile ← campus extras ← building extras
- Venue differences flow through profile config + small adapters, not page branches
4. Application shell
One route wires composable hooks and a presentational layout. Venue-specific behavior is driven by profile configuration, not if (venueType === 'mall') branches in the map renderer.
Bundle fields
Campus and building extras can override venue type, preview shell colors, and theme tokens without changing the core schema.
See campus schema for the underlying document structure.