Take a look · Run locally · The calculations · Development
AstroMilan is a Jyotisha app by Vardhan. It brings birth charts, compatibility and the daily panchang into one place, with an interface that gives the sky a little room to breathe.
The visual side is a rotating celestial sphere, warm gold details and quiet scroll transitions. Underneath, the chart values come from astronomical calculations. You can inspect the inputs, save a report and return to it in another language.
The actual application. The sphere is an artistic illustration; chart values come from the calculation engine.
|
Rasi and Navamsa charts, nine grahas, nakshatra, pada and Vimshottari periods. Supply a birth time and place, or enter coordinates and a timezone directly. |
Eight Ashtakoota scores with the individual points visible. Rasi follows the selected nakshatra and pada. Share a comparison through a link. |
|
Tithi, nakshatra, yoga, karana, sunrise, sunset and traditional time periods for the selected date and place. |
A diagram of current zodiac longitudes and a transit table. With a birth chart loaded, compare the current placements to the natal Moon sign. |
|
English, తెలుగు, Telugu Latin and हिन्दी. Labels, dropdowns, dates and calculated results change language together. Stored inputs keep the same meaning. |
A silent breathing timer, light and dark themes, keyboard controls and reduced motion support. Pause the animation whenever you want. |
![]() |
![]() |
| Inspect a calculated report | Telugu Latin on mobile |
Reports stay in your browser. Save a profile, export the numerical data as JSON, or use the browser’s Print / Save PDF option. Deleting a report clears its saved entry, and Undo is available immediately afterward. The screenshots use example inputs.
Use Node.js 22.12 or later.
git clone https://github.com/grammerpro/AstroMilan.git
cd AstroMilan
npm ci
npm run devOpen http://localhost:3000.
Birth charts, matching, panchang and transits work without an API key. The optional Guru and palm image descriptions use Gemini. To enable them, copy .env.example to .env.local and set GEMINI_API_KEY.
The key stays on the server. An image is sent to the provider only when you choose to analyze it. If the provider is unavailable, the app shows an error instead of a sample reading.
For a production build:
npm run build
npm startPORT defaults to 3000. This repository contains the application and its server; it is not a static GitHub Pages site.
Import this repository with the project root set to .. The included vercel.json builds the Vite frontend and routes /api/* to the Express function in api/index.ts. It also includes Astronomy Engine in the function bundle. Deploy both parts together; uploading only dist leaves the calculation routes unavailable.
No environment variables are needed for birth charts, matching, panchang or transits. To enable the optional explanations, add GEMINI_API_KEY in the Vercel project settings and redeploy. Never prefix this key with VITE_.
AstroMilan uses Astronomy Engine, an approximate Lahiri ayanamsa, mean lunar nodes and houses based on complete zodiac signs. D1 and D9 placements are derived from the calculated longitudes. Vimshottari periods use a year of 365.25 days.
Seven reference cases from 1900 to 2100 are checked against independently generated Swiss Ephemeris values. The largest observed longitude difference in those cases is 0.02208°, within the test tolerance of 0.03°. That is a result for the sampled cases, not a guarantee for every possible input.
Astrological interpretations and matching rules belong to a tradition. They are not verified predictions of health, marriage outcomes or future events. Numerical chart results are kept separate from optional AI explanations.
Read the calculation methods, reference sources and limitations.
Interface: React 19, TypeScript, Tailwind CSS, Motion and a canvas sphere.
Server: Express, Astronomy Engine and the optional Gemini integration.
Tooling: Vite, esbuild and Playwright.
npm run lint
npm run test:i18n
npm run test:vedic
npm run test:api
npm run test:ui
npm run buildBrowser tests use Google Chrome locally. CI installs Chromium and runs the same desktop and mobile checks. The suite covers translations, calculation inputs, report deletion after a reload, shared links and unavailable AI services.
Where things live
src/App.tsx | Landing page, themes and navigation |
src/components | Charts, matching, panchang and the other tools |
src/i18n | The shared catalog for all four languages |
vedic.ts | Astronomy and traditional scoring rules |
backend.ts | Validation, API routes and optional provider calls |
server.ts / api/index.ts | Local server and Vercel entry points |
tests | Reference fixtures and browser regressions |
docs | Calculation notes and screenshots |
Found something wrong? Open an issue with the language, screen and steps needed to reproduce it. Use example birth details in public reports.
Built by Vardhan · AstroMilan


