# manohar984/wonderlust architecture

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

- Interactive diagram: https://gitdiagram.com/manohar984/wonderlust
- Repository: https://github.com/manohar984/wonderlust

## Overview

Wanderlust Chronicles is a travel-planning portal: visitors browse destinations and generate travel tickets, while registered users can authenticate and administrators manage destinations, users, and portal statistics. The principal workflow runs from the Frontend through the modular Backend API to MongoDB, with destination data available as a fallback. The tree also contains a separate root-level server implementation; it is shown as a parallel, simpler API. Frontend source was not sampled, so specific UI-to-endpoint wiring is not asserted.

Main entry points: [`Backend/server.js`](https://github.com/manohar984/wonderlust/blob/main/Backend/server.js) (API server), [`Backend/routes/destinationRoutes.js`](https://github.com/manohar984/wonderlust/blob/main/Backend/routes/destinationRoutes.js) (Destination routes), [`Backend/routes/adminRoutes.js`](https://github.com/manohar984/wonderlust/blob/main/Backend/routes/adminRoutes.js) (Admin routes), [`Backend/controllers/adminController.js`](https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/adminController.js) (Admin service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web clients"]
  node_web["Travel portal"]
  node_webjs["Portal interactions<br/>[main.js]"]
  node_adminui["Admin interface<br/>[admin.html]"]
  node_adminjs["Admin interactions<br/>[admin.js]"]
end

subgraph group_api["Modular API"]
  node_server["API server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_dstroutes["Destination routes"]
  node_tickroutes["Ticket routes<br/>[ticketRoutes.js]"]
  node_adminroutes["Admin routes<br/>[adminRoutes.js]"]
  node_authmw["JWT authentication<br/>[authMiddleware.js]"]
  node_adminmw["Admin authorization<br/>[adminMiddleware.js]"]
end

subgraph group_domain["Travel services"]
  node_auth["Account service<br/>[authController.js]"]
  node_dest["Destination service"]
  node_ticket["Ticket service"]
  node_adminsvc["Admin service<br/>[adminController.js]"]
  node_destinationdata["Fallback destinations"]
end

subgraph group_data["Persistence"]
  node_user["User records<br/>[User.js]"]
  node_destination["Destination records<br/>[Destination.js]"]
  node_ticketmodel["Ticket records<br/>[Ticket.js]"]
end

node_traveler(("Traveler"))
node_admin(("Administrator"))
node_mongo[("MongoDB")]
node_rootserver["Standalone API<br/>[server.js]"]
node_rootdata["Root destination data"]

node_traveler -->|"uses"| node_web
node_web -->|"loads"| node_webjs
node_webjs -->|"API requests"| node_server
node_admin -->|"uses"| node_adminui
node_adminui -->|"loads"| node_adminjs
node_adminjs -->|"API requests"| node_server
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_dstroutes
node_server -->|"mounts"| node_tickroutes
node_server -->|"mounts"| node_adminroutes
node_authroutes -->|"dispatches"| node_auth
node_dstroutes -->|"dispatches"| node_dest
node_tickroutes -->|"dispatches"| node_ticket
node_adminroutes -->|"dispatches"| node_adminsvc
node_server -->|"protects tickets"| node_authmw
node_dstroutes -->|"checks writes"| node_authmw
node_dstroutes -->|"checks writes"| node_adminmw
node_adminroutes -->|"checks access"| node_authmw
node_adminroutes -->|"checks role"| node_adminmw
node_auth -->|"reads and writes"| node_user
node_dest -->|"reads and writes"| node_destination
node_dest -->|"fallback reads"| node_destinationdata
node_ticket -->|"reads and writes"| node_ticketmodel
node_adminsvc -->|"reads and writes"| node_user
node_adminsvc -->|"reads"| node_destination
node_adminsvc -->|"reads"| node_ticketmodel
node_user -->|"persists"| node_mongo
node_destination -->|"persists"| node_mongo
node_ticketmodel -->|"persists"| node_mongo
node_rootserver -->|"fallback reads"| node_rootdata
node_rootserver -->|"connects"| node_mongo

click node_webjs "https://github.com/manohar984/wonderlust/blob/main/Frontend/assets/js/main.js"
click node_adminui "https://github.com/manohar984/wonderlust/blob/main/Frontend/admin.html"
click node_adminjs "https://github.com/manohar984/wonderlust/blob/main/Frontend/assets/js/admin.js"
click node_server "https://github.com/manohar984/wonderlust/blob/main/Backend/server.js"
click node_authroutes "https://github.com/manohar984/wonderlust/blob/main/Backend/routes/authRoutes.js"
click node_dstroutes "https://github.com/manohar984/wonderlust/blob/main/Backend/routes/destinationRoutes.js"
click node_tickroutes "https://github.com/manohar984/wonderlust/blob/main/Backend/routes/ticketRoutes.js"
click node_adminroutes "https://github.com/manohar984/wonderlust/blob/main/Backend/routes/adminRoutes.js"
click node_authmw "https://github.com/manohar984/wonderlust/blob/main/Backend/middleware/authMiddleware.js"
click node_adminmw "https://github.com/manohar984/wonderlust/blob/main/Backend/middleware/adminMiddleware.js"
click node_auth "https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/authController.js"
click node_dest "https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/destinationController.js"
click node_ticket "https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/ticketController.js"
click node_adminsvc "https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/adminController.js"
click node_destinationdata "https://github.com/manohar984/wonderlust/blob/main/Backend/destinationsData.js"
click node_user "https://github.com/manohar984/wonderlust/blob/main/Backend/models/User.js"
click node_destination "https://github.com/manohar984/wonderlust/blob/main/Backend/models/Destination.js"
click node_ticketmodel "https://github.com/manohar984/wonderlust/blob/main/Backend/models/Ticket.js"
click node_rootserver "https://github.com/manohar984/wonderlust/blob/main/server.js"
click node_rootdata "https://github.com/manohar984/wonderlust/blob/main/destinationsData.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_web,node_webjs,node_adminui,node_adminjs toneBlue
class node_server,node_authroutes,node_dstroutes,node_tickroutes,node_adminroutes,node_authmw,node_adminmw,node_mongo toneAmber
class node_auth,node_dest,node_ticket,node_adminsvc,node_destinationdata,node_rootserver toneMint
class node_user,node_destination,node_ticketmodel toneRose
class node_traveler,node_admin toneIndigo
class node_rootdata toneTeal
```

## Components

### Web clients

- **Travel portal**
- [Portal interactions](https://github.com/manohar984/wonderlust/blob/main/Frontend/assets/js/main.js): `Frontend/assets/js/main.js`
- [Admin interface](https://github.com/manohar984/wonderlust/blob/main/Frontend/admin.html): `Frontend/admin.html`
- [Admin interactions](https://github.com/manohar984/wonderlust/blob/main/Frontend/assets/js/admin.js): `Frontend/assets/js/admin.js`

### Modular API

- [API server](https://github.com/manohar984/wonderlust/blob/main/Backend/server.js): `Backend/server.js`
- [Auth routes](https://github.com/manohar984/wonderlust/blob/main/Backend/routes/authRoutes.js): `Backend/routes/authRoutes.js`
- [Destination routes](https://github.com/manohar984/wonderlust/blob/main/Backend/routes/destinationRoutes.js): `Backend/routes/destinationRoutes.js`
- [Ticket routes](https://github.com/manohar984/wonderlust/blob/main/Backend/routes/ticketRoutes.js): `Backend/routes/ticketRoutes.js`
- [Admin routes](https://github.com/manohar984/wonderlust/blob/main/Backend/routes/adminRoutes.js): `Backend/routes/adminRoutes.js`
- [JWT authentication](https://github.com/manohar984/wonderlust/blob/main/Backend/middleware/authMiddleware.js): `Backend/middleware/authMiddleware.js`
- [Admin authorization](https://github.com/manohar984/wonderlust/blob/main/Backend/middleware/adminMiddleware.js): `Backend/middleware/adminMiddleware.js`

### Travel services

- [Account service](https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/authController.js): `Backend/controllers/authController.js`
- [Destination service](https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/destinationController.js): `Backend/controllers/destinationController.js`
- [Ticket service](https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/ticketController.js): `Backend/controllers/ticketController.js`
- [Admin service](https://github.com/manohar984/wonderlust/blob/main/Backend/controllers/adminController.js): `Backend/controllers/adminController.js`
- [Fallback destinations](https://github.com/manohar984/wonderlust/blob/main/Backend/destinationsData.js): `Backend/destinationsData.js`

### Persistence

- [User records](https://github.com/manohar984/wonderlust/blob/main/Backend/models/User.js): `Backend/models/User.js`
- [Destination records](https://github.com/manohar984/wonderlust/blob/main/Backend/models/Destination.js): `Backend/models/Destination.js`
- [Ticket records](https://github.com/manohar984/wonderlust/blob/main/Backend/models/Ticket.js): `Backend/models/Ticket.js`

### Other components

- **Traveler**
- **Administrator**
- **MongoDB**
- [Standalone API](https://github.com/manohar984/wonderlust/blob/main/server.js): `server.js`
- [Root destination data](https://github.com/manohar984/wonderlust/blob/main/destinationsData.js): `destinationsData.js`

## Connections

- Traveler → Travel portal: uses
- Travel portal → Portal interactions: loads
- Portal interactions → API server: API requests
- Administrator → Admin interface: uses
- Admin interface → Admin interactions: loads
- Admin interactions → API server: API requests
- API server → Auth routes: mounts
- API server → Destination routes: mounts
- API server → Ticket routes: mounts
- API server → Admin routes: mounts
- Auth routes → Account service: dispatches
- Destination routes → Destination service: dispatches
- Ticket routes → Ticket service: dispatches
- Admin routes → Admin service: dispatches
- API server → JWT authentication: protects tickets
- Destination routes → JWT authentication: checks writes
- Destination routes → Admin authorization: checks writes
- Admin routes → JWT authentication: checks access
- Admin routes → Admin authorization: checks role
- Account service → User records: reads and writes
- Destination service → Destination records: reads and writes
- Destination service → Fallback destinations: fallback reads
- Ticket service → Ticket records: reads and writes
- Admin service → User records: reads and writes
- Admin service → Destination records: reads
- Admin service → Ticket records: reads
- User records → MongoDB: persists
- Destination records → MongoDB: persists
- Ticket records → MongoDB: persists
- Standalone API → Root destination data: fallback reads
- Standalone API → MongoDB: connects
