# sarthak-basotia/bhagyanetram architecture

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

- Interactive diagram: https://gitdiagram.com/sarthak-basotia/bhagyanetram
- Repository: https://github.com/sarthak-basotia/bhagyanetram

## Overview

Bhagyanetram is a Vedic astrology and Vastu web product. A visitor explores guidance or submits birth details; the frontend’s astrology client and the Express API expose astrology operations, with selected calculations delegated to a FastAPI engine. The engine offers kundli, panchang, numerology, matching, and calendar domains, backed by shared ephemeris calculations. The backend also serves generated horoscopes and festival calendars. The source index documents several modules not excerpted; their capabilities are represented, but uncertain internal calls are omitted. The frontend-to-backend API wiring is not evidenced in the excerpts.

Main entry points: [`SwissModel/astro-engine/app/services`](https://github.com/sarthak-basotia/bhagyanetram/tree/main/SwissModel/astro-engine/app/services) (Chart and astrology services), [`Backend/app.js`](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/app.js) (HTTP routes), [`SwissModel/astro-engine/app/main.py`](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/main.py) (FastAPI routes), [`SwissModel/astro-engine/app/routers/kundli.py`](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/kundli.py) (Kundli calculations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_site["Astrology and Vastu pages"]
  node_shell["App routing<br/>[App.tsx]"]
  node_home["Home and booking<br/>[HomePage.tsx]"]
  node_booking["Booking dialog<br/>[BookingModal.tsx]"]
  node_client["Astrology API client<br/>[astrologyApi.ts]"]
end

subgraph group_api["Backend API"]
  node_express["HTTP routes<br/>[app.js]"]
  node_controller["Astrology handlers"]
  node_horoscope["Horoscope generation"]
  node_festival["Festival scheduling<br/>[festivalCron.js]"]
  node_festivalgen["Festival generation"]
end

subgraph group_engine["Astrology engine"]
  node_engineapi["FastAPI routes<br/>[main.py]"]
  node_kundli["Kundli calculations<br/>[kundli.py]"]
  node_panchang["Panchang calculations<br/>[panchang.py]"]
  node_numerology["Numerology calculations<br/>[numerology.py]"]
  node_matching["Kundli matching<br/>[match.py]"]
  node_calendar["Calendar calculations<br/>[calendar.py]"]
  node_calculations["Chart and astrology services"]
  node_ephemeris["Ephemeris core<br/>[ephemeris.py]"]
  node_constants["Astrology reference tables<br/>[constants.py]"]
end

subgraph group_persistence["Stored content"]
  node_mongo[("MongoDB<br/>[database.js]")]
  node_horoscopemodel[("Horoscope records<br/>[Horoscope.js]")]
  node_festivalmodel[("Festival records<br/>[Festival.js]")]
  node_bookingmodel[("Booking records<br/>[booking.js]")]
end

node_visitor(("Visitor"))
node_ai{{"OpenAI"}}

node_visitor -->|"opens"| node_shell
node_shell -->|"routes to"| node_site
node_shell -->|"routes to"| node_home
node_home -->|"opens"| node_booking
node_site -.->|"requests data"| node_client
node_client -.->|"sends requests"| node_express
node_express -->|"routes to"| node_controller
node_express -->|"generates"| node_horoscope
node_express -->|"reads"| node_horoscopemodel
node_express -->|"initializes"| node_festival
node_express -->|"reads"| node_festivalmodel
node_controller -->|"generates text"| node_ai
node_horoscope -->|"generates text"| node_ai
node_horoscope -->|"upserts"| node_horoscopemodel
node_festival -->|"runs generator"| node_festivalgen
node_festival -->|"updates"| node_festivalmodel
node_controller -->|"posts calculations"| node_engineapi
node_engineapi -->|"registers"| node_kundli
node_engineapi -->|"registers"| node_panchang
node_engineapi -->|"registers"| node_numerology
node_engineapi -->|"registers"| node_matching
node_engineapi -->|"registers"| node_calendar
node_kundli -->|"dispatches"| node_calculations
node_kundli -->|"uses"| node_ephemeris
node_kundli -.->|"uses"| node_constants
node_panchang -.->|"dispatches"| node_calculations
node_numerology -.->|"dispatches"| node_calculations
node_matching -.->|"dispatches"| node_calculations
node_calendar -.->|"dispatches"| node_calculations
node_calculations -.->|"uses"| node_ephemeris
node_calculations -.->|"uses"| node_constants

click node_site "https://github.com/sarthak-basotia/bhagyanetram/tree/main/Frontend/src/app/components/pages"
click node_shell "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Frontend/src/app/App.tsx"
click node_home "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Frontend/src/app/components/HomePage.tsx"
click node_booking "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Frontend/src/app/components/BookingModal.tsx"
click node_client "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Frontend/src/api/astrologyApi.ts"
click node_express "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/app.js"
click node_controller "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/controllers/astrologyController.js"
click node_horoscope "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/services/horoscopeService.js"
click node_festival "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/services/festivalCron.js"
click node_festivalgen "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/services/festivalGenerator.js"
click node_mongo "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/database.js"
click node_horoscopemodel "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/models/Horoscope.js"
click node_festivalmodel "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/models/Festival.js"
click node_bookingmodel "https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/models/booking.js"
click node_engineapi "https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/main.py"
click node_kundli "https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/kundli.py"
click node_panchang "https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/panchang.py"
click node_numerology "https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/numerology.py"
click node_matching "https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/match.py"
click node_calendar "https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/calendar.py"
click node_calculations "https://github.com/sarthak-basotia/bhagyanetram/tree/main/SwissModel/astro-engine/app/services"
click node_ephemeris "https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/core/ephemeris.py"
click node_constants "https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/core/constants.py"

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_site,node_shell,node_home,node_booking,node_client toneBlue
class node_express,node_controller,node_horoscope,node_festival,node_festivalgen toneAmber
class node_engineapi,node_kundli,node_panchang,node_numerology,node_matching,node_calendar,node_calculations,node_ephemeris,node_constants toneMint
class node_mongo,node_horoscopemodel,node_festivalmodel,node_bookingmodel toneRose
class node_visitor,node_ai toneIndigo
```

## Components

### Web experience

- [Astrology and Vastu pages](https://github.com/sarthak-basotia/bhagyanetram/tree/main/Frontend/src/app/components/pages): `Frontend/src/app/components/pages`
- [App routing](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Frontend/src/app/App.tsx): `Frontend/src/app/App.tsx`
- [Home and booking](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Frontend/src/app/components/HomePage.tsx): `Frontend/src/app/components/HomePage.tsx`
- [Booking dialog](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Frontend/src/app/components/BookingModal.tsx): `Frontend/src/app/components/BookingModal.tsx`
- [Astrology API client](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Frontend/src/api/astrologyApi.ts): `Frontend/src/api/astrologyApi.ts`

### Backend API

- [HTTP routes](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/app.js): `Backend/app.js`
- [Astrology handlers](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/controllers/astrologyController.js): `Backend/controllers/astrologyController.js`
- [Horoscope generation](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/services/horoscopeService.js): `Backend/services/horoscopeService.js`
- [Festival scheduling](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/services/festivalCron.js): `Backend/services/festivalCron.js`
- [Festival generation](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/services/festivalGenerator.js): `Backend/services/festivalGenerator.js`

### Astrology engine

- [FastAPI routes](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/main.py): `SwissModel/astro-engine/app/main.py`
- [Kundli calculations](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/kundli.py): `SwissModel/astro-engine/app/routers/kundli.py`
- [Panchang calculations](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/panchang.py): `SwissModel/astro-engine/app/routers/panchang.py`
- [Numerology calculations](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/numerology.py): `SwissModel/astro-engine/app/routers/numerology.py`
- [Kundli matching](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/match.py): `SwissModel/astro-engine/app/routers/match.py`
- [Calendar calculations](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/routers/calendar.py): `SwissModel/astro-engine/app/routers/calendar.py`
- [Chart and astrology services](https://github.com/sarthak-basotia/bhagyanetram/tree/main/SwissModel/astro-engine/app/services): `SwissModel/astro-engine/app/services`
- [Ephemeris core](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/core/ephemeris.py): `SwissModel/astro-engine/app/core/ephemeris.py`
- [Astrology reference tables](https://github.com/sarthak-basotia/bhagyanetram/blob/main/SwissModel/astro-engine/app/core/constants.py): `SwissModel/astro-engine/app/core/constants.py`

### Stored content

- [MongoDB](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/database.js): `Backend/database.js`
- [Horoscope records](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/models/Horoscope.js): `Backend/models/Horoscope.js`
- [Festival records](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/models/Festival.js): `Backend/models/Festival.js`
- [Booking records](https://github.com/sarthak-basotia/bhagyanetram/blob/main/Backend/models/booking.js): `Backend/models/booking.js`

### Other components

- **Visitor**
- **OpenAI**

## Connections

- Visitor → App routing: opens (evidence: `Frontend/src/app/App.tsx`)
- App routing → Astrology and Vastu pages: routes to (evidence: `Frontend/src/app/App.tsx`)
- App routing → Home and booking: routes to (evidence: `Frontend/src/app/App.tsx`)
- Home and booking → Booking dialog: opens (evidence: `Frontend/src/app/components/HomePage.tsx`)
- Astrology and Vastu pages → Astrology API client: requests data (evidence: `Frontend/src/app/components/pages/BirthChartPage.tsx`)
- Astrology API client → HTTP routes: sends requests
- HTTP routes → Astrology handlers: routes to (evidence: `Backend/app.js`)
- HTTP routes → Horoscope generation: generates (evidence: `Backend/app.js`)
- HTTP routes → Horoscope records: reads (evidence: `Backend/app.js`)
- HTTP routes → Festival scheduling: initializes (evidence: `Backend/app.js`)
- HTTP routes → Festival records: reads
- Astrology handlers → OpenAI: generates text (evidence: `Backend/controllers/astrologyController.js`)
- Horoscope generation → OpenAI: generates text (evidence: `Backend/services/horoscopeService.js`)
- Horoscope generation → Horoscope records: upserts (evidence: `Backend/services/horoscopeService.js`)
- Festival scheduling → Festival generation: runs generator (evidence: `Backend/services/festivalCron.js`)
- Festival scheduling → Festival records: updates (evidence: `Backend/services/festivalCron.js`)
- Astrology handlers → FastAPI routes: posts calculations (evidence: `Backend/controllers/astrologyController.js`)
- FastAPI routes → Kundli calculations: registers (evidence: `SwissModel/astro-engine/app/main.py`)
- FastAPI routes → Panchang calculations: registers (evidence: `SwissModel/astro-engine/app/main.py`)
- FastAPI routes → Numerology calculations: registers (evidence: `SwissModel/astro-engine/app/main.py`)
- FastAPI routes → Kundli matching: registers (evidence: `SwissModel/astro-engine/app/main.py`)
- FastAPI routes → Calendar calculations: registers (evidence: `SwissModel/astro-engine/app/main.py`)
- Kundli calculations → Chart and astrology services: dispatches (evidence: `SwissModel/astro-engine/app/routers/kundli.py`)
- Kundli calculations → Ephemeris core: uses (evidence: `SwissModel/astro-engine/app/routers/kundli.py`)
- Kundli calculations → Astrology reference tables: uses
- Panchang calculations → Chart and astrology services: dispatches (evidence: `SwissModel/astro-engine/app/routers/panchang.py`)
- Numerology calculations → Chart and astrology services: dispatches (evidence: `SwissModel/astro-engine/app/routers/numerology.py`)
- Kundli matching → Chart and astrology services: dispatches
- Calendar calculations → Chart and astrology services: dispatches (evidence: `SwissModel/astro-engine/app/routers/calendar.py`)
- Chart and astrology services → Ephemeris core: uses (evidence: `SwissModel/astro-engine/app/services/panchang.py`)
- Chart and astrology services → Astrology reference tables: uses (evidence: `SwissModel/astro-engine/app/services/panchang.py`)
