# zainshah3464/zain-serenity architecture

> Architecture diagram of the GitHub repository zainshah3464/zain-serenity, 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/zainshah3464/zain-serenity
- Repository: https://github.com/zainshah3464/zain-serenity

## Overview

Zain’s Serenity is a resort booking and administration application. Guests discover rooms, check date availability, register or sign in, place bookings, track reservations, and use reviews, gallery, and contact features. The API routes own the domain operations: booking creation validates input and availability before persisting, while room listing combines room, booking, and review data. Admin routes support booking decisions and management, plus revenue, occupancy, and availability reporting. MongoDB models provide persistence; email and image hosting are external integrations. The excerpts show several route implementations; other feature links reflect README capabilities and are not claims of inspected component wiring.

Main entry points: [`src/app/api/admin/dashboard/route.ts`](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/dashboard/route.ts) (Dashboard reporting), [`src/app/api/bookings/route.ts`](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/bookings/route.ts) (Booking API), [`src/models/Booking.ts`](https://github.com/zainshah3464/zain-serenity/blob/main/src/models/Booking.ts) (Booking records), [`src/app/api/rooms/route.ts`](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/rooms/route.ts) (Room catalog API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_guest["Guest experience"]
  node_room_browse["Room discovery<br/>[page.tsx]"]
  node_room_detail["Room detail<br/>[page.tsx]"]
  node_booking_ui["Booking flow<br/>[BookingContent.tsx]"]
  node_account_ui["Account access<br/>[page.tsx]"]
  node_my_bookings["My bookings<br/>[page.tsx]"]
  node_guest_extras["Reviews and contact"]
end

subgraph group_domain["API and domain"]
  node_rooms_api["Room catalog API<br/>[route.ts]"]
  node_booking_api["Booking API<br/>[route.ts]"]
  node_reviews_api["Reviews API<br/>[route.ts]"]
  node_auth_api["Authentication<br/>[route.ts]"]
  node_register_api["Registration<br/>[route.ts]"]
  node_contact_api["Contact API<br/>[route.ts]"]
  node_availability["Availability checks"]
  node_validation["Booking validation"]
  node_email_templates["Email templates<br/>[emailTemplates.ts]"]
end

subgraph group_data["Persistence"]
  node_room_model[("Room records<br/>[Room.ts]")]
  node_booking_model[("Booking records<br/>[Booking.ts]")]
  node_user_model[("User records<br/>[User.ts]")]
  node_review_model[("Review records<br/>[Review.ts]")]
  node_gallery_model[("Gallery records<br/>[GalleryImage.ts]")]
end

subgraph group_admin["Admin operations"]
  node_admin_ui["Admin dashboard<br/>[AdminDashboard.tsx]"]
  node_admin_bookings["Booking management<br/>[page.tsx]"]
  node_admin_rooms["Room management<br/>[page.tsx]"]
  node_admin_gallery["Gallery management<br/>[page.tsx]"]
  node_admin_users["User management<br/>[page.tsx]"]
  node_dashboard_api["Dashboard reporting<br/>[route.ts]"]
  node_admin_booking_api["Booking decisions<br/>[route.ts]"]
  node_admin_gallery_api["Gallery API<br/>[route.ts]"]
  node_admin_rooms_api["Room management API<br/>[route.ts]"]
  node_admin_users_api["User management API<br/>[route.ts]"]
end

node_guest_actor(("Guest"))
node_mongo[("MongoDB")]
node_cloudinary["Cloudinary"]
node_mail_service["Email service"]

node_guest_actor -->|"browses"| node_room_browse
node_guest_actor -->|"registers"| node_account_ui
node_guest_actor -->|"engages"| node_guest_extras
node_room_browse -->|"requests rooms"| node_rooms_api
node_room_detail -->|"starts booking"| node_booking_ui
node_booking_ui -->|"submits reservation"| node_booking_api
node_booking_api -->|"validates input"| node_validation
node_booking_api -->|"checks dates"| node_availability
node_booking_api -->|"creates and reads"| node_booking_model
node_rooms_api -->|"reads rooms"| node_room_model
node_rooms_api -->|"filters dates"| node_booking_model
node_rooms_api -->|"calculates ratings"| node_review_model
node_my_bookings -->|"loads reservations"| node_booking_api
node_guest_extras -->|"submits review"| node_reviews_api
node_reviews_api -->|"checks and creates"| node_review_model
node_guest_extras -->|"sends inquiry"| node_contact_api
node_account_ui -->|"creates account"| node_register_api
node_register_api -->|"creates user"| node_user_model
node_auth_api -->|"authenticates user"| node_user_model
node_register_api -->|"formats verification"| node_email_templates
node_contact_api -->|"formats inquiry"| node_email_templates
node_admin_ui -->|"requests metrics"| node_dashboard_api
node_admin_bookings -->|"updates status"| node_admin_booking_api
node_admin_rooms -->|"manages rooms"| node_admin_rooms_api
node_admin_gallery -->|"manages images"| node_admin_gallery_api
node_admin_users -->|"manages users"| node_admin_users_api
node_dashboard_api -->|"queries bookings"| node_booking_model
node_dashboard_api -->|"queries rooms"| node_room_model
node_dashboard_api -->|"queries users"| node_user_model
node_dashboard_api -->|"queries reviews"| node_review_model
node_admin_booking_api -->|"updates booking"| node_booking_model
node_admin_booking_api -->|"formats notice"| node_email_templates
node_admin_gallery_api -->|"uploads image"| node_cloudinary
node_admin_gallery_api -->|"stores metadata"| node_gallery_model
node_email_templates -->|"email content"| node_mail_service
node_room_model -->|"persists records"| node_mongo
node_booking_model -->|"persists records"| node_mongo
node_user_model -->|"persists records"| node_mongo
node_review_model -->|"persists records"| node_mongo
node_gallery_model -->|"persists records"| node_mongo

click node_room_browse "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/rooms/page.tsx"
click node_room_detail "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/rooms/%5Bid%5D/page.tsx"
click node_booking_ui "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/booking/BookingContent.tsx"
click node_account_ui "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/register/page.tsx"
click node_my_bookings "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/my-bookings/page.tsx"
click node_rooms_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/rooms/route.ts"
click node_booking_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/bookings/route.ts"
click node_reviews_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/reviews/route.ts"
click node_auth_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/auth/%5B...nextauth%5D/route.ts"
click node_register_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/auth/register/route.ts"
click node_contact_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/contact/route.ts"
click node_availability "https://github.com/zainshah3464/zain-serenity/blob/main/src/lib/checkAvailability.ts"
click node_validation "https://github.com/zainshah3464/zain-serenity/blob/main/src/lib/bookingValidation.ts"
click node_room_model "https://github.com/zainshah3464/zain-serenity/blob/main/src/models/Room.ts"
click node_booking_model "https://github.com/zainshah3464/zain-serenity/blob/main/src/models/Booking.ts"
click node_user_model "https://github.com/zainshah3464/zain-serenity/blob/main/src/models/User.ts"
click node_review_model "https://github.com/zainshah3464/zain-serenity/blob/main/src/models/Review.ts"
click node_gallery_model "https://github.com/zainshah3464/zain-serenity/blob/main/src/models/GalleryImage.ts"
click node_admin_ui "https://github.com/zainshah3464/zain-serenity/blob/main/src/components/admin/AdminDashboard.tsx"
click node_admin_bookings "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/admin/(private)/bookings/page.tsx"
click node_admin_rooms "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/admin/(private)/rooms/page.tsx"
click node_admin_gallery "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/admin/(private)/gallery/page.tsx"
click node_admin_users "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/admin/(private)/users/page.tsx"
click node_dashboard_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/dashboard/route.ts"
click node_admin_booking_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/bookings/%5Bid%5D/route.ts"
click node_admin_gallery_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/gallery/route.ts"
click node_email_templates "https://github.com/zainshah3464/zain-serenity/blob/main/src/lib/emailTemplates.ts"
click node_admin_rooms_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/rooms/route.ts"
click node_admin_users_api "https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/users/route.ts"

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_room_browse,node_room_detail,node_booking_ui,node_account_ui,node_my_bookings,node_guest_extras toneBlue
class node_rooms_api,node_booking_api,node_reviews_api,node_auth_api,node_register_api,node_contact_api,node_availability,node_validation,node_email_templates,node_mongo toneAmber
class node_room_model,node_booking_model,node_user_model,node_review_model,node_gallery_model toneMint
class node_admin_ui,node_admin_bookings,node_admin_rooms,node_admin_gallery,node_admin_users,node_dashboard_api,node_admin_booking_api,node_admin_gallery_api,node_admin_rooms_api,node_admin_users_api toneRose
class node_guest_actor,node_cloudinary,node_mail_service toneIndigo
```

## Components

### Guest experience

- [Room discovery](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/rooms/page.tsx): `src/app/rooms/page.tsx`
- [Room detail](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/rooms/%5Bid%5D/page.tsx): `src/app/rooms/[id]/page.tsx`
- [Booking flow](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/booking/BookingContent.tsx): `src/app/booking/BookingContent.tsx`
- [Account access](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/register/page.tsx): `src/app/register/page.tsx`
- [My bookings](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/my-bookings/page.tsx): `src/app/my-bookings/page.tsx`
- **Reviews and contact**

### API and domain

- [Room catalog API](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/rooms/route.ts): `src/app/api/rooms/route.ts`
- [Booking API](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/bookings/route.ts): `src/app/api/bookings/route.ts`
- [Reviews API](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/reviews/route.ts): `src/app/api/reviews/route.ts`
- [Authentication](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/auth/%5B...nextauth%5D/route.ts): `src/app/api/auth/[...nextauth]/route.ts`
- [Registration](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/auth/register/route.ts): `src/app/api/auth/register/route.ts`
- [Contact API](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/contact/route.ts): `src/app/api/contact/route.ts`
- [Availability checks](https://github.com/zainshah3464/zain-serenity/blob/main/src/lib/checkAvailability.ts): `src/lib/checkAvailability.ts`
- [Booking validation](https://github.com/zainshah3464/zain-serenity/blob/main/src/lib/bookingValidation.ts): `src/lib/bookingValidation.ts`
- [Email templates](https://github.com/zainshah3464/zain-serenity/blob/main/src/lib/emailTemplates.ts): `src/lib/emailTemplates.ts`

### Persistence

- [Room records](https://github.com/zainshah3464/zain-serenity/blob/main/src/models/Room.ts): `src/models/Room.ts`
- [Booking records](https://github.com/zainshah3464/zain-serenity/blob/main/src/models/Booking.ts): `src/models/Booking.ts`
- [User records](https://github.com/zainshah3464/zain-serenity/blob/main/src/models/User.ts): `src/models/User.ts`
- [Review records](https://github.com/zainshah3464/zain-serenity/blob/main/src/models/Review.ts): `src/models/Review.ts`
- [Gallery records](https://github.com/zainshah3464/zain-serenity/blob/main/src/models/GalleryImage.ts): `src/models/GalleryImage.ts`

### Admin operations

- [Admin dashboard](https://github.com/zainshah3464/zain-serenity/blob/main/src/components/admin/AdminDashboard.tsx): `src/components/admin/AdminDashboard.tsx`
- [Booking management](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/admin/(private)/bookings/page.tsx): `src/app/admin/(private)/bookings/page.tsx`
- [Room management](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/admin/(private)/rooms/page.tsx): `src/app/admin/(private)/rooms/page.tsx`
- [Gallery management](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/admin/(private)/gallery/page.tsx): `src/app/admin/(private)/gallery/page.tsx`
- [User management](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/admin/(private)/users/page.tsx): `src/app/admin/(private)/users/page.tsx`
- [Dashboard reporting](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/dashboard/route.ts): `src/app/api/admin/dashboard/route.ts`
- [Booking decisions](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/bookings/%5Bid%5D/route.ts): `src/app/api/admin/bookings/[id]/route.ts`
- [Gallery API](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/gallery/route.ts): `src/app/api/admin/gallery/route.ts`
- [Room management API](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/rooms/route.ts): `src/app/api/admin/rooms/route.ts`
- [User management API](https://github.com/zainshah3464/zain-serenity/blob/main/src/app/api/admin/users/route.ts): `src/app/api/admin/users/route.ts`

### Other components

- **Guest**
- **MongoDB**
- **Cloudinary**
- **Email service**

## Connections

- Guest → Room discovery: browses
- Guest → Account access: registers
- Guest → Reviews and contact: engages
- Room discovery → Room catalog API: requests rooms
- Room detail → Booking flow: starts booking
- Booking flow → Booking API: submits reservation
- Booking API → Booking validation: validates input
- Booking API → Availability checks: checks dates
- Booking API → Booking records: creates and reads
- Room catalog API → Room records: reads rooms
- Room catalog API → Booking records: filters dates
- Room catalog API → Review records: calculates ratings
- My bookings → Booking API: loads reservations
- Reviews and contact → Reviews API: submits review
- Reviews API → Review records: checks and creates
- Reviews and contact → Contact API: sends inquiry
- Account access → Registration: creates account
- Registration → User records: creates user
- Authentication → User records: authenticates user
- Registration → Email templates: formats verification
- Contact API → Email templates: formats inquiry
- Admin dashboard → Dashboard reporting: requests metrics
- Booking management → Booking decisions: updates status
- Room management → Room management API: manages rooms
- Gallery management → Gallery API: manages images
- User management → User management API: manages users
- Dashboard reporting → Booking records: queries bookings
- Dashboard reporting → Room records: queries rooms
- Dashboard reporting → User records: queries users
- Dashboard reporting → Review records: queries reviews
- Booking decisions → Booking records: updates booking
- Booking decisions → Email templates: formats notice
- Gallery API → Cloudinary: uploads image
- Gallery API → Gallery records: stores metadata
- Email templates → Email service: email content
- Room records → MongoDB: persists records
- Booking records → MongoDB: persists records
- User records → MongoDB: persists records
- Review records → MongoDB: persists records
- Gallery records → MongoDB: persists records
