- TypeScript
- Monorepo
- Live at graha.chutte.dev
Graha
A Vedic astrology engine that refuses to guess.
Built with
- Hono
- Swiss Ephemeris (C++)
- Next.js 15
- React 19
- Drizzle ORM
- Neon PostgreSQL
- TanStack Query
- Turborepo
- Groq
Why an astrology engine?
Astrology software is everywhere, and almost all of it is a black box. Rough calculations, unverifiable outputs, interpretations that came from nowhere. Graha started with a simple question: how hard could it be to build one that is genuinely, provably accurate?
That question shaped everything. Pair the gold-standard Swiss Ephemeris, a native C++ addon, with a fully rule-based interpretation layer, then make every single layer testable.
Engineering over mysticism
Every core number in Graha is tested. The ephemeris suite checks planetary positions against NASA's JPL Horizons, moon phases against NASA's 6000-year catalog, and sunrise and sunset times against published Colombo almanac values. The Dasa and matchmaking engines each ship their own assertion suites.
AI plays a deliberately small role here. The rule engine produces the reading, and an optional Groq-powered pass only polishes the language. Never the astrology.
Architecture
A Turborepo monorepo splits a Hono.js API from a Next.js 15 frontend, with shared types in a common package. The browser never sees the API secret because a server-side proxy injects the auth headers, and Neon PostgreSQL backs the family vault behind a user-held recovery key.
Highlights
Astronomical-grade accuracy
Sidereal (Nirayana) calculations with Lahiri Ayanamsa, checked by a 44-assertion test suite against JPL Horizons, NASA's moon-phase catalog, and published almanac data.
100+ interpretation rules
108 planet-in-house rules, 108 planet-in-sign dignity mappings, and 144 house-lord placements. A deterministic rule engine, not vague generated text.
Vimshottari Dasa engine
The full 120-year planetary period cycle with real calendar dates for all 9 Mahadasas and their Antardasas, locked down by 33 validation assertions.
Guna Milan matchmaking
Complete 36-point Ashtakoota scoring with classical exceptions, dosha cancellation rules, and Sri Lankan-practice Lagna compatibility, covered by 42 assertions.
Sinhala Panchanga
Daily Rahu Kala, Yama Kala and Gulika Kala computed from real ephemeris sunrise and sunset times. These are the inauspicious windows people here actually plan around.
Family chart vault
Cloud storage for the whole family's charts, guarded by a portable recovery key that restores everything on any device.
