# gouravdev246/room-shifting-lpu architecture

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

- Interactive diagram: https://gitdiagram.com/gouravdev246/room-shifting-lpu
- Repository: https://github.com/gouravdev246/room-shifting-lpu

## Overview

Room Shifting LPU is a hostel-room listing and discovery application: users browse and filter rooms, inspect details and owner contact, and authenticated users can register, log in, upload listing photos, create listings, or delete their own listings. The client routes users through the home, room-add, registration, and login views; the server dispatches API routes to domain handlers and persistence or upload services. Redis optionally caches room searches. Edges reflect the supplied excerpts and source-index references; no README was supplied, and client-to-server API wiring was not evidenced in the excerpts.

Main entry points: [`client/src/App.tsx`](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/App.tsx) (Client router), [`server/src/app.js`](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/app.js) (HTTP application), [`server/src/modules/room/room.routes.js`](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/room/room.routes.js) (Room routes), [`server/src/common/middlewares/authMiddleware.js`](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/middlewares/authMiddleware.js) (Token verification)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app_ui["Client router<br/>[App.tsx]"]
  node_home["Room discovery<br/>[HomePage.tsx]"]
  node_listing_card["Hostel listings"]
  node_room_detail["Room details<br/>[RoomDetail.tsx]"]
  node_room_add["Create listing<br/>[RoomAdd.tsx]"]
  node_login["Login<br/>[Login.tsx]"]
  node_register["Registration<br/>[Register.tsx]"]
  node_navbar["Navigation<br/>[Navbar.tsx]"]
  node_auth_context["Auth state<br/>[AuthContext.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_api["API routing"]
  node_server["HTTP application<br/>[app.js]"]
  node_auth_routes["Auth routes<br/>[auth.routes.js]"]
  node_room_routes["Room routes<br/>[room.routes.js]"]
  node_upload_routes["Upload route<br/>[upload.routes.js]"]
end

subgraph group_domain["Listing and identity"]
  node_auth_controller["Auth operations<br/>[auth.controller.js]"]
  node_auth_model["User records<br/>[auth.model.js]"]
  node_room_controller["Room operations<br/>[room.controller.js]"]
  node_room_model["Room records<br/>[room.model.js]"]
  node_auth_middleware["Token verification<br/>[authMiddleware.js]"]
  node_optional_auth["Optional identity<br/>[optionalAuth.js]"]
  node_upload_service["Photo upload<br/>[upload.service.js]"]
end

subgraph group_infra["Persistence and media"]
  node_database[("PostgreSQL<br/>[db.js]")]
  node_redis[("Redis cache<br/>[redis.js]")]
  node_cloudinary["Cloudinary config<br/>[cloudinary.js]"]
  node_startup["Server startup<br/>[server.js]"]
end

node_user(("Visitor or member"))

node_user -->|"uses"| node_app_ui
node_app_ui -->|"routes to"| node_home
node_app_ui -->|"routes to"| node_room_add
node_app_ui -->|"routes to"| node_register
node_app_ui -->|"routes to"| node_login
node_app_ui -->|"renders"| node_navbar
node_app_ui -->|"provides"| node_auth_context
node_home -->|"renders"| node_listing_card
node_listing_card -->|"opens"| node_room_detail
node_user -.->|"sends requests"| node_server
node_server -->|"mounts"| node_auth_routes
node_server -->|"mounts"| node_room_routes
node_server -->|"mounts"| node_upload_routes
node_auth_routes -->|"dispatches"| node_auth_controller
node_room_routes -->|"dispatches"| node_room_controller
node_upload_routes -->|"calls"| node_upload_service
node_auth_routes -->|"guards"| node_auth_middleware
node_room_routes -->|"guards"| node_auth_middleware
node_room_routes -->|"applies"| node_optional_auth
node_upload_routes -->|"guards"| node_auth_middleware
node_auth_controller -->|"queries"| node_auth_model
node_room_controller -->|"queries"| node_room_model
node_room_controller -->|"caches listings"| node_redis
node_auth_model -->|"queries"| node_database
node_room_model -->|"queries"| node_database
node_auth_middleware -->|"loads user"| node_database
node_upload_service -->|"uploads to"| node_cloudinary
node_startup -->|"starts"| node_server
node_startup -->|"connects"| node_database
node_startup -->|"connects"| node_redis

click node_app_ui "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/App.tsx"
click node_home "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/HomePage.tsx"
click node_listing_card "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/HostelDetailsCard.tsx"
click node_room_detail "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/RoomDetail.tsx"
click node_room_add "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/RoomAdd.tsx"
click node_login "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/Login.tsx"
click node_register "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/Register.tsx"
click node_navbar "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/Navbar.tsx"
click node_auth_context "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/context/AuthContext.tsx"
click node_api_client "https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/lib/api.ts"
click node_server "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/app.js"
click node_auth_routes "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/auth/auth.routes.js"
click node_room_routes "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/room/room.routes.js"
click node_upload_routes "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/upload/upload.routes.js"
click node_auth_controller "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/auth/auth.controller.js"
click node_auth_model "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/auth/auth.model.js"
click node_room_controller "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/room/room.controller.js"
click node_room_model "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/room/room.model.js"
click node_auth_middleware "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/middlewares/authMiddleware.js"
click node_optional_auth "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/middlewares/optionalAuth.js"
click node_upload_service "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/upload/upload.service.js"
click node_database "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/config/db.js"
click node_redis "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/config/redis.js"
click node_cloudinary "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/config/cloudinary.js"
click node_startup "https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/server.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_app_ui,node_home,node_listing_card,node_room_detail,node_room_add,node_login,node_register,node_navbar,node_auth_context,node_api_client toneBlue
class node_server,node_auth_routes,node_room_routes,node_upload_routes toneAmber
class node_auth_controller,node_auth_model,node_room_controller,node_room_model,node_auth_middleware,node_optional_auth,node_upload_service toneMint
class node_database,node_redis,node_cloudinary,node_startup toneRose
class node_user toneIndigo
```

## Components

### Web client

- [Client router](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/App.tsx): `client/src/App.tsx`
- [Room discovery](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/HomePage.tsx): `client/src/components/HomePage.tsx`
- [Hostel listings](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/HostelDetailsCard.tsx): `client/src/components/HostelDetailsCard.tsx`
- [Room details](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/RoomDetail.tsx): `client/src/components/RoomDetail.tsx`
- [Create listing](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/RoomAdd.tsx): `client/src/components/RoomAdd.tsx`
- [Login](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/Login.tsx): `client/src/components/Login.tsx`
- [Registration](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/Register.tsx): `client/src/components/Register.tsx`
- [Navigation](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/components/Navbar.tsx): `client/src/components/Navbar.tsx`
- [Auth state](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/context/AuthContext.tsx): `client/src/context/AuthContext.tsx`
- [API client](https://github.com/gouravdev246/room-shifting-lpu/blob/main/client/src/lib/api.ts): `client/src/lib/api.ts`

### API routing

- [HTTP application](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/app.js): `server/src/app.js`
- [Auth routes](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/auth/auth.routes.js): `server/src/modules/auth/auth.routes.js`
- [Room routes](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/room/room.routes.js): `server/src/modules/room/room.routes.js`
- [Upload route](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/upload/upload.routes.js): `server/src/modules/upload/upload.routes.js`

### Listing and identity

- [Auth operations](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/auth/auth.controller.js): `server/src/modules/auth/auth.controller.js`
- [User records](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/auth/auth.model.js): `server/src/modules/auth/auth.model.js`
- [Room operations](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/room/room.controller.js): `server/src/modules/room/room.controller.js`
- [Room records](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/room/room.model.js): `server/src/modules/room/room.model.js`
- [Token verification](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/middlewares/authMiddleware.js): `server/src/common/middlewares/authMiddleware.js`
- [Optional identity](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/middlewares/optionalAuth.js): `server/src/common/middlewares/optionalAuth.js`
- [Photo upload](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/modules/upload/upload.service.js): `server/src/modules/upload/upload.service.js`

### Persistence and media

- [PostgreSQL](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/config/db.js): `server/src/common/config/db.js`
- [Redis cache](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/config/redis.js): `server/src/common/config/redis.js`
- [Cloudinary config](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/common/config/cloudinary.js): `server/src/common/config/cloudinary.js`
- [Server startup](https://github.com/gouravdev246/room-shifting-lpu/blob/main/server/src/server.js): `server/src/server.js`

### Other components

- **Visitor or member**

## Connections

- Visitor or member → Client router: uses
- Client router → Room discovery: routes to (evidence: `client/src/App.tsx`)
- Client router → Create listing: routes to (evidence: `client/src/App.tsx`)
- Client router → Registration: routes to (evidence: `client/src/App.tsx`)
- Client router → Login: routes to (evidence: `client/src/App.tsx`)
- Client router → Navigation: renders (evidence: `client/src/App.tsx`)
- Client router → Auth state: provides (evidence: `client/src/App.tsx`)
- Room discovery → Hostel listings: renders (evidence: `client/src/components/HomePage.tsx`)
- Hostel listings → Room details: opens (evidence: `client/src/components/HostelDetailsCard.tsx`)
- Visitor or member → HTTP application: sends requests
- HTTP application → Auth routes: mounts (evidence: `server/src/app.js`)
- HTTP application → Room routes: mounts (evidence: `server/src/app.js`)
- HTTP application → Upload route: mounts (evidence: `server/src/app.js`)
- Auth routes → Auth operations: dispatches (evidence: `server/src/modules/auth/auth.routes.js`)
- Room routes → Room operations: dispatches (evidence: `server/src/modules/room/room.routes.js`)
- Upload route → Photo upload: calls (evidence: `server/src/modules/upload/upload.routes.js`)
- Auth routes → Token verification: guards (evidence: `server/src/modules/auth/auth.routes.js`)
- Room routes → Token verification: guards (evidence: `server/src/modules/room/room.routes.js`)
- Room routes → Optional identity: applies (evidence: `server/src/modules/room/room.routes.js`)
- Upload route → Token verification: guards (evidence: `server/src/modules/upload/upload.routes.js`)
- Auth operations → User records: queries (evidence: `server/src/modules/auth/auth.controller.js`)
- Room operations → Room records: queries (evidence: `server/src/modules/room/room.controller.js`)
- Room operations → Redis cache: caches listings (evidence: `server/src/modules/room/room.controller.js`)
- User records → PostgreSQL: queries (evidence: `server/src/modules/auth/auth.model.js`)
- Room records → PostgreSQL: queries (evidence: `server/src/modules/room/room.model.js`)
- Token verification → PostgreSQL: loads user (evidence: `server/src/common/middlewares/authMiddleware.js`)
- Photo upload → Cloudinary config: uploads to (evidence: `server/src/modules/upload/upload.service.js`)
- Server startup → HTTP application: starts (evidence: `server/src/server.js`)
- Server startup → PostgreSQL: connects (evidence: `server/src/server.js`)
- Server startup → Redis cache: connects (evidence: `server/src/server.js`)
