# murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system architecture

> Architecture diagram of the GitHub repository murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system, 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/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system
- Repository: https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system

## Overview

Sai Iconic Liv is a PG property brochure and starter management system. Visitors browse room options and property information, then submit an enquiry; if submission fails, the site offers WhatsApp as a fallback. Staff have room, enquiry, and resident-management screens backed by API endpoints and PostgreSQL persistence. The code includes an admin login and JWT components, but the README explicitly warns that admin APIs are not yet protected. Links reflect shown calls or documented behavior; database wiring and some authentication interactions are not established by the excerpts.

Main entry points: [`backend/src/main/java/com/saiiconicliv/api/ApiController.java`](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/ApiController.java) (REST endpoints), [`frontend/src/App.jsx`](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/App.jsx) (Property brochure), [`frontend/src/main.jsx`](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/main.jsx) (Page routing), [`backend/src/main/java/com/saiiconicliv/api/ResidentService.java`](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/ResidentService.java) (Resident operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public website"]
  node_brochure["Property brochure<br/>[App.jsx]"]
  node_room_details["Room details<br/>[App.jsx]"]
  node_enquiry_form["Enquiry form<br/>[App.jsx]"]
end

subgraph group_admin["Admin experience"]
  node_router["Page routing<br/>[main.jsx]"]
  node_admin_login["Admin login<br/>[AdminLogin.jsx]"]
  node_admin_dashboard["Admin dashboard<br/>[Admin.jsx]"]
  node_api_client["Admin API client<br/>[api.js]"]
end

subgraph group_api["Backend API"]
  node_api_controller["REST endpoints<br/>[ApiController.java]"]
  node_resident_service["Resident operations"]
end

subgraph group_persistence["Persistence and security"]
  node_room_repo["Pricing room repository"]
  node_enquiry_repo["Enquiry repository"]
  node_pg_room_repo["Physical room repository"]
  node_resident_repo["Resident repository"]
  node_room_entity["Pricing room model<br/>[Room.java]"]
  node_enquiry_entity["Enquiry model<br/>[Enquiry.java]"]
  node_pg_room_entity["Physical room model<br/>[PgRoom.java]"]
  node_resident_entity["Resident model<br/>[Resident.java]"]
  node_jwt_filter["JWT filter"]
  node_jwt_service["JWT service<br/>[JwtService.java]"]
  node_auth_controller["Authentication endpoints"]
  node_admin_users["Admin user repository"]
  node_admin_user["Admin user model<br/>[AdminUser.java]"]
end

node_visitor(("Visitor"))
node_whatsapp["WhatsApp"]
node_maps["Maps directions"]
node_postgres[("PostgreSQL")]

node_visitor -->|"opens site"| node_router
node_router -->|"routes to"| node_brochure
node_router -->|"routes to"| node_admin_login
node_router -->|"routes to"| node_admin_dashboard
node_brochure -->|"opens details"| node_room_details
node_brochure -->|"loads room options"| node_api_controller
node_enquiry_form -->|"submits enquiry"| node_api_controller
node_enquiry_form -->|"falls back"| node_whatsapp
node_brochure -->|"links contact"| node_whatsapp
node_brochure -->|"links directions"| node_maps
node_admin_dashboard -->|"uses"| node_api_client
node_admin_login -->|"uses"| node_api_client
node_api_client -.->|"calls API"| node_api_controller
node_api_controller -->|"reads and writes"| node_room_repo
node_api_controller -->|"reads and writes"| node_enquiry_repo
node_api_controller -->|"delegates resident work"| node_resident_service
node_resident_service -->|"reads and writes"| node_pg_room_repo
node_resident_service -->|"reads and writes"| node_resident_repo
node_room_repo -->|"persists"| node_room_entity
node_enquiry_repo -->|"persists"| node_enquiry_entity
node_pg_room_repo -->|"persists"| node_pg_room_entity
node_resident_repo -->|"persists"| node_resident_entity
node_room_repo -.->|"database access"| node_postgres
node_enquiry_repo -.->|"database access"| node_postgres
node_pg_room_repo -.->|"database access"| node_postgres
node_resident_repo -.->|"database access"| node_postgres
node_jwt_filter -->|"validates tokens"| node_jwt_service
node_auth_controller -->|"creates tokens"| node_jwt_service
node_admin_users -->|"stores"| node_admin_user
node_auth_controller -.->|"authenticates via"| node_admin_users

click node_brochure "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/App.jsx"
click node_room_details "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/App.jsx"
click node_enquiry_form "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/App.jsx"
click node_router "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/main.jsx"
click node_admin_login "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/AdminLogin.jsx"
click node_admin_dashboard "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/Admin.jsx"
click node_api_client "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/services/api.js"
click node_api_controller "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/ApiController.java"
click node_resident_service "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/ResidentService.java"
click node_room_repo "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/RoomRepository.java"
click node_enquiry_repo "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/EnquiryRepository.java"
click node_pg_room_repo "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/PgRoomRepository.java"
click node_resident_repo "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/ResidentRepository.java"
click node_room_entity "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/Room.java"
click node_enquiry_entity "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/Enquiry.java"
click node_pg_room_entity "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/PgRoom.java"
click node_resident_entity "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/Resident.java"
click node_jwt_filter "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/JwtAuthenticationFilter.java"
click node_jwt_service "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/JwtService.java"
click node_auth_controller "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/AuthController.java"
click node_admin_users "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/AdminUserRepository.java"
click node_admin_user "https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/AdminUser.java"

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_brochure,node_room_details,node_enquiry_form toneBlue
class node_router,node_admin_login,node_admin_dashboard,node_api_client,node_postgres toneAmber
class node_api_controller,node_resident_service toneMint
class node_room_repo,node_enquiry_repo,node_pg_room_repo,node_resident_repo,node_room_entity,node_enquiry_entity,node_pg_room_entity,node_resident_entity,node_jwt_filter,node_jwt_service,node_auth_controller,node_admin_users,node_admin_user toneRose
class node_visitor,node_whatsapp,node_maps toneIndigo
```

## Components

### Public website

- [Property brochure](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Room details](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Enquiry form](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`

### Admin experience

- [Page routing](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/main.jsx): `frontend/src/main.jsx`
- [Admin login](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/AdminLogin.jsx): `frontend/src/AdminLogin.jsx`
- [Admin dashboard](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/Admin.jsx): `frontend/src/Admin.jsx`
- [Admin API client](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/frontend/src/services/api.js): `frontend/src/services/api.js`

### Backend API

- [REST endpoints](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/ApiController.java): `backend/src/main/java/com/saiiconicliv/api/ApiController.java`
- [Resident operations](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/ResidentService.java): `backend/src/main/java/com/saiiconicliv/api/ResidentService.java`

### Persistence and security

- [Pricing room repository](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/RoomRepository.java): `backend/src/main/java/com/saiiconicliv/api/RoomRepository.java`
- [Enquiry repository](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/EnquiryRepository.java): `backend/src/main/java/com/saiiconicliv/api/EnquiryRepository.java`
- [Physical room repository](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/PgRoomRepository.java): `backend/src/main/java/com/saiiconicliv/api/PgRoomRepository.java`
- [Resident repository](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/ResidentRepository.java): `backend/src/main/java/com/saiiconicliv/api/ResidentRepository.java`
- [Pricing room model](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/Room.java): `backend/src/main/java/com/saiiconicliv/api/Room.java`
- [Enquiry model](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/Enquiry.java): `backend/src/main/java/com/saiiconicliv/api/Enquiry.java`
- [Physical room model](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/PgRoom.java): `backend/src/main/java/com/saiiconicliv/api/PgRoom.java`
- [Resident model](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/Resident.java): `backend/src/main/java/com/saiiconicliv/api/Resident.java`
- [JWT filter](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/JwtAuthenticationFilter.java): `backend/src/main/java/com/saiiconicliv/api/JwtAuthenticationFilter.java`
- [JWT service](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/JwtService.java): `backend/src/main/java/com/saiiconicliv/api/JwtService.java`
- [Authentication endpoints](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/AuthController.java): `backend/src/main/java/com/saiiconicliv/api/AuthController.java`
- [Admin user repository](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/AdminUserRepository.java): `backend/src/main/java/com/saiiconicliv/api/AdminUserRepository.java`
- [Admin user model](https://github.com/murari123-byte/sai-iconic-liv-pg-2-pg-website-management-system/blob/main/backend/src/main/java/com/saiiconicliv/api/AdminUser.java): `backend/src/main/java/com/saiiconicliv/api/AdminUser.java`

### Other components

- **Visitor**
- **WhatsApp**
- **Maps directions**
- **PostgreSQL**

## Connections

- Visitor → Page routing: opens site (evidence: `frontend/src/main.jsx`)
- Page routing → Property brochure: routes to (evidence: `frontend/src/main.jsx`)
- Page routing → Admin login: routes to (evidence: `frontend/src/main.jsx`)
- Page routing → Admin dashboard: routes to (evidence: `frontend/src/main.jsx`)
- Property brochure → Room details: opens details (evidence: `frontend/src/App.jsx`)
- Property brochure → REST endpoints: loads room options (evidence: `frontend/src/App.jsx`)
- Enquiry form → REST endpoints: submits enquiry (evidence: `frontend/src/App.jsx`)
- Enquiry form → WhatsApp: falls back (evidence: `frontend/src/App.jsx`)
- Property brochure → WhatsApp: links contact (evidence: `frontend/src/App.jsx`)
- Property brochure → Maps directions: links directions (evidence: `frontend/src/App.jsx`)
- Admin dashboard → Admin API client: uses (evidence: `frontend/src/Admin.jsx`)
- Admin login → Admin API client: uses (evidence: `frontend/src/AdminLogin.jsx`)
- Admin API client → REST endpoints: calls API
- REST endpoints → Pricing room repository: reads and writes (evidence: `backend/src/main/java/com/saiiconicliv/api/ApiController.java`)
- REST endpoints → Enquiry repository: reads and writes (evidence: `backend/src/main/java/com/saiiconicliv/api/ApiController.java`)
- REST endpoints → Resident operations: delegates resident work (evidence: `backend/src/main/java/com/saiiconicliv/api/ApiController.java`)
- Resident operations → Physical room repository: reads and writes (evidence: `backend/src/main/java/com/saiiconicliv/api/ResidentService.java`)
- Resident operations → Resident repository: reads and writes (evidence: `backend/src/main/java/com/saiiconicliv/api/ResidentService.java`)
- Pricing room repository → Pricing room model: persists (evidence: `backend/src/main/java/com/saiiconicliv/api/RoomRepository.java`)
- Enquiry repository → Enquiry model: persists (evidence: `backend/src/main/java/com/saiiconicliv/api/EnquiryRepository.java`)
- Physical room repository → Physical room model: persists (evidence: `backend/src/main/java/com/saiiconicliv/api/PgRoomRepository.java`)
- Resident repository → Resident model: persists (evidence: `backend/src/main/java/com/saiiconicliv/api/ResidentRepository.java`)
- Pricing room repository → PostgreSQL: database access
- Enquiry repository → PostgreSQL: database access
- Physical room repository → PostgreSQL: database access
- Resident repository → PostgreSQL: database access
- JWT filter → JWT service: validates tokens (evidence: `backend/src/main/java/com/saiiconicliv/api/JwtAuthenticationFilter.java`)
- Authentication endpoints → JWT service: creates tokens (evidence: `backend/src/main/java/com/saiiconicliv/api/AuthController.java`)
- Admin user repository → Admin user model: stores (evidence: `backend/src/main/java/com/saiiconicliv/api/AdminUserRepository.java`)
- Authentication endpoints → Admin user repository: authenticates via
