# ulric-r/hotel-1 architecture

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

- Interactive diagram: https://gitdiagram.com/ulric-r/hotel-1
- Repository: https://github.com/ulric-r/hotel-1

## Overview

Hôtel Nature is a hotel website with a protected content-management admin and a FastAPI backend. Visitors browse accommodation and hotel content, inspect rooms, then enter a reservation flow; administrators manage site collections and reservation records. The README documents API routing, proxy authentication, uploads and offline editing. Sampled code confirms room loading, room-detail navigation, admin data loading/deletion and storage calls; unsampled feature wiring is shown only where documented, with uncertain links omitted.

Main entry points: [`src/App.tsx`](https://github.com/ulric-r/hotel-1/blob/main/src/App.tsx) (App entry), [`src/admin/AdminApp.tsx`](https://github.com/ulric-r/hotel-1/blob/main/src/admin/AdminApp.tsx) (Admin dispatcher), [`backend/app/main.py`](https://github.com/ulric-r/hotel-1/blob/main/backend/app/main.py) (FastAPI routes), [`src/lib/api.ts`](https://github.com/ulric-r/hotel-1/blob/main/src/lib/api.ts) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public website"]
  node_app["App entry<br/>[App.tsx]"]
  node_rooms["Room browsing<br/>[Rooms.tsx]"]
  node_roomdetail["Room details"]
  node_reservation["Reservation flow"]
  node_sitecontent["Hotel content"]
  node_fallback["Room fallback<br/>[rooms.ts]"]
  node_router["Route state<br/>[router.ts]"]
  node_useapi["API data hook<br/>[useApi.ts]"]
end

subgraph group_admin["Admin management"]
  node_adminapp["Admin dispatcher<br/>[AdminApp.tsx]"]
  node_dashboard["Admin dashboard<br/>[Dashboard.tsx]"]
  node_collectionadmin["Collection editors"]
  node_reservationadmin["Reservation editor"]
  node_adminui["Admin UI tools<br/>[ui.tsx]"]
end

subgraph group_backend["API and persistence"]
  node_apiclient["API client<br/>[api.ts]"]
  node_fastapi["FastAPI routes<br/>[main.py]"]
  node_models["Data schemas<br/>[models.py]"]
  node_storage["Collection storage<br/>[storage.py]"]
  node_sqldb[("SQL database<br/>[db.py]")]
  node_uploads["Image uploads<br/>[main.py]"]
end

subgraph group_edge["Proxy and access"]
  node_nginx["Nginx proxy<br/>[nginx.conf]"]
end

node_visitor(("Visitor"))
node_operator(("Administrator"))
node_browser(("Browser"))

node_visitor -->|"uses"| node_browser
node_browser -->|"requests site"| node_nginx
node_nginx -->|"serves SPA"| node_app
node_nginx -->|"proxies API"| node_fastapi
node_operator -->|"uses admin"| node_browser
node_nginx -->|"protects admin"| node_adminapp
node_app -->|"checks route"| node_router
node_app -->|"dispatches admin"| node_adminapp
node_app -->|"loads rooms"| node_useapi
node_useapi -->|"calls loader"| node_apiclient
node_useapi -->|"falls back"| node_fallback
node_app -->|"renders"| node_rooms
node_app -->|"renders"| node_sitecontent
node_app -->|"opens details"| node_roomdetail
node_roomdetail -->|"selects room"| node_app
node_app -->|"opens reservation"| node_reservation
node_reservation -->|"submits request"| node_apiclient
node_adminapp -->|"dispatches"| node_dashboard
node_adminapp -->|"dispatches"| node_collectionadmin
node_adminapp -->|"dispatches"| node_reservationadmin
node_collectionadmin -->|"loads data"| node_useapi
node_collectionadmin -->|"saves changes"| node_apiclient
node_collectionadmin -->|"uses controls"| node_adminui
node_reservationadmin -->|"manages records"| node_apiclient
node_apiclient -->|"HTTP requests"| node_fastapi
node_fastapi -->|"validates payloads"| node_models
node_fastapi -->|"reads and writes"| node_storage
node_storage -.->|"SQL operations"| node_sqldb
node_fastapi -->|"handles images"| node_uploads

click node_app "https://github.com/ulric-r/hotel-1/blob/main/src/App.tsx"
click node_rooms "https://github.com/ulric-r/hotel-1/blob/main/src/components/Rooms.tsx"
click node_roomdetail "https://github.com/ulric-r/hotel-1/blob/main/src/components/RoomDetailModal.tsx"
click node_reservation "https://github.com/ulric-r/hotel-1/blob/main/src/components/ReservationModal.tsx"
click node_sitecontent "https://github.com/ulric-r/hotel-1/tree/main/src/components"
click node_fallback "https://github.com/ulric-r/hotel-1/blob/main/src/data/rooms.ts"
click node_router "https://github.com/ulric-r/hotel-1/blob/main/src/lib/router.ts"
click node_useapi "https://github.com/ulric-r/hotel-1/blob/main/src/lib/useApi.ts"
click node_adminapp "https://github.com/ulric-r/hotel-1/blob/main/src/admin/AdminApp.tsx"
click node_dashboard "https://github.com/ulric-r/hotel-1/blob/main/src/admin/Dashboard.tsx"
click node_collectionadmin "https://github.com/ulric-r/hotel-1/tree/main/src/admin"
click node_reservationadmin "https://github.com/ulric-r/hotel-1/blob/main/src/admin/ReservationsAdmin.tsx"
click node_adminui "https://github.com/ulric-r/hotel-1/blob/main/src/admin/ui.tsx"
click node_apiclient "https://github.com/ulric-r/hotel-1/blob/main/src/lib/api.ts"
click node_fastapi "https://github.com/ulric-r/hotel-1/blob/main/backend/app/main.py"
click node_models "https://github.com/ulric-r/hotel-1/blob/main/backend/app/models.py"
click node_storage "https://github.com/ulric-r/hotel-1/blob/main/backend/app/storage.py"
click node_sqldb "https://github.com/ulric-r/hotel-1/blob/main/backend/app/db.py"
click node_uploads "https://github.com/ulric-r/hotel-1/blob/main/backend/app/main.py"
click node_nginx "https://github.com/ulric-r/hotel-1/blob/main/nginx/nginx.conf"

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_rooms,node_roomdetail,node_reservation,node_sitecontent,node_fallback,node_router,node_useapi,node_browser toneBlue
class node_adminapp,node_dashboard,node_collectionadmin,node_reservationadmin,node_adminui toneAmber
class node_apiclient,node_fastapi,node_models,node_storage,node_sqldb,node_uploads toneMint
class node_nginx toneRose
class node_visitor,node_operator toneIndigo
```

## Components

### Public website

- [App entry](https://github.com/ulric-r/hotel-1/blob/main/src/App.tsx): `src/App.tsx`
- [Room browsing](https://github.com/ulric-r/hotel-1/blob/main/src/components/Rooms.tsx): `src/components/Rooms.tsx`
- [Room details](https://github.com/ulric-r/hotel-1/blob/main/src/components/RoomDetailModal.tsx): `src/components/RoomDetailModal.tsx`
- [Reservation flow](https://github.com/ulric-r/hotel-1/blob/main/src/components/ReservationModal.tsx): `src/components/ReservationModal.tsx`
- [Hotel content](https://github.com/ulric-r/hotel-1/tree/main/src/components): `src/components`
- [Room fallback](https://github.com/ulric-r/hotel-1/blob/main/src/data/rooms.ts): `src/data/rooms.ts`
- [Route state](https://github.com/ulric-r/hotel-1/blob/main/src/lib/router.ts): `src/lib/router.ts`
- [API data hook](https://github.com/ulric-r/hotel-1/blob/main/src/lib/useApi.ts): `src/lib/useApi.ts`

### Admin management

- [Admin dispatcher](https://github.com/ulric-r/hotel-1/blob/main/src/admin/AdminApp.tsx): `src/admin/AdminApp.tsx`
- [Admin dashboard](https://github.com/ulric-r/hotel-1/blob/main/src/admin/Dashboard.tsx): `src/admin/Dashboard.tsx`
- [Collection editors](https://github.com/ulric-r/hotel-1/tree/main/src/admin): `src/admin`
- [Reservation editor](https://github.com/ulric-r/hotel-1/blob/main/src/admin/ReservationsAdmin.tsx): `src/admin/ReservationsAdmin.tsx`
- [Admin UI tools](https://github.com/ulric-r/hotel-1/blob/main/src/admin/ui.tsx): `src/admin/ui.tsx`

### API and persistence

- [API client](https://github.com/ulric-r/hotel-1/blob/main/src/lib/api.ts): `src/lib/api.ts`
- [FastAPI routes](https://github.com/ulric-r/hotel-1/blob/main/backend/app/main.py): `backend/app/main.py`
- [Data schemas](https://github.com/ulric-r/hotel-1/blob/main/backend/app/models.py): `backend/app/models.py`
- [Collection storage](https://github.com/ulric-r/hotel-1/blob/main/backend/app/storage.py): `backend/app/storage.py`
- [SQL database](https://github.com/ulric-r/hotel-1/blob/main/backend/app/db.py): `backend/app/db.py`
- [Image uploads](https://github.com/ulric-r/hotel-1/blob/main/backend/app/main.py): `backend/app/main.py`

### Proxy and access

- [Nginx proxy](https://github.com/ulric-r/hotel-1/blob/main/nginx/nginx.conf): `nginx/nginx.conf`

### Other components

- **Visitor**
- **Administrator**
- **Browser**

## Connections

- Visitor → Browser: uses
- Browser → Nginx proxy: requests site
- Nginx proxy → App entry: serves SPA
- Nginx proxy → FastAPI routes: proxies API
- Administrator → Browser: uses admin
- Nginx proxy → Admin dispatcher: protects admin
- App entry → Route state: checks route
- App entry → Admin dispatcher: dispatches admin
- App entry → API data hook: loads rooms
- API data hook → API client: calls loader
- API data hook → Room fallback: falls back
- App entry → Room browsing: renders
- App entry → Hotel content: renders
- App entry → Room details: opens details
- Room details → App entry: selects room
- App entry → Reservation flow: opens reservation
- Reservation flow → API client: submits request
- Admin dispatcher → Admin dashboard: dispatches
- Admin dispatcher → Collection editors: dispatches
- Admin dispatcher → Reservation editor: dispatches
- Collection editors → API data hook: loads data
- Collection editors → API client: saves changes
- Collection editors → Admin UI tools: uses controls
- Reservation editor → API client: manages records
- API client → FastAPI routes: HTTP requests
- FastAPI routes → Data schemas: validates payloads
- FastAPI routes → Collection storage: reads and writes
- Collection storage → SQL database: SQL operations
- FastAPI routes → Image uploads: handles images
