# prahlad-07/bookmysalon architecture

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

- Interactive diagram: https://gitdiagram.com/prahlad-07/bookmysalon
- Repository: https://github.com/prahlad-07/bookmysalon

## Overview

BookMySalon is a salon-booking monolith with a React SPA. Customers discover salons and services, authenticate, book appointments, pay, and review; salon owners manage listings and bookings, while admins access operational dashboards. Messaging and notifications support ongoing customer-owner interactions. The README documents the broader feature flow, while sampled source directly confirms review handling and recommendation, pricing, retention, OAuth-code, and JWT behavior; detailed wiring for other subsystems is not sampled, so those links are limited to documented boundaries.

Main entry points: [`frontend/src/config/api.js`](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/config/api.js) (API configuration), [`frontend/src/App.jsx`](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/App.jsx) (SPA routes), [`bookmysalon-app/src/main/java/com/bookmysalon/controller/AuthController.java`](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/AuthController.java) (Auth endpoints), [`bookmysalon-app/src/main/java/com/bookmysalon/controller/analytics/AnalyticsController.java`](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/analytics/AnalyticsController.java) (Analytics APIs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_spa["React experience"]
  node_spaapp["SPA routes<br/>[App.jsx]"]
  node_discovery["Salon discovery<br/>[SalonList.jsx]"]
  node_salondetail["Salon details<br/>[SalonDetail.jsx]"]
  node_bookingsui["Booking views<br/>[MyBookings.jsx]"]
  node_ownerui["Owner dashboard"]
  node_adminui["Admin dashboard<br/>[AdminDashboard.jsx]"]
  node_chatui["Chat interface<br/>[ChatPage.jsx]"]
  node_api["API configuration<br/>[api.js]"]
end

subgraph group_identity["Identity and access"]
  node_authapi["Auth endpoints"]
  node_authsvc["Auth service"]
  node_jwt["JWT security<br/>[JwtService.java]"]
end

subgraph group_market["Salon marketplace"]
  node_salonapi["Salon and service APIs"]
  node_bookingapi["Booking API"]
  node_paymentapi["Payment API"]
  node_reviewapi["Review API"]
  node_reviewlogic["Review validation"]
  node_reviewstore[("Review records")]
end

subgraph group_engagement["Engagement"]
  node_chatapi["Chat and notifications"]
  node_chatservice["Messaging service"]
  node_realtime["STOMP messaging"]
end

subgraph group_insights["Business intelligence"]
  node_analyticsapi["Analytics APIs"]
  node_pricing["Dynamic pricing"]
  node_recommendations["Salon recommendations"]
  node_retention["Retention offers"]
end

node_customer(("Customer"))
node_owner(("Salon owner"))
node_admin(("Administrator"))
node_database[("Application database")]
node_mapbox["Mapbox"]
node_oauth["Google OAuth"]
node_stripe["Stripe"]

node_customer -->|"uses"| node_spaapp
node_owner -->|"uses"| node_spaapp
node_admin -->|"uses"| node_spaapp
node_spaapp -->|"routes requests"| node_api
node_spaapp -->|"offers discovery"| node_discovery
node_discovery -->|"opens salon"| node_salondetail
node_customer -->|"searches salons"| node_discovery
node_customer -->|"manages bookings"| node_bookingsui
node_owner -->|"manages business"| node_ownerui
node_admin -->|"views operations"| node_adminui
node_customer -->|"starts conversation"| node_chatui
node_api -->|"calls"| node_authapi
node_authapi -->|"delegates"| node_authsvc
node_authsvc -->|"issues tokens"| node_jwt
node_authapi -->|"persists identity"| node_database
node_authapi -.->|"optional handoff"| node_oauth
node_api -->|"calls"| node_salonapi
node_api -->|"calls"| node_bookingapi
node_api -->|"calls"| node_paymentapi
node_api -->|"calls"| node_reviewapi
node_reviewapi -->|"delegates"| node_reviewlogic
node_reviewlogic -->|"reads and writes"| node_reviewstore
node_reviewapi -->|"persists reviews"| node_database
node_paymentapi -.->|"optional payment"| node_stripe
node_salondetail -.->|"optional map view"| node_mapbox
node_api -->|"calls"| node_chatapi
node_chatapi -->|"delegates"| node_chatservice
node_chatservice -->|"dispatches messages"| node_realtime
node_chatservice -->|"stores messages"| node_database
node_api -->|"calls"| node_analyticsapi
node_analyticsapi -->|"exposes estimate"| node_pricing
node_analyticsapi -->|"exposes suggestions"| node_recommendations
node_analyticsapi -->|"exposes retention"| node_retention
node_pricing -->|"reads pricing inputs"| node_database
node_recommendations -->|"reads bookings and ratings"| node_database
node_retention -->|"reads activity; writes coupons"| node_database

click node_spaapp "https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/App.jsx"
click node_discovery "https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/SalonList.jsx"
click node_salondetail "https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/SalonDetail.jsx"
click node_bookingsui "https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/MyBookings.jsx"
click node_ownerui "https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/SalonOwnerDashboard.jsx"
click node_adminui "https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/AdminDashboard.jsx"
click node_chatui "https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/ChatPage.jsx"
click node_api "https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/config/api.js"
click node_authapi "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/AuthController.java"
click node_authsvc "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/auth/AuthServiceImpl.java"
click node_jwt "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/security/JwtService.java"
click node_salonapi "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/SalonController.java"
click node_bookingapi "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/BookingController.java"
click node_paymentapi "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/PaymentController.java"
click node_reviewapi "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/ReviewController.java"
click node_reviewlogic "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/impl/ReviewServiceImpl.java"
click node_reviewstore "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/repository/ReviewRepository.java"
click node_chatapi "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/chat/controller/ChatRestController.java"
click node_chatservice "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/chat/service/impl/MessageServiceImpl.java"
click node_realtime "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/config/WebSocketConfig.java"
click node_analyticsapi "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/analytics/AnalyticsController.java"
click node_pricing "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/pricing/PricingService.java"
click node_recommendations "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/recommendation/RecommendationService.java"
click node_retention "https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/retention/RetentionService.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_spaapp,node_discovery,node_salondetail,node_bookingsui,node_ownerui,node_adminui,node_chatui,node_api toneBlue
class node_authapi,node_authsvc,node_jwt,node_database toneAmber
class node_salonapi,node_bookingapi,node_paymentapi,node_reviewapi,node_reviewlogic,node_reviewstore toneMint
class node_chatapi,node_chatservice,node_realtime toneRose
class node_analyticsapi,node_pricing,node_recommendations,node_retention,node_customer,node_owner,node_admin,node_mapbox,node_oauth,node_stripe toneIndigo
```

## Components

### React experience

- [SPA routes](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Salon discovery](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/SalonList.jsx): `frontend/src/pages/SalonList.jsx`
- [Salon details](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/SalonDetail.jsx): `frontend/src/pages/SalonDetail.jsx`
- [Booking views](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/MyBookings.jsx): `frontend/src/pages/MyBookings.jsx`
- [Owner dashboard](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/SalonOwnerDashboard.jsx): `frontend/src/pages/SalonOwnerDashboard.jsx`
- [Admin dashboard](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/AdminDashboard.jsx): `frontend/src/pages/AdminDashboard.jsx`
- [Chat interface](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/pages/ChatPage.jsx): `frontend/src/pages/ChatPage.jsx`
- [API configuration](https://github.com/prahlad-07/bookmysalon/blob/main/frontend/src/config/api.js): `frontend/src/config/api.js`

### Identity and access

- [Auth endpoints](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/AuthController.java): `bookmysalon-app/src/main/java/com/bookmysalon/controller/AuthController.java`
- [Auth service](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/auth/AuthServiceImpl.java): `bookmysalon-app/src/main/java/com/bookmysalon/service/auth/AuthServiceImpl.java`
- [JWT security](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/security/JwtService.java): `bookmysalon-app/src/main/java/com/bookmysalon/security/JwtService.java`

### Salon marketplace

- [Salon and service APIs](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/SalonController.java): `bookmysalon-app/src/main/java/com/bookmysalon/controller/SalonController.java`
- [Booking API](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/BookingController.java): `bookmysalon-app/src/main/java/com/bookmysalon/controller/BookingController.java`
- [Payment API](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/PaymentController.java): `bookmysalon-app/src/main/java/com/bookmysalon/controller/PaymentController.java`
- [Review API](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/ReviewController.java): `bookmysalon-app/src/main/java/com/bookmysalon/controller/ReviewController.java`
- [Review validation](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/impl/ReviewServiceImpl.java): `bookmysalon-app/src/main/java/com/bookmysalon/service/impl/ReviewServiceImpl.java`
- [Review records](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/repository/ReviewRepository.java): `bookmysalon-app/src/main/java/com/bookmysalon/repository/ReviewRepository.java`

### Engagement

- [Chat and notifications](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/chat/controller/ChatRestController.java): `bookmysalon-app/src/main/java/com/bookmysalon/chat/controller/ChatRestController.java`
- [Messaging service](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/chat/service/impl/MessageServiceImpl.java): `bookmysalon-app/src/main/java/com/bookmysalon/chat/service/impl/MessageServiceImpl.java`
- [STOMP messaging](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/config/WebSocketConfig.java): `bookmysalon-app/src/main/java/com/bookmysalon/config/WebSocketConfig.java`

### Business intelligence

- [Analytics APIs](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/controller/analytics/AnalyticsController.java): `bookmysalon-app/src/main/java/com/bookmysalon/controller/analytics/AnalyticsController.java`
- [Dynamic pricing](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/pricing/PricingService.java): `bookmysalon-app/src/main/java/com/bookmysalon/service/pricing/PricingService.java`
- [Salon recommendations](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/recommendation/RecommendationService.java): `bookmysalon-app/src/main/java/com/bookmysalon/service/recommendation/RecommendationService.java`
- [Retention offers](https://github.com/prahlad-07/bookmysalon/blob/main/bookmysalon-app/src/main/java/com/bookmysalon/service/retention/RetentionService.java): `bookmysalon-app/src/main/java/com/bookmysalon/service/retention/RetentionService.java`

### Other components

- **Customer**
- **Salon owner**
- **Administrator**
- **Application database**
- **Mapbox**
- **Google OAuth**
- **Stripe**

## Connections

- Customer → SPA routes: uses
- Salon owner → SPA routes: uses
- Administrator → SPA routes: uses
- SPA routes → API configuration: routes requests
- SPA routes → Salon discovery: offers discovery
- Salon discovery → Salon details: opens salon
- Customer → Salon discovery: searches salons
- Customer → Booking views: manages bookings
- Salon owner → Owner dashboard: manages business
- Administrator → Admin dashboard: views operations
- Customer → Chat interface: starts conversation
- API configuration → Auth endpoints: calls
- Auth endpoints → Auth service: delegates
- Auth service → JWT security: issues tokens
- Auth endpoints → Application database: persists identity
- Auth endpoints → Google OAuth: optional handoff
- API configuration → Salon and service APIs: calls
- API configuration → Booking API: calls
- API configuration → Payment API: calls
- API configuration → Review API: calls
- Review API → Review validation: delegates
- Review validation → Review records: reads and writes
- Review API → Application database: persists reviews
- Payment API → Stripe: optional payment
- Salon details → Mapbox: optional map view
- API configuration → Chat and notifications: calls
- Chat and notifications → Messaging service: delegates
- Messaging service → STOMP messaging: dispatches messages
- Messaging service → Application database: stores messages
- API configuration → Analytics APIs: calls
- Analytics APIs → Dynamic pricing: exposes estimate
- Analytics APIs → Salon recommendations: exposes suggestions
- Analytics APIs → Retention offers: exposes retention
- Dynamic pricing → Application database: reads pricing inputs
- Salon recommendations → Application database: reads bookings and ratings
- Retention offers → Application database: reads activity; writes coupons
