# yoshido24/tourist-navigator-application architecture

> Architecture diagram of the GitHub repository yoshido24/tourist-navigator-application, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/yoshido24/tourist-navigator-application
- Repository: https://github.com/yoshido24/tourist-navigator-application

## Overview

Tourist Navigator serves three connected roles: visitors discover Montalban attractions, plan routes and transport, and book tours; admins maintain attractions, transport, guides, bookings, and shop products; guides review assignments, run tours, and view completed-tour history. Each portal bundle loads shared state and renders its role-specific experience. The README documents additional shop, visitor, and guide-application capabilities that are represented by feature-directory nodes where detailed source was not sampled. Runtime links below follow documented portal responsibilities and sampled calls; unsampled feature wiring is not inferred.

Main entry points: [`frontend/shared/js/state.js`](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/shared/js/state.js) (State and storage), [`frontend/web/js/portal.js`](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/js/portal.js) (Tourist portal), [`frontend/desktop/js/portal.js`](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/js/portal.js) (Admin portal), [`frontend/mobile/js/portal.js`](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/js/portal.js) (Guide portal)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_visitor["Tourist Portal"]
  node_webentry["Web app<br/>[user.html]"]
  node_webportal["Tourist portal<br/>[portal.js]"]
  node_discover["Attraction discovery<br/>[attractions.js]"]
  node_map["Attraction map<br/>[map.js]"]
  node_directions["Routes and transit<br/>[directions.js]"]
  node_webbooking["Tour booking<br/>[booking.js]"]
  node_webshop["Mini Shop<br/>[shop.js]"]
end

subgraph group_admin["Admin Portal"]
  node_desktopentry["Admin app<br/>[admin.html]"]
  node_adminportal["Admin portal<br/>[portal.js]"]
  node_adminattractions["Attraction management<br/>[attractions.js]"]
  node_transportedit["Transit editor<br/>[transport.js]"]
  node_adminbookings["Booking assignment<br/>[bookings.js]"]
  node_adminshop["Shop management<br/>[shop.js]"]
  node_guideadmin["Guide and applications<br/>[portal.js]"]
end

subgraph group_guide["Guide Portal"]
  node_mobileentry["Guide app<br/>[guide.html]"]
  node_guideportal["Guide portal<br/>[portal.js]"]
  node_schedule["Tour schedule<br/>[schedule.js]"]
  node_guidehistory["Completed tours<br/>[bookings.js]"]
  node_visitorlist["Visitor lists<br/>[visitors.js]"]
  node_guidesignup["Guide access<br/>[guide-signup.js]"]
end

subgraph group_runtime["Shared Runtime"]
  node_state["State and storage<br/>[state.js]"]
  node_supabase[("Supabase")]
  node_indexeddb[("Browser IndexedDB")]
end

node_tourist(("Tourist"))
node_guideuser(("Tour Guide"))
node_adminuser(("Administrator"))
node_tiles["OpenStreetMap tiles"]
node_maps["External map services"]

node_tourist -->|"opens"| node_webentry
node_webentry -->|"loads"| node_webportal
node_webportal -->|"loads state"| node_state
node_webportal -->|"renders"| node_discover
node_webportal -->|"renders"| node_map
node_webportal -->|"sets up"| node_webbooking
node_webportal -->|"renders"| node_webshop
node_discover -->|"selects route"| node_directions
node_map -.->|"loads tiles"| node_tiles
node_directions -.->|"opens directions"| node_maps
node_webbooking -->|"updates state"| node_state
node_adminuser -->|"opens"| node_desktopentry
node_desktopentry -->|"loads"| node_adminportal
node_adminportal -->|"loads state"| node_state
node_adminportal -->|"manages"| node_adminattractions
node_adminportal -->|"manages"| node_adminbookings
node_adminportal -->|"sets up"| node_adminshop
node_adminportal -->|"renders"| node_guideadmin
node_adminattractions -->|"edits options"| node_transportedit
node_adminattractions -->|"updates state"| node_state
node_adminbookings -->|"updates state"| node_state
node_adminshop -->|"updates state"| node_state
node_guideadmin -->|"updates state"| node_state
node_guideuser -->|"opens"| node_mobileentry
node_mobileentry -->|"loads"| node_guideportal
node_guideportal -->|"loads state"| node_state
node_guideportal -->|"renders"| node_schedule
node_guideportal -->|"renders"| node_guidehistory
node_guideportal -->|"renders"| node_visitorlist
node_guidesignup -->|"updates state"| node_state
node_schedule -->|"updates state"| node_state
node_state -.->|"reads and writes"| node_supabase
node_state -->|"falls back"| node_indexeddb

