Skip to content
velorix.dev

2026 · mobile

Jyotish Abhyas

An offline Android drill app for classical Jyotish theory: 4,109 questions across 59 topics, most generated from the underlying rules rather than authored, each answered with its full working and source.

Jyotish Abhyas — cover image
Client
Self-initiated
Sector
Education · Indic studies
Year
2026
Type
mobile
Services
Mobile app development, Offline-first architecture, Content pipeline design, Bilingual UX (English · Hindi)
Stack
TypeScript, React Native, Expo SDK 57, expo-router, SQLite, Zustand, Zod
Timeline
Q3 2026

The problem

Classical Indian astrology is taught the way it has always been taught: memorise the tables first, reason from them later. There are twenty-seven nakshatras with four padas each, twelve rashis with lords and elements and rising types, nine grahas with dignities that shift by degree. Students learn this from printed tables and lose it again within weeks, because a table you read is not a table you can recall under pressure.

Nothing existing filled the gap. Astrology apps calculate charts and issue predictions; they do not test whether you know the theory the charts are built from. Generic flashcard apps can hold the facts, but somebody has to author every card by hand, and the interesting material is precisely the material that is derivable — a degree implies a nakshatra implies a pada implies a navamsha, by rule, every time.

The approach

Content is data, never code. Every subject lives under content/ as pure TypeScript that runs in plain Node and imports nothing from the app. A registry is the only file that knows which packs exist, so adding a second system — Jaimini followed Parashara — required zero changes to application code. Zod validates every pack at build time.

Generate, don’t author. Anything a rule produces is a seeded deterministic generator rather than a list: degree-to-pada, tara bala counting, lordship cycles, dignity boundaries. That is how 59 topics reach 4,109 distinct questions without 4,109 hand-written cards, and it means the app teaches the method rather than a fixed set. Hand-authored items are reserved for what genuinely must be attributed: definitions, classical citations, yoga conditions.

Integer arcminutes, never floats. A nakshatra is 800′ and a pada is 200′. Storing degrees as integers eliminates every rounding bug the domain otherwise invites at cusps — 0°00′, 29°59′, the Revati-to-Ashwini wrap.

Correctness over crash-freedom. The risk in a study app is not a stack trace, it is teaching somebody something false. Every generator carries a test that computes the expected answer by an independent path, asserts it appears exactly once among the options, and proves no distractor is accidentally correct. Boundary cases are mandatory. 228 tests guard the content, not the UI.

Offline by construction. Progress, scheduling and every question live in on-device SQLite. Exactly two code paths touch the network — the ad SDK, and a feedback sender that fires only when the user taps Send — and a test asserts that the feedback payload carries no progress, no history and no device id. The app is fully usable in airplane mode.

Where classical authorities disagree, the app encodes both positions with a schools tag rather than quietly picking a winner. It states what the texts say; it never predicts anything or gives advice.

The outcome

A complete bilingual Android app in English and Hindi, with translated content falling back to English per-string where a translation does not yet exist, and progress shared across both languages.

Two systems ship: Parashara across 44 topics and 3,515 questions, Jaimini across 15 and 594, organised into three levels from first definitions to advanced material. Each topic keeps its own cursor, so a new test resumes where the last one stopped and covers the whole topic before anything repeats — deliberate round-robin coverage, with FSRS spaced repetition designed as a drop-in upgrade that needs no change to the content layer.

The build is green — strict TypeScript with no any, 228 passing tests, 4,109 questions validated against a shared schema — and the app is in release preparation for the Google Play closed track.