A companion to Vikram Devatha's class at allthingsvedic.in — built alongside the cohort, in service to anyone walking the same path.
For now this is just for display. The chart shows planetary positions in signs (which don't depend on your location). Lagna and houses are coming in a future release.
Sky data hasn't been refreshed lately. Sree refreshes the daily ephemeris once a month — try again soon, or check Stellarium for live positions.
Search and look anything up — sign, planet, house, avatar. The dense reference, with quizzes if you want them.
Pick your Lagna, place your planets, walk through your South Indian chart house by house.
Sit with one prompt from the Companion Workbook. Notes save only in your browser.
What should we call you?
Sidereal · Lahiri. The chart is aligned to the actual stars (the zodiac your eyes see), not the seasons — we subtract the Lahiri ayanāṁśa (~24°) from every position so the signs read the way Vikram teaches.
The chart at the top of this page is a South Indian chart showing where the planets are in the sky right now — laid out exactly the way Vikram draws on the whiteboard. Twelve chambers around the edge for the twelve signs (Pisces top-left, then clockwise). The centre tells you the date, the time, and the location it's calculated for.
A planet's position in the sky changes every moment. The Sun moves about one degree a day; the Moon moves a full sign every two-and-a-half days. So a chart drawn last week is already wrong by lunchtime today.
When you open this page, a small astronomy library — about 80 KB of JavaScript — runs right there in your browser and computes the position of every graha (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu) for this exact moment. No server, no waiting, no API call. The chart is computed in the time it takes the page to render.
The astronomy library returns positions in the tropical zodiac — based on the seasons. Indian astrology uses the sidereal zodiac — based on the actual stars. The difference between the two is the ayanāṁśa, currently about 24° and growing by roughly 50 arcseconds a year.
The page subtracts that 24° from every position before placing the planet on the chart. The ayanāṁśa it uses is Lahiri — the same one Vikram teaches in class.
The Lagna (Ascendant) is the sign rising on the eastern horizon at this moment, at this place. It changes every two hours as the earth rotates. The page calculates the current Lagna using the location shown in the centre cell, and adds a saffron ASC badge to the chamber that's rising right now.
This is the current Lagna at this place — not your personal birth Lagna. To mark your own birth Lagna the page would need your birth time and birthplace. That's a future addition.
Drawing a South Indian chart in HTML uses a feature called CSS Grid — you can name each cell and ask the browser to put the right content there. The named layout: Pisces / Aries / Taurus / Gemini across the top, Aquarius and Capricorn on the left, Sagittarius / Scorpio / Libra / Virgo across the bottom, Cancer and Leo on the right. The big square in the middle holds the date.
Inside each chamber: the sign's glyph, its English name, its Sanskrit name, and any planets sitting there right now — shown as small two-letter pills (Su · Mo · Ma · Me · Ju · Ve · Sa · Ra · Ke).
If you're offline — on a flight, at a retreat, anywhere without connectivity — the astronomy library can't load. So as a backup, Sree pre-computes 396 days of positions once a month and bakes them into the page. If the live path can't run, the page quietly falls back to that snapshot. Same sidereal Lahiri values, just frozen at the last refresh. Open the page anywhere; the chart shows up.
Look at where the Sun is right now. Where the Moon is. Notice the sign rising. As the days move, watch the Moon hop signs every two-and-a-half days, watch the Sun's slow walk through Aries → Taurus → Gemini, watch Jupiter take a year to cross one sign. The chart on this page is a daily companion to what Vikram is teaching — not a substitute for learning to read it yourself.
Built with Vikram's class as the source of truth, by Sree & Sanchi · v4.72.2
Sidereal · Lahiri. Engine returns geocentric tropical longitudes; we subtract the Lahiri ayanāṁśa (linear approximation, ≈24.10° at 2026-01-01, +50.3″/yr) before mapping to a sign. Output matches Swiss Ephemeris to within ~1 arcminute.
Single static HTML page (index.html) plus a real-time astronomy library loaded via CDN. The library — astronomy-engine by Don Cross (MIT-licensed) — computes geocentric tropical positions for Sun, Moon, and the five visible planets directly in the browser at page load. No server, no build step, no framework.
A Python-generated static file (today-sky-data.js) sits beside it as an offline fallback — for opening the page on a flight, or if the CDN is blocked. The renderer doesn't care which path the data came from; the shape is identical.
On page load, after astronomy-engine finishes loading, we call:
// for each of Sun · Moon · Mars · Mercury · Jupiter · Venus · Saturn:
const v = Astronomy.GeoVector(Astronomy.Body[body], date, /* aberration */ true);
const ec = Astronomy.Ecliptic(v);
// ec.elon is the apparent geocentric ecliptic longitude (tropical) in degrees.
const sidereal = ((ec.elon - lahiriAyanamsha(date)) % 360 + 360) % 360;
The Moon takes a slightly different path (EclipticGeoMoon for higher accuracy). Rahu (the mean ascending lunar node) is computed analytically from Astronomical Algorithms (Meeus, eq. 47.7); Ketu is exactly opposite (+ 180°). Sub-arcminute accuracy on everything; the page-displayed precision is to the degree.
Linear approximation around the 2026 epoch:
ayanamsha(date) = 24.10° + (years_since_2026) × (50.3″ / year)
Every tropical longitude the engine returns has this subtracted before being mapped to a sign. The result is sidereal Lahiri to within ~1 arcminute — exactly what Vikram teaches.
scripts/generate_today_sky.py uses PyEphem to pre-compute 396 days of positions and writes them to today-sky-data.js. If the CDN doesn't load (offline / firewalled / file:// without internet), the renderer reads from window.__todaySkyData instead. Same shape, same Lahiri-corrected values, just yesterday's snapshot of the planet positions. Lagna stays real-time either way (it's pure math).
load() runs on DOMContentLoaded.computeLive(new Date()) first. Returns null if Astronomy is undefined.window.__todaySkyData.days[todayISO()]..stage {
display: grid;
grid-template-areas:
"pi ar ta ge"
"aq cc cc ca"
"cp cc cc le"
"sa sc li vi";
aspect-ratio: 1 / 1;
}
.chamber.sign-pisces { grid-area: pi; }
.stage-center { grid-area: cc; }
Pisces sits in pi, Aquarius in aq, and so on. The centre cell cc spans the inner 2×2 — date / time / location / "how it was built" trigger live there.
Computed in JS at page load, recomputed on location change. The flow:
Date.UTC(...).JD − J2000.atan2(sin(RAMC), cos(RAMC) · cos(ε)).atan2(−cos(RAMC), sin(ε)·tan(φ) + cos(ε)·sin(RAMC)).(asc − mc) mod 360 > 180, add 180° to the asc.floor(λ / 30).Coordinates come from a hand-curated table (Auroville, Pondicherry, Chennai, Bengaluru, Mumbai, Delhi, Hyderabad, Kolkata, Pune, Kochi, Thiruvananthapuram). Anything else falls back to Auroville. No geocoder.
One privacy-respecting analytics call — Cloudflare Web Analytics (page-views only, no cookies, no fingerprinting, no individual tracking) so Sree can see which pages the cohort actually opens. No third-party trackers. No fonts beyond the project's standard. All UI is computed in the user's browser. The only other network call is the one-time CDN fetch of astronomy.browser.min.js (~80 KB, cached after first load) — and that one is optional; the page falls back to the static file if it's blocked.
Three goals had to coexist: (1) real-time freshness — the Moon moves 13°/day, so a stale chart is wrong by lunchtime; (2) sidereal correctness — what Vikram teaches, what the cohort needs; (3) works offline — for retreat use, flights, places without reliable connectivity. astronomy-engine + Lahiri + static fallback hits all three.
index.html ← chart, Daily Gem, this modal, all compute
today-sky-data.js ← 396-day pre-computed positions (offline fallback)
scripts/generate_today_sky.py ← regenerates the fallback (run monthly)
<CDN> astronomy.browser.min.js ← Don Cross / MIT (loaded async, ~80 KB)
Stack: vanilla JS · CSS Grid · astronomy-engine (Don Cross, MIT) · Lahiri ayanāṁśa · ~800 lines of JS · one CDN dependency · graceful offline fallback.