# gauravbatule/astrix architecture

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

- Interactive diagram: https://gitdiagram.com/gauravbatule/astrix
- Repository: https://github.com/gauravbatule/astrix

## Overview

Astrix is a browser-based Vedic/KP astrology consultation app. Users enter birth details and a location to calculate and view a chart, then ask questions by text or voice; the Flask API sends consultation context to Groq and returns text and, when available, audio. The README also describes daily horoscopes and conversation memory. The excerpts show the chart calculations and chat/voice endpoints, but not all frontend wiring or backend routes, so uncertain links are omitted; no persistent store is evidenced.

Main entry points: [`static/main.js`](https://github.com/gauravbatule/astrix/blob/main/static/main.js) (Astrology UI), [`app.py`](https://github.com/gauravbatule/astrix/blob/main/app.py) (Chat endpoint), [`static/astro.js`](https://github.com/gauravbatule/astrix/blob/main/static/astro.js) (Chart calculations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Browser client"]
  node_web_ui["Astrology UI<br/>[main.js]"]
  node_birth_inputs["Birth details<br/>[main.js]"]
  node_chat_ui["Chat and voice<br/>[main.js]"]
  node_chart_display["Chart display<br/>[main.js]"]
end

subgraph group_astro["Astrology calculations"]
  node_input_parsing["Input parsing<br/>[astro.js]"]
  node_chart_math["Chart calculations<br/>[astro.js]"]
  node_kp_analysis["KP and houses<br/>[astro.js]"]
  node_dasha["Vimshottari dasha<br/>[astro.js]"]
  node_wheel["Chart wheel<br/>[astro.js]"]
end

subgraph group_server["Flask services"]
  node_flask_app["Flask app<br/>[app.py]"]
  node_chat_api["Chat endpoint<br/>[app.py]"]
  node_chat_model["AI chat request<br/>[app.py]"]
  node_response_parse["Reply parsing<br/>[app.py]"]
  node_speech_api["Speech endpoints<br/>[app.py]"]
  node_stt["Transcription<br/>[app.py]"]
  node_tts["Speech synthesis<br/>[app.py]"]
end

subgraph group_external["External services"]
  node_groq_chat["Groq chat"]
  node_groq_stt["Groq speech recognition"]
  node_groq_tts["Groq speech synthesis"]
  node_nominatim["OpenStreetMap Nominatim"]
end

node_user(("User"))

node_user -->|"uses"| node_web_ui
node_web_ui -->|"opens"| node_birth_inputs
node_birth_inputs -->|"submits"| node_input_parsing
node_input_parsing -->|"normalizes for"| node_chart_math
node_birth_inputs -.->|"searches location"| node_nominatim
node_web_ui -->|"calculates chart"| node_chart_math
node_chart_math -->|"provides positions"| node_kp_analysis
node_chart_math -->|"provides Moon position"| node_dasha
node_web_ui -->|"generates wheel"| node_wheel
node_web_ui -->|"renders results"| node_chart_display
node_user -->|"asks"| node_chat_ui
node_chat_ui -->|"posts message"| node_chat_api
node_flask_app -->|"routes"| node_chat_api
node_chat_api -->|"invokes"| node_chat_model
node_chat_model -->|"requests completion"| node_groq_chat
node_chat_api -->|"parses reply"| node_response_parse
node_response_parse -->|"returns messages"| node_chat_ui
node_chat_ui -->|"posts voice audio"| node_speech_api
node_flask_app -->|"routes"| node_speech_api
node_speech_api -->|"transcribes via"| node_stt
node_stt -->|"sends audio"| node_groq_stt
node_chat_api -->|"requests audio"| node_tts
node_speech_api -->|"requests audio"| node_tts
node_tts -->|"sends text"| node_groq_tts
node_tts -->|"returns audio"| node_chat_ui

click node_web_ui "https://github.com/gauravbatule/astrix/blob/main/static/main.js"
click node_birth_inputs "https://github.com/gauravbatule/astrix/blob/main/static/main.js"
click node_chat_ui "https://github.com/gauravbatule/astrix/blob/main/static/main.js"
click node_chart_display "https://github.com/gauravbatule/astrix/blob/main/static/main.js"
click node_input_parsing "https://github.com/gauravbatule/astrix/blob/main/static/astro.js"
click node_chart_math "https://github.com/gauravbatule/astrix/blob/main/static/astro.js"
click node_kp_analysis "https://github.com/gauravbatule/astrix/blob/main/static/astro.js"
click node_dasha "https://github.com/gauravbatule/astrix/blob/main/static/astro.js"
click node_wheel "https://github.com/gauravbatule/astrix/blob/main/static/astro.js"
click node_flask_app "https://github.com/gauravbatule/astrix/blob/main/app.py"
click node_chat_api "https://github.com/gauravbatule/astrix/blob/main/app.py"
click node_chat_model "https://github.com/gauravbatule/astrix/blob/main/app.py"
click node_response_parse "https://github.com/gauravbatule/astrix/blob/main/app.py"
click node_speech_api "https://github.com/gauravbatule/astrix/blob/main/app.py"
click node_stt "https://github.com/gauravbatule/astrix/blob/main/app.py"
click node_tts "https://github.com/gauravbatule/astrix/blob/main/app.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_web_ui,node_birth_inputs,node_chat_ui,node_chart_display,node_user toneBlue
class node_input_parsing,node_chart_math,node_kp_analysis,node_dasha,node_wheel toneAmber
class node_flask_app,node_chat_api,node_chat_model,node_response_parse,node_speech_api,node_stt,node_tts toneMint
class node_groq_chat,node_groq_stt,node_groq_tts,node_nominatim toneRose
```

## Components

### Browser client

- [Astrology UI](https://github.com/gauravbatule/astrix/blob/main/static/main.js): `static/main.js`
- [Birth details](https://github.com/gauravbatule/astrix/blob/main/static/main.js): `static/main.js`
- [Chat and voice](https://github.com/gauravbatule/astrix/blob/main/static/main.js): `static/main.js`
- [Chart display](https://github.com/gauravbatule/astrix/blob/main/static/main.js): `static/main.js`

### Astrology calculations

- [Input parsing](https://github.com/gauravbatule/astrix/blob/main/static/astro.js): `static/astro.js`
- [Chart calculations](https://github.com/gauravbatule/astrix/blob/main/static/astro.js): `static/astro.js`
- [KP and houses](https://github.com/gauravbatule/astrix/blob/main/static/astro.js): `static/astro.js`
- [Vimshottari dasha](https://github.com/gauravbatule/astrix/blob/main/static/astro.js): `static/astro.js`
- [Chart wheel](https://github.com/gauravbatule/astrix/blob/main/static/astro.js): `static/astro.js`

### Flask services

- [Flask app](https://github.com/gauravbatule/astrix/blob/main/app.py): `app.py`
- [Chat endpoint](https://github.com/gauravbatule/astrix/blob/main/app.py): `app.py`
- [AI chat request](https://github.com/gauravbatule/astrix/blob/main/app.py): `app.py`
- [Reply parsing](https://github.com/gauravbatule/astrix/blob/main/app.py): `app.py`
- [Speech endpoints](https://github.com/gauravbatule/astrix/blob/main/app.py): `app.py`
- [Transcription](https://github.com/gauravbatule/astrix/blob/main/app.py): `app.py`
- [Speech synthesis](https://github.com/gauravbatule/astrix/blob/main/app.py): `app.py`

### External services

- **Groq chat**
- **Groq speech recognition**
- **Groq speech synthesis**
- **OpenStreetMap Nominatim**

### Other components

- **User**

## Connections

- User → Astrology UI: uses
- Astrology UI → Birth details: opens
- Birth details → Input parsing: submits
- Input parsing → Chart calculations: normalizes for
- Birth details → OpenStreetMap Nominatim: searches location
- Astrology UI → Chart calculations: calculates chart
- Chart calculations → KP and houses: provides positions
- Chart calculations → Vimshottari dasha: provides Moon position
- Astrology UI → Chart wheel: generates wheel
- Astrology UI → Chart display: renders results
- User → Chat and voice: asks
- Chat and voice → Chat endpoint: posts message
- Flask app → Chat endpoint: routes
- Chat endpoint → AI chat request: invokes
- AI chat request → Groq chat: requests completion
- Chat endpoint → Reply parsing: parses reply
- Reply parsing → Chat and voice: returns messages
- Chat and voice → Speech endpoints: posts voice audio
- Flask app → Speech endpoints: routes
- Speech endpoints → Transcription: transcribes via
- Transcription → Groq speech recognition: sends audio
- Chat endpoint → Speech synthesis: requests audio
- Speech endpoints → Speech synthesis: requests audio
- Speech synthesis → Groq speech synthesis: sends text
- Speech synthesis → Chat and voice: returns audio