click node_webentry "https://github.com/yoshido24/tourist-navigator-application/blob/main/apps/web/user.html"
click node_webportal "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/js/portal.js"
click node_discover "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/attractions/attractions.js"
click node_map "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/map/map.js"
click node_directions "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/directions/directions.js"
click node_webbooking "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/booking/booking.js"
click node_webshop "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/shop/shop.js"
click node_desktopentry "https://github.com/yoshido24/tourist-navigator-application/blob/main/apps/desktop/admin.html"
click node_adminportal "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/js/portal.js"
click node_adminattractions "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/features/attractions/attractions.js"
click node_transportedit "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/features/transport/transport.js"
click node_adminbookings "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/features/bookings/bookings.js"
click node_adminshop "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/features/shop/shop.js"
click node_guideadmin "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/js/portal.js"
click node_mobileentry "https://github.com/yoshido24/tourist-navigator-application/blob/main/apps/mobile/guide.html"
click node_guideportal "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/js/portal.js"
click node_schedule "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/features/schedule/schedule.js"
click node_guidehistory "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/features/bookings/bookings.js"
click node_visitorlist "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/features/visitors/visitors.js"
click node_guidesignup "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/js/guide-signup.js"
click node_state "https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/shared/js/state.js"

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_webentry,node_webportal,node_discover,node_map,node_directions,node_webbooking,node_webshop toneBlue
class node_desktopentry,node_adminportal,node_adminattractions,node_transportedit,node_adminbookings,node_adminshop,node_guideadmin toneAmber
class node_mobileentry,node_guideportal,node_schedule,node_guidehistory,node_visitorlist,node_guidesignup toneMint
class node_state,node_supabase,node_indexeddb toneRose
class node_tourist,node_guideuser,node_adminuser,node_tiles,node_maps toneIndigo
```

## Components

### Tourist Portal

- [Web app](https://github.com/yoshido24/tourist-navigator-application/blob/main/apps/web/user.html): `apps/web/user.html`
- [Tourist portal](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/js/portal.js): `frontend/web/js/portal.js`
- [Attraction discovery](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/attractions/attractions.js): `frontend/web/features/attractions/attractions.js`
- [Attraction map](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/map/map.js): `frontend/web/features/map/map.js`
- [Routes and transit](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/directions/directions.js): `frontend/web/features/directions/directions.js`
- [Tour booking](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/booking/booking.js): `frontend/web/features/booking/booking.js`
- [Mini Shop](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/web/features/shop/shop.js): `frontend/web/features/shop/shop.js`

### Admin Portal

- [Admin app](https://github.com/yoshido24/tourist-navigator-application/blob/main/apps/desktop/admin.html): `apps/desktop/admin.html`
- [Admin portal](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/js/portal.js): `frontend/desktop/js/portal.js`
- [Attraction management](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/features/attractions/attractions.js): `frontend/desktop/features/attractions/attractions.js`
- [Transit editor](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/features/transport/transport.js): `frontend/desktop/features/transport/transport.js`
- [Booking assignment](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/features/bookings/bookings.js): `frontend/desktop/features/bookings/bookings.js`
- [Shop management](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/features/shop/shop.js): `frontend/desktop/features/shop/shop.js`
- [Guide and applications](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/desktop/js/portal.js): `frontend/desktop/js/portal.js`

### Guide Portal

- [Guide app](https://github.com/yoshido24/tourist-navigator-application/blob/main/apps/mobile/guide.html): `apps/mobile/guide.html`
- [Guide portal](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/js/portal.js): `frontend/mobile/js/portal.js`
- [Tour schedule](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/features/schedule/schedule.js): `frontend/mobile/features/schedule/schedule.js`
- [Completed tours](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/features/bookings/bookings.js): `frontend/mobile/features/bookings/bookings.js`
- [Visitor lists](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/features/visitors/visitors.js): `frontend/mobile/features/visitors/visitors.js`
- [Guide access](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/mobile/js/guide-signup.js): `frontend/mobile/js/guide-signup.js`

### Shared Runtime

- [State and storage](https://github.com/yoshido24/tourist-navigator-application/blob/main/frontend/shared/js/state.js): `frontend/shared/js/state.js`
- **Supabase**
- **Browser IndexedDB**

### Other components

- **Tourist**
- **Tour Guide**
- **Administrator**
- **OpenStreetMap tiles**
- **External map services**

## Connections

- Tourist → Web app: opens
- Web app → Tourist portal: loads
- Tourist portal → State and storage: loads state
- Tourist portal → Attraction discovery: renders
- Tourist portal → Attraction map: renders
- Tourist portal → Tour booking: sets up
- Tourist portal → Mini Shop: renders
- Attraction discovery → Routes and transit: selects route
- Attraction map → OpenStreetMap tiles: loads tiles
- Routes and transit → External map services: opens directions
- Tour booking → State and storage: updates state
- Administrator → Admin app: opens
- Admin app → Admin portal: loads
- Admin portal → State and storage: loads state
- Admin portal → Attraction management: manages
- Admin portal → Booking assignment: manages
- Admin portal → Shop management: sets up
- Admin portal → Guide and applications: renders
- Attraction management → Transit editor: edits options
- Attraction management → State and storage: updates state
- Booking assignment → State and storage: updates state
- Shop management → State and storage: updates state
- Guide and applications → State and storage: updates state
- Tour Guide → Guide app: opens
- Guide app → Guide portal: loads
- Guide portal → State and storage: loads state
- Guide portal → Tour schedule: renders
- Guide portal → Completed tours: renders
- Guide portal → Visitor lists: renders
- Guide access → State and storage: updates state
- Tour schedule → State and storage: updates state
- State and storage → Supabase: reads and writes
- State and storage → Browser IndexedDB: falls back
