# uplbtools/room-tba architecture

> Architecture diagram of the GitHub repository uplbtools/room-tba, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/uplbtools/room-tba
- Repository: https://github.com/uplbtools/room-tba

## Overview

Room TBA is a map-first campus platform for finding UPLB places, rooms, classes, schedules, and routes, with offline access and in-app community editing. The main user flow is search or browse, inspect a map/entity result, then view schedule or directions; planners and campus information add distinct branches. The graph also shows proposal review, administration, and local caching. Relationships are grounded in README statements and the supplied excerpts/index; unsampled implementation details are not inferred.

Main entry points: [`src/components/svelte/AppRoot.svelte`](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/AppRoot.svelte) (App interface), [`src/lib/services/proposal-service.ts`](https://github.com/uplbtools/room-tba/blob/main/src/lib/services/proposal-service.ts) (Proposal service), [`src/components/svelte/Map.svelte`](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/Map.svelte) (Campus map), [`src/lib/services/admin-service.ts`](https://github.com/uplbtools/room-tba/blob/main/src/lib/services/admin-service.ts) (Admin service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Map &amp; Discovery"]
  node_app["App interface<br/>[AppRoot.svelte]"]
  node_map["Campus map<br/>[Map.svelte]"]
  node_search["Search<br/>[Search.svelte]"]
  node_browse["Campus browse<br/>[browse-campus.ts]"]
  node_offline[("Offline cache<br/>[sync.ts]")]
end

subgraph group_campus["Campus Information"]
  node_classes["Class search<br/>[ClassQuery.svelte]"]
  node_schedule["Room schedules"]
  node_finals["Final exams<br/>[final-exams.ts]"]
  node_calendar["Academic calendar"]
  node_events["Campus events<br/>[event-service.ts]"]
end

subgraph group_planning["Travel &amp; Planning"]
  node_transit["Jeepney routes<br/>[jeepney-routes.ts]"]
  node_directions["Route finding<br/>[engine.ts]"]
  node_planner["Course planner"]
  node_today["Today agenda<br/>[TodayScreen.svelte]"]
end

subgraph group_community["Community Editing"]
  node_proposalui["Proposal review"]
  node_proposalclient["Proposal client<br/>[client.ts]"]
  node_proposalservice["Proposal service"]
  node_admin["Admin service<br/>[admin-service.ts]"]
  node_contributions["Contributions"]
end

subgraph group_platform["Platform Services"]
  node_schema[("Application database<br/>[schema.ts]")]
  node_account["Account security"]
  node_storageui["Offline settings<br/>[DataStorage.svelte]"]
  node_cacheops["Cache management"]
end

node_student(("Student"))

node_student -->|"uses"| node_app
node_app -->|"searches"| node_search
node_app -->|"views"| node_map
node_app -->|"browses"| node_browse
node_search -->|"finds courses"| node_classes
node_classes -->|"loads exams"| node_finals
node_map -->|"shows schedules"| node_schedule
node_map -->|"shows events"| node_events
node_map -->|"shows routes"| node_transit
node_map -->|"plans routes"| node_directions
node_planner -->|"supplies plan"| node_today
node_planner -->|"routes stops"| node_directions
node_app -->|"opens calendar"| node_calendar
node_app -->|"uses cached data"| node_offline
node_storageui -->|"clears cache"| node_cacheops
node_student -->|"suggests edits"| node_proposalui
node_proposalui -->|"reviews proposals"| node_proposalclient
node_proposalclient -.->|"calls proposal API"| node_proposalservice
node_proposalservice -->|"creates rooms"| node_admin
node_proposalservice -->|"records contribution"| node_contributions
node_admin -->|"reads events"| node_events
node_proposalservice -->|"checks schema errors"| node_account
node_proposalservice -->|"reads and writes"| node_schema
node_admin -->|"reads and writes"| node_schema
node_proposalservice -.->|"sends review notice"| node_student

click node_app "https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/AppRoot.svelte"
click node_map "https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/Map.svelte"
click node_search "https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/search/Search.svelte"
click node_browse "https://github.com/uplbtools/room-tba/blob/main/src/lib/browse-campus.ts"
click node_offline "https://github.com/uplbtools/room-tba/blob/main/src/lib/local/data/sync.ts"
click node_classes "https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/controls/ClassQuery.svelte"
click node_schedule "https://github.com/uplbtools/room-tba/blob/main/src/lib/schedule-renderer.ts"
click node_finals "https://github.com/uplbtools/room-tba/blob/main/src/lib/final-exams.ts"
click node_calendar "https://github.com/uplbtools/room-tba/blob/main/src/lib/academic-calendar.ts"
click node_events "https://github.com/uplbtools/room-tba/blob/main/src/lib/services/event-service.ts"
click node_transit "https://github.com/uplbtools/room-tba/blob/main/src/constants/jeepney-routes.ts"
click node_directions "https://github.com/uplbtools/room-tba/blob/main/src/lib/travel-graph/engine.ts"
click node_planner "https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/planner/PlannerScreen.svelte"
click node_today "https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/today/TodayScreen.svelte"
click node_proposalui "https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/ProposalReviewPanel.svelte"
click node_proposalclient "https://github.com/uplbtools/room-tba/blob/main/src/lib/proposals/client.ts"
click node_proposalservice "https://github.com/uplbtools/room-tba/blob/main/src/lib/services/proposal-service.ts"
click node_admin "https://github.com/uplbtools/room-tba/blob/main/src/lib/services/admin-service.ts"
click node_contributions "https://github.com/uplbtools/room-tba/blob/main/src/lib/services/contribution-service.ts"
click node_schema "https://github.com/uplbtools/room-tba/blob/main/drizzle/schema.ts"
click node_account "https://github.com/uplbtools/room-tba/blob/main/src/lib/services/account-security.ts"
click node_storageui "https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/modal/DataStorage.svelte"
click node_cacheops "https://github.com/uplbtools/room-tba/blob/main/src/lib/local/clear-cached-data.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_map,node_search,node_browse,node_offline toneBlue
class node_classes,node_schedule,node_finals,node_calendar,node_events toneAmber
class node_transit,node_directions,node_planner,node_today toneMint
class node_proposalui,node_proposalclient,node_proposalservice,node_admin,node_contributions toneRose
class node_schema,node_account,node_storageui,node_cacheops,node_student toneIndigo
```

## Components

### Map & Discovery

- [App interface](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/AppRoot.svelte): `src/components/svelte/AppRoot.svelte`
- [Campus map](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/Map.svelte): `src/components/svelte/Map.svelte`
- [Search](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/search/Search.svelte): `src/components/svelte/search/Search.svelte`
- [Campus browse](https://github.com/uplbtools/room-tba/blob/main/src/lib/browse-campus.ts): `src/lib/browse-campus.ts`
- [Offline cache](https://github.com/uplbtools/room-tba/blob/main/src/lib/local/data/sync.ts): `src/lib/local/data/sync.ts`

### Campus Information

- [Class search](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/controls/ClassQuery.svelte): `src/components/svelte/controls/ClassQuery.svelte`
- [Room schedules](https://github.com/uplbtools/room-tba/blob/main/src/lib/schedule-renderer.ts): `src/lib/schedule-renderer.ts`
- [Final exams](https://github.com/uplbtools/room-tba/blob/main/src/lib/final-exams.ts): `src/lib/final-exams.ts`
- [Academic calendar](https://github.com/uplbtools/room-tba/blob/main/src/lib/academic-calendar.ts): `src/lib/academic-calendar.ts`
- [Campus events](https://github.com/uplbtools/room-tba/blob/main/src/lib/services/event-service.ts): `src/lib/services/event-service.ts`

### Travel & Planning

- [Jeepney routes](https://github.com/uplbtools/room-tba/blob/main/src/constants/jeepney-routes.ts): `src/constants/jeepney-routes.ts`
- [Route finding](https://github.com/uplbtools/room-tba/blob/main/src/lib/travel-graph/engine.ts): `src/lib/travel-graph/engine.ts`
- [Course planner](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/planner/PlannerScreen.svelte): `src/components/svelte/planner/PlannerScreen.svelte`
- [Today agenda](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/today/TodayScreen.svelte): `src/components/svelte/today/TodayScreen.svelte`

### Community Editing

- [Proposal review](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/ProposalReviewPanel.svelte): `src/components/svelte/ProposalReviewPanel.svelte`
- [Proposal client](https://github.com/uplbtools/room-tba/blob/main/src/lib/proposals/client.ts): `src/lib/proposals/client.ts`
- [Proposal service](https://github.com/uplbtools/room-tba/blob/main/src/lib/services/proposal-service.ts): `src/lib/services/proposal-service.ts`
- [Admin service](https://github.com/uplbtools/room-tba/blob/main/src/lib/services/admin-service.ts): `src/lib/services/admin-service.ts`
- [Contributions](https://github.com/uplbtools/room-tba/blob/main/src/lib/services/contribution-service.ts): `src/lib/services/contribution-service.ts`

### Platform Services

- [Application database](https://github.com/uplbtools/room-tba/blob/main/drizzle/schema.ts): `drizzle/schema.ts`
- [Account security](https://github.com/uplbtools/room-tba/blob/main/src/lib/services/account-security.ts): `src/lib/services/account-security.ts`
- [Offline settings](https://github.com/uplbtools/room-tba/blob/main/src/components/svelte/modal/DataStorage.svelte): `src/components/svelte/modal/DataStorage.svelte`
- [Cache management](https://github.com/uplbtools/room-tba/blob/main/src/lib/local/clear-cached-data.ts): `src/lib/local/clear-cached-data.ts`

### Other components

- **Student**

## Connections

- Student → App interface: uses
- App interface → Search: searches
- App interface → Campus map: views
- App interface → Campus browse: browses
- Search → Class search: finds courses
- Class search → Final exams: loads exams (evidence: `src/components/svelte/controls/ClassQuery.svelte`)
- Campus map → Room schedules: shows schedules
- Campus map → Campus events: shows events
- Campus map → Jeepney routes: shows routes
- Campus map → Route finding: plans routes
- Course planner → Today agenda: supplies plan
- Course planner → Route finding: routes stops
- App interface → Academic calendar: opens calendar
- App interface → Offline cache: uses cached data
- Offline settings → Cache management: clears cache (evidence: `src/components/svelte/modal/DataStorage.svelte`)
- Student → Proposal review: suggests edits
- Proposal review → Proposal client: reviews proposals (evidence: `src/components/svelte/ProposalReviewPanel.svelte`)
- Proposal client → Proposal service: calls proposal API
- Proposal service → Admin service: creates rooms (evidence: `src/lib/services/proposal-service.ts`)
- Proposal service → Contributions: records contribution (evidence: `src/lib/services/proposal-service.ts`)
- Admin service → Campus events: reads events (evidence: `src/lib/services/admin-service.ts`)
- Proposal service → Account security: checks schema errors (evidence: `src/lib/services/proposal-service.ts`)
- Proposal service → Application database: reads and writes (evidence: `src/lib/services/proposal-service.ts`)
- Admin service → Application database: reads and writes (evidence: `src/lib/services/admin-service.ts`)
- Proposal service → Student: sends review notice
