# pankajtyagi1601/anjani_beauties architecture

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

## Overview

Anjani Beauties is a bridal salon marketing site and lead-capture application. Visitors explore salon information, services, bridal packages, and a filtered image gallery, then can submit contact or bridal inquiries. The documented inquiry pipeline validates and stores submissions and sends email notifications; sampled API handlers confirm rate limiting, optional reCAPTCHA, PostgreSQL persistence, and notification dispatch. Marketing-page internals and form wiring are not fully sampled, so those connections are shown only where supported by the tree or README.

Main entry points: [`src/app/api/contact/route.ts`](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/api/contact/route.ts) (Contact API), [`src/app/api/bridal-inquiry/route.ts`](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/api/bridal-inquiry/route.ts) (Bridal inquiry API), [`src/app/(marketing)`](https://github.com/pankajtyagi1601/anjani_beauties/tree/main/src/app/(marketing)) (Marketing pages), [`src/lib/recaptcha.ts`](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/recaptcha.ts) (reCAPTCHA verification)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_site["Marketing site"]
  node_marketing["Marketing pages"]
  node_services["Service catalog<br/>[services.ts]"]
  node_services_ui["Services display<br/>[Services.tsx]"]
  node_gallery_page["Gallery page<br/>[page.tsx]"]
  node_gallery["Gallery interaction<br/>[GalleryClient.tsx]"]
  node_site_shell["Shared site shell<br/>[layout.tsx]"]
end

subgraph group_lead["Inquiry handling"]
  node_contact_form["Contact form<br/>[ContactForm.tsx]"]
  node_bridal_form["Bridal inquiry form"]
  node_contact_api["Contact API<br/>[route.ts]"]
  node_bridal_api["Bridal inquiry API<br/>[route.ts]"]
  node_validation["Request validation<br/>[validateRequest.ts]"]
  node_rate_limit["Rate limiting<br/>[rate-limit.ts]"]
  node_recaptcha_check["reCAPTCHA verification<br/>[recaptcha.ts]"]
end

subgraph group_integrations["External services"]
  node_database[("PostgreSQL via Prisma<br/>[prisma.ts]")]
  node_email["Email notifications<br/>[email.ts]"]
  node_mailer["Email provider"]
  node_recaptcha["reCAPTCHA service"]
end

subgraph group_discovery["Search presence"]
  node_seo["Structured data"]
  node_site_config["Site configuration<br/>[site.ts]"]
  node_sitemap["Sitemap<br/>[sitemap.ts]"]
end

node_visitor(("Site visitor"))

node_visitor -->|"browses"| node_marketing
node_marketing -->|"renders within"| node_site_shell
node_marketing -->|"presents services"| node_services_ui
node_services_ui -->|"reads catalog"| node_services
node_visitor -->|"opens gallery"| node_gallery_page
node_gallery_page -->|"renders gallery"| node_gallery
node_visitor -->|"submits contact"| node_contact_form
node_visitor -->|"submits inquiry"| node_bridal_form
node_contact_form -->|"posts inquiry"| node_contact_api
node_bridal_form -->|"posts inquiry"| node_bridal_api
node_contact_api -->|"checks limit"| node_rate_limit
node_bridal_api -->|"checks limit"| node_rate_limit
node_contact_api -.->|"verifies token"| node_recaptcha_check
node_bridal_api -.->|"verifies token"| node_recaptcha_check
node_recaptcha_check -.->|"checks token"| node_recaptcha
node_contact_api -->|"validates fields"| node_validation
node_bridal_api -->|"validates fields"| node_validation
node_contact_api -->|"stores submission"| node_database
node_bridal_api -->|"stores inquiry"| node_database
node_contact_api -->|"dispatches notice"| node_email
node_bridal_api -->|"dispatches notice"| node_email
node_email -->|"sends email"| node_mailer
node_seo -->|"describes services"| node_services
node_seo -->|"reads site details"| node_site_config
node_sitemap -->|"reads site details"| node_site_config
node_visitor -->|"discovers pages"| node_sitemap

click node_marketing "https://github.com/pankajtyagi1601/anjani_beauties/tree/main/src/app/(marketing)"
click node_services "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/config/services.ts"
click node_services_ui "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/components/sections/Services.tsx"
click node_gallery_page "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/(marketing)/gallery/page.tsx"
click node_gallery "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/components/gallery/GalleryClient.tsx"
click node_site_shell "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/(marketing)/layout.tsx"
click node_contact_form "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/components/forms/ContactForm.tsx"
click node_bridal_form "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/components/forms/BridalInquiryForm.tsx"
click node_contact_api "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/api/contact/route.ts"
click node_bridal_api "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/api/bridal-inquiry/route.ts"
click node_validation "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/validations/validateRequest.ts"
click node_rate_limit "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/rate-limit.ts"
click node_database "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/db/prisma.ts"
click node_email "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/email.ts"
click node_recaptcha_check "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/recaptcha.ts"
click node_seo "https://github.com/pankajtyagi1601/anjani_beauties/tree/main/src/components/seo"
click node_site_config "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/config/site.ts"
click node_sitemap "https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/sitemap.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_marketing,node_services,node_services_ui,node_gallery_page,node_gallery,node_site_shell toneBlue
class node_contact_form,node_bridal_form,node_contact_api,node_bridal_api,node_validation,node_rate_limit,node_recaptcha_check toneAmber
class node_database,node_email,node_mailer,node_recaptcha toneMint
class node_seo,node_site_config,node_sitemap toneRose
class node_visitor toneIndigo
```

## Components

### Marketing site

- [Marketing pages](https://github.com/pankajtyagi1601/anjani_beauties/tree/main/src/app/(marketing)): `src/app/(marketing)`
- [Service catalog](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/config/services.ts): `src/config/services.ts`
- [Services display](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/components/sections/Services.tsx): `src/components/sections/Services.tsx`
- [Gallery page](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/(marketing)/gallery/page.tsx): `src/app/(marketing)/gallery/page.tsx`
- [Gallery interaction](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/components/gallery/GalleryClient.tsx): `src/components/gallery/GalleryClient.tsx`
- [Shared site shell](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/(marketing)/layout.tsx): `src/app/(marketing)/layout.tsx`

### Inquiry handling

- [Contact form](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/components/forms/ContactForm.tsx): `src/components/forms/ContactForm.tsx`
- [Bridal inquiry form](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/components/forms/BridalInquiryForm.tsx): `src/components/forms/BridalInquiryForm.tsx`
- [Contact API](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/api/contact/route.ts): `src/app/api/contact/route.ts`
- [Bridal inquiry API](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/api/bridal-inquiry/route.ts): `src/app/api/bridal-inquiry/route.ts`
- [Request validation](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/validations/validateRequest.ts): `src/lib/validations/validateRequest.ts`
- [Rate limiting](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/rate-limit.ts): `src/lib/rate-limit.ts`
- [reCAPTCHA verification](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/recaptcha.ts): `src/lib/recaptcha.ts`

### External services

- [PostgreSQL via Prisma](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/db/prisma.ts): `src/lib/db/prisma.ts`
- [Email notifications](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/lib/email.ts): `src/lib/email.ts`
- **Email provider**
- **reCAPTCHA service**

### Search presence

- [Structured data](https://github.com/pankajtyagi1601/anjani_beauties/tree/main/src/components/seo): `src/components/seo`
- [Site configuration](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/config/site.ts): `src/config/site.ts`
- [Sitemap](https://github.com/pankajtyagi1601/anjani_beauties/blob/main/src/app/sitemap.ts): `src/app/sitemap.ts`

### Other components

- **Site visitor**

## Connections

- Site visitor → Marketing pages: browses
- Marketing pages → Shared site shell: renders within
- Marketing pages → Services display: presents services
- Services display → Service catalog: reads catalog
- Site visitor → Gallery page: opens gallery
- Gallery page → Gallery interaction: renders gallery
- Site visitor → Contact form: submits contact
- Site visitor → Bridal inquiry form: submits inquiry
- Contact form → Contact API: posts inquiry
- Bridal inquiry form → Bridal inquiry API: posts inquiry
- Contact API → Rate limiting: checks limit
- Bridal inquiry API → Rate limiting: checks limit
- Contact API → reCAPTCHA verification: verifies token
- Bridal inquiry API → reCAPTCHA verification: verifies token
- reCAPTCHA verification → reCAPTCHA service: checks token
- Contact API → Request validation: validates fields
- Bridal inquiry API → Request validation: validates fields
- Contact API → PostgreSQL via Prisma: stores submission
- Bridal inquiry API → PostgreSQL via Prisma: stores inquiry
- Contact API → Email notifications: dispatches notice
- Bridal inquiry API → Email notifications: dispatches notice
- Email notifications → Email provider: sends email
- Structured data → Service catalog: describes services
- Structured data → Site configuration: reads site details
- Sitemap → Site configuration: reads site details
- Site visitor → Sitemap: discovers pages
