LATEST Join RVA Research for a reading at no-cost. Learn more

Software Updates

Changelog

Day-to-day changes across every RVA software — features, fixes and improvements. 172 updates across 9 softwares.

  1. M2N Software — chart & dasha workspace at /m2n-softwares/

    • New M2N (Meena 2 Nadi) Model workspace with natal / progression / transit charts (all divisional varga options), the dasha bar, and the expandable 5-level Vimshottari dasha tree on one screen.
    • Shares the same calculation engine as RVA Software, so charts and dashas match exactly.
  2. Transit Calendar — a personalized nakshatra muhurat calendar, computed on-device

    • New tool at /transit-calendar/. Each day on the calendar is colored green / yellow / red by your Tara Bala star score, seeded from your birth star and shown with the ruling planet (Su, Mo, Ma…).
    • Click any day to open its 27 lagna (ascendant) slots — the true, uneven boundaries computed for your current staying location, with the auspicious window for each slot.
    • A settings panel lets you tune scoring: enable/blend rule providers, slide each planet's weight (the price bar) to scale its three stars at once, or override any single nakshatra. Score overrides save per profile — search a saved profile by name to edit its scores. Everything runs locally with Swiss Ephemeris and saves to your account (or this device when signed out).
    • Editing a score now recolors the calendar and the open day's 27 lagna slots immediately (no rebuild needed).
  3. Notes — pin the notes panel open so it docks beside your work instead of covering it

    • The notes drawer now has a pin button next to the close button. Pinning keeps the panel open and shifts the page content over so the chart and the notes sit side-by-side — nothing is hidden behind the drawer.
    • Your pin choice and the panel width are both remembered, so the notes stay docked the way you left them. Clicking the pin again unpins and returns the page to full width. (Desktop only — the panel is hidden on small screens.)
  4. Kundali Matching — shared links from the astrologer-review flow no longer lose birthplace coordinates

    • A shared match link created while submitting for an astrologer review (or via the eligibility check) was saving the birthplace name but dropping the latitude, longitude and timezone — so opening the link computed the charts against blank coordinates and shifted the ascendant.
    • New shares now store the coordinates correctly. Existing links that were already saved without them are repaired automatically on open: the birthplace is re-looked-up and its timezone (including daylight-saving for the birth date) is restored before the charts are drawn.
  5. Saved profiles — timezone now loads correctly for USA & other non-India birthplaces

    • Opening a saved profile whose birthplace is outside India (e.g. a US city) now resolves the correct timezone, including daylight-saving, instead of falling back to the India default.
    • The fix corrects how the place is looked up: stored places like "Edison, New Jersey, USA" were being searched whole, which returned no match, so the timezone was never resolved. The lookup now searches the city name and picks the exact city using the profile's saved coordinates.
    • Applies to both ways of loading a saved profile — the name-field suggestions and the profile loader used across the tools.
  6. Hindi, Tamil & Kannada — full UI now translates (joining Telugu)

    • Picking हिं (Hindi), த (Tamil) or ಕ (Kannada) from the language menu now translates the whole page — section titles, every table header, KP tables, the Ashtakavarga & Alan Leo controls, the settings panel, and form labels — the same coverage Telugu already had.
    • Planet names also localise in the data: the Dasha bar, KP tables (planet + sign columns) and the Panchang strip (ascendant sign, nakshatra, tithi, yoga, karana) render in the chosen script and re-render instantly on language switch.
    • Divisional charts, ayanamsa names and house systems are rendered in each script, and the printed Kundali report follows the selected language for its headings and tables.
  7. Kundali Matching — progression year +/- now steps exactly 1 year, the year is type-able, and shared links keep their coordinates

    • The −/+ steppers on the Groom/Bride progression charts now move by exactly one year per click. Previously, re-running Submit stacked an extra click handler each time, so after re-calculating a single click could jump several years at once.
    • The progression year is now an editable field — type a year directly (e.g. 2042) and press Enter or click away to redraw both progressed charts. The −/+ buttons and manual entry stay in sync.
    • Opening a shared match link (?share=…) no longer occasionally loads with zeroed latitude/longitude/timezone (which shifted the ascendant). The two birth-detail forms were each running their own share-loader on top of the page's, racing to populate the fields; the page now owns share loading on its own.
  8. Telugu language — full UI now translates (not just chart labels)

    • Picking తె (Telugu) from the language menu now translates the whole page — section titles, every table header (Planets / Light / Resource / Capacity, Occupant / Lord / Karaka / Total), KP tables, the Ashtakavarga & Alan Leo controls, the settings panel, and form labels — alongside the chart planet/sign glyphs that already localised.
    • Planet names also localise in the data itself — the Dasha bar (రవి మహాదశ …), KP tables (planet + sign columns), and the Panchang strip (ascendant sign, nakshatra, tithi, yoga, karana) now render in Telugu and re-render instantly on language switch.
    • Divisional charts, ayanamsa names and house systems are rendered in Telugu script (నవాంశ, లాహిరి, ప్లాసిడస్ …).
    • The printed Kundali report also follows the selected language for its section headings and analysis tables.
  9. Vimshottari Dasha Tree — now renders (was stuck on skeleton)

    • Yesterday's switch from inline 365-day math to the canonical /api/v1/dasha/vimshottari API made the dasha calc async, but the tree-render step still ran synchronously before _dashaList was populated — so the 5-level expandable tree stayed on its shimmer placeholder forever.
    • Now re-renders the tree inside the API .then(), so it appears as soon as the dasha data arrives.
  10. Panchang Display — now ON by default

    • New visitors see the Panchang bar (tithi, nakshatra, yoga, karana, sunrise/sunset, moonrise/moonset) without flipping a setting.
    • Existing users who turned it off keep their off state.
  11. Show Neptune & Pluto — actually rendered on charts by default

    • Earlier the toggle defaulted ON but the chart-render path still skipped Ne/Pl when localStorage was unset, so new visitors saw blank.
    • Two more chart-render branches now also default ON, so Ne/Pl appear on the charts immediately.
  12. Vimshottari Dasha — 5 levels (Maha → Antar → Pratyantar → Sookshma → Prana)

    • Sookshma rows are now expandable to a 5th Prana level (purple).
    • Show Neptune & Pluto toggle now defaults to ON for new visitors.
  13. Dasha bar — shadcn-style redesign

    • Active antardasha cell: 2px purple top border + subtle tint replaces indigo bottom shadow.
    • Planet row: left-aligned flex with planet symbol + name on left, score on right (replaces centered layout).
    • Planet symbols: per-planet color coding (Sun orange, Moon purple, Mars red, Venus pink, Mercury emerald, etc.).
    • R4 rank badge: clean purple pill replaces superscript span.
    • Header score badge: minimal pill (border + faint bg) replaces 2px bordered box.
    • Nav buttons: 26×26px shadcn style.
    • DI row: CSS class-based (antara-di-row/planet/strong) with separator dot.
    • Current period (not hovered): always shows dates + subtle purple top marker.
    • Full dark mode support for all new styles.
  14. Share chart link — include name field in shared link

  15. Share chart link — short ID (?share=abc1234), 90-day expiry, auto-fills and calculates on open

  16. Print report — restore Planets Analysis & House Analysis headings and footer on last page

  17. Profile name search — any word match restored

    • Typing any word in a name now finds profiles (e.g. typing 'Ravi' finds 'Srikanth Ravi Kumar').
    • Safe to use contains-match here: query is always filtered by user_id so only that user's profiles are scanned.
  18. KP Horary — A4 print report with South Indian chart, dasa summary, ruling planets

    • Completely rewrote kp-print-report.js to generate an A4 KP horary print layout matching the reference design.
    • Left column: panchang info box, sign-based South Indian chart (4×4 grid with all planets/cusps), Dasa Summary (9 mahadasa × 9 bhukti).
    • Right column: Ruling Planets table, Cuspal Positions, Planetary Positions, Significators (A/B/C/D).
    • Chart center shows name, date, time, place, lat/lon, TZ, ayanamsa, nakshatra, lagna, tithi, bal.dasa.
    • Panchang bar CSS updated to match rva-softwares exactly (Tailwind classes, correct SVG icons per item type).
  19. KP Horary — KP tables redesigned to match rva-softwares style

    • Removed merged section-header card; tables now render as standalone rounded cards.
    • Dark mode updated to gray-900/gray-800/gray-700 palette (was near-black).
    • Table header text updated to gray-700/gray-300 for better contrast.
  20. Print Report — fix spurious sub-rows: correct Lord/Karaka like-with-like comparison, tolerance-based inv change detection

  21. Print Report — page 2 space savings: remove Planet/House headings, summary footers, page footer and padding

  22. Print Report — KP tables match screen: SignLord (blue), sssLord (teal), full 5-lord columns, correct significator A/B/C/D columns

    • KP Planets: added SignLord (blue) and sssLord (teal) columns; [R] badge inline in planet name; 10 columns matching screen.
    • KP Houses: added SignLord and sssLord columns; 9 columns matching screen.
    • Significators Planet/House: fixed A/B/C/D column mapping with correct colors (purple/orange/pink/teal).
  23. Print Report — Planet/House Analysis match screen: SL/Inf column, score+planet cells, inverted display, summary footers

  24. Print Report — fix inline progression sub-rows missing in Planet/House tables

    • ps.year = birthYear + dayOffset (days, not years), so filter ps.year<=birthYear+40 only passed first 40 days.
    • Fix: filter by ps.day<=40*365 instead — all sign-change events within first 40 years of life.
    • House Analysis: remove dedicated Sign column, fold abbreviation (Ar/Ta/Ge…) into # cell as small text.
    • Planet Analysis: replace full sign name with short abbr + house number (e.g. Ta H2 instead of Taurus (H2)).
  25. Print Report — reorganize to 3 pages (Alan Leo+Planet/House on p2, Dasha+Varga on p3)

    • Page 2 now: Alan Leo graph + Planet Analysis + House Analysis (with 40-year inline progression rows).
    • Page 3 now: Dasha 9 + Varga Charts (D7/D9/D10).
    • Prevents overflow when Planet/House tables are tall with many progression sub-rows.
  26. House Analysis — redesign table to 5 columns with inline planet names

    • Removed separate Planets and Karaka Planet columns.
    • Occupant cell now shows score + effective planet inline (e.g. 46 Ju°).
    • Karaka cell now shows score + karaka planet inline in purple (e.g. 16 Ve).
    • Yearly period rows updated to match new 5-column layout.
  27. Print Report — fix inline progression scores missing in Planet & House tables

    • When birthYear=0 (Time Chart default), maxProgYear was 0+40=40, filtering out all real progression years (e.g. 1987+n).
    • Fix: only apply 40-year cap when birthYear>1900; otherwise allow all years through.
  28. House Analysis — align year rows across all columns using <tr> sub-rows

    • Previous approach stacked <div>s inside each <td> independently — different column heights made rows misalign.
    • New approach: one unified timeline, each change event rendered as a proper <tr> spanning all columns.
    • Each year now appears on the same horizontal line across Planets/Occupant/Lord/Karaka/Total.
    • Changed values are colored; unchanged values shown in gray so the year row is always complete.
  29. KP Horary — fix Significator Planet View and House View columns

    • Planet View was showing star lord name / sign lord / sub lord (planet names) — now correctly shows house numbers: bhava of star lord (A), planet's own bhava (B), houses owned by star lord (C), houses owned by planet (D).
    • House View had wrong column mapping from old significators object — now computes A/B/C/D using same algorithm as /rva-softwares/: A = planets whose star lord is in house, B = occupants, C = planets whose star lord owns house, D = sign lord.
    • Legend updated to match column semantics.
  30. Print Report — swap page order + Ctrl+P UX fix

    • Page 2 now shows Vimshottari Dasha + Divisional Charts (was page 3).
    • Page 3 now shows Alan Leo Progression + Planet Analysis + House Analysis (was page 2).
    • Ctrl+P now auto-prints the 3-page report (not the 9-page main page) — uses capture-phase listener + autoPrint flag so iframe content prints on load.
    • Added footer to page 3 (Planet/House Analysis page).
  31. Print Report — fix house analysis showing '—' scores (field name mismatch)

    • HouseOccupantResult API only exposes .score (raw effective-planet capacity), not occupantScore/lordScore/karakaScore/totalScore.
    • Print report was reading non-existent fields → all house scores rendered as '—'.
    • Fix: compute occ = score×0.6, lord = cap[signLord]×0.2, kar = cap[houseKaraka]×0.2 — same formula as on-screen renderHouseAnalysis.
    • Added SIGN_OWNER + HOUSE_KARAKAS constants to print-report.js.
    • Same fix applied to per-year progression sub-rows in house analysis table.
  32. Print Report — per-year progression scores in Planet & House Analysis

    • Planet Analysis: each score cell now shows progression sub-rows (light/perf/res/total – year) for solar-arc sign-change years.
    • House Analysis: each occ/lord/kar/total cell shows per-year sub-rows from progScores.
    • rva-engine.js rvaPrintData() now exposes progScores (_progScores) for use in print report.
  33. Print Report v2 — 3-page layout, in-page preview, live SVG charts

    • Page 1: Panchang · Natal + Progression SI charts side-by-side (live DOM SVGs from engine) · Planet Analysis · House Analysis.
    • Page 2: Alan Leo progression bar chart (canvas capture via toDataURL) · Vimshottari Dasha grid with current period highlighted.
    • Page 3: D7/D9/D10 divisional grids · KP planets + cusps · Significators planet/house · Western aspect matrix.
    • Header: clean black — name + meta on left, RVA logo + 'RVA' on right, bottom border. No purple banner.
    • Footer: single line — RVA logo · website URL · report info · practitioner contact.
    • Preview opens as in-page modal (not a popup). User reviews, then clicks Print.
    • Fix: logos in header/footer now use fully inline SVG (presentation attributes) — no external fetch, renders correctly in srcdoc iframe.
  34. Strongest Planet — Mercury now wins Libra when multiple DB planets and DB winner is debilitated

    • Bug: when multiple planets had Dig Bala but none had R1, the code fell through to Sequence Order. planets.sort() mutated the array; debilitation-skip then picked Mars (next in sequence) instead of Mercury (next DB planet).
    • Root cause: missing else-clause for the 'multiple DB, no R1' case — it never resolved within the Dig Bala rule category.
    • Fix: added else-clause that sorts DB planets by sequence and skips debilitated ones, so the winner stays within the Dig Bala category. Applied to strongest-planet.astro, powerful-planet.ts, and dasha-influencer.js.
  35. Print Report — one-click printable Kundali report from live chart data

    • New teal Print FAB button (bottom-right, above AI Prompt) opens a print-optimised window with the full chart data.
    • Page 1: Birth Chart + Progression Chart (SVG, full fidelity) | KP Planets + House Cusps tables.
    • Page 2: KP Significators (Planet View + House View) | Vimshottari Dasha bhukti tables (3 mahashas per row).
    • Page 3: Planet Capacity (Light / Performance / Resource) | House Analysis — both pulled from live in-memory state.
    • Page 4 (optional): Western Aspects matrix, shown only when the Aspects tab has been opened.
    • Charts are captured as SVG (not canvas screenshots) so they print at full vector quality.
    • print-report.js exposes window.printReport(); rva-engine.js exposes window.rvaPrintData() for cross-script data access.
  36. KP Planets & House Cusps tables now appear side-by-side at 150% zoom on Safari Mac

    • At 150% browser zoom on Mac, the CSS viewport shrinks below 1024px so the lg: breakpoint no longer triggered the 2-column layout — both tables stacked vertically.
    • Fix: changed the grid breakpoint from lg (1024px) to md (768px) so the side-by-side layout holds at ~960px viewport (150% of 1440px).
  37. Strongest Planet — Mars now wins Leo when multiple planets have Dig Bala

    • Bug: when multiple planets in a sign all qualified for Dig Bala, the rule was skipped entirely and Sequence Order took over — making Moon win over Mars in Leo (Scorpio ascendant chart).
    • Fix: added R1 tiebreaker — if any planet is physically in its own Dig Bala house (R1), it wins over planets that qualify only via indirect rules (R2–R8).
    • Applied to all 4 copies of the logic: powerful-planet.ts (rva-softwares, planet-capacity), strongest-planet.astro, dasha-influencer.js, and dasha-analysis-calculator.astro.
  38. Rewrote /rva-software/ feature documentation

    • Added Planet Capacity (Light/Performance/Resource), Dasha Influencer, Alan Leo Progression Graph, Ashtakavarga Transit Strength, Panchang bar, KP ayanamsa variants, Verify Birth Time, and Strongest Planet Finder sections.
    • Removed outdated 'Upcoming Features' section (Ashtakavarga is now live).
  39. Progression chart — Venus (and any planet) showing 00:00:00 at sign boundary

    • Root cause: ephemeris-120 API rounded planet lon to 3 decimal places (149.9996→150.000), but stored sign from the unrounded value. The display computed 150%30=0 → 00:00:00 in the wrong sign.
    • Fix: new roundLon() helper caps the rounded value just inside the original sign (149.999) when rounding would cross a sign boundary. Applied to all standard planets, outer planets, and house cusps.
    • Also fixed formatDegree min+1=60 overflow (29:60:00→30:00:00) and added sign-boundary tolerance in adjustChartDataForKP for the D1/progression chart path.
  40. Profile Notes — moved to form bar; date/time narrower; AI Prompt label inside button

    • Notes icon moved from floating bottom-right button into the form bar (between gear and Submit). Shows when a profile is loaded, hidden otherwise. Only one FAB (AI Prompt) remains at bottom right.
    • Date input narrowed: 140px → 120px. Time input narrowed: 110px → 95px. Frees horizontal space in the form bar.
    • AI Prompt label moved inside the button (CSS ::after) so it sits directly below the icon. Button shape changed from circle to rounded rectangle (14px radius, 52×56px).
  41. Profile Notes — icon size, name chip width, resizable textarea; AI Prompt label

    • Trigger button reduced from 40px to 36px to match other icon sizes; drawer header icon constrained to 15px.
    • Profile name chip max-width increased (140px → 200px) so longer names like 'Hari Babu Bonda' show more.
    • Notes textarea: resize:none → resize:vertical with min-height 60px — drag bottom-right corner to expand.
    • Added 'AI Prompt' text label above the AI FAB button so users know what it does.
  42. Profile Notes — Add/Save button text now white in light mode

    • Button text was hardcoded #000 (black), showing as black on purple (var(--color-purple-60)) in light mode. Changed to var(--primary-foreground) so it uses white in both light and dark themes.
    • Fixed timing issue: profile-notes.js now polls for an already-loaded profile on init, so the pen icon appears even when ProfileIntegration fires before the deferred script loads.
  43. Profile Notes — add, edit, delete per-profile notes from a desktop drawer

    • A pen icon appears in the bottom-right corner (above the AI FAB) when a profile is loaded. Click it to open a 330px notes drawer.
    • Notes are stored in D1 (profile_notes table) per user + profile. Fetched lazily on drawer open — zero impact on page load.
    • Toolbar: B (bold), I (italic), • List (bullet), — (divider). Select text then click B or I to wrap.
    • Full CRUD: add, inline edit, delete. Newest note shown first. Desktop-only (hidden below 1024px).
  44. Engine moved to deferred external file — HTML now parses before 256KB of JS executes

    • The entire 5250-line RVA Engine IIFE was inlined in the page, forcing the browser to parse and execute ~256KB of JavaScript before it could render anything. It's now in public/js/rva-engine.js loaded with `defer` — same code, just delivered as an external resource so HTML parsing is unblocked.
    • Inline CSS (221 lines, ~5KB) moved to public/css/rva-softwares.css and loaded via a <link> tag. Reduces initial HTML payload and allows the browser to cache the stylesheet independently.
    • Auto-submit timeout replaced: was 500ms outer + 800ms inner (1.3s total). If lat/lon are already in the URL params / storedData they're available immediately, so we submit right away. Otherwise polls every 100ms up to 2s for profile-integration to fill them. Profile auto-load from saved profiles now triggers chart ~1s faster.
    • Translation helpers (_tPlanet, _tSign, _tRetro) no longer query localStorage on every render call. Language is cached at IIFE init and updated via the languageChanged custom event.
  45. Chart-first render: defer capacity chain until Planet Capacity scrolls into view + other loading wins

    • Previously every form submit fired 7+ API calls in parallel or cascaded (ephemeris + retrograde/analyze + 6-step capacity chain: powerful-planet + light + performance + resource + combine + planet). The chart had to wait in line behind all of them. Now retrograde/analyze + the capacity chain only fire when the Planet Capacity section (rva-planet-mount) scrolls into view — users who only want to see the chart save 7 API calls per submit.
    • Deferred head scripts: chart.min.js, config.js, tooltips.js all gained `defer` — they no longer block the HTML parse. Safe because all three are only touched inside function bodies (new Chart, window.AppConfig, window.tooltipUtils) that fire after DOMContentLoaded.
    • Google Fonts: combined Inter + Lato into a single stylesheet request (was two), and added `crossorigin` to the googleapis.com preconnect (was missing — preconnect was wasted without it).
    • sessionStorage cache for /api/auth/me: was fetched on every page load for logged-in users. Now cached for 10 minutes, keyed on the token so logout/login invalidates.
    • Killed the setInterval polling (100ms × 50 tries) that was looking for the profile dropdown wrapper. Replaced with a one-shot MutationObserver + 'ui:initialized' event listener so we attach the moment the component is ready, no polling.
    • IntersectionObserver rootMargin tightened from 200px to 50px — lazy blocks (Alan Leo, KP, Aspects, now Planet Capacity too) no longer pre-fetch when the user is still 200px away.
  46. Panchang is now opt-in (default OFF) — saves one API call per submit for users who don't need it

    • Previously the panchang bar was shown by default and /api/astro-modules/daily-panchang was fetched on every form submit, even for users who never look at it. Now the toggle in Settings defaults to OFF, and the API call is skipped entirely when disabled (Promise.resolve(null) fills its place in the pipeline).
    • Bar also starts with 'hidden' in HTML so there's no skeleton flash on page load. applyPanchangState() reveals it only when the user has opted in AND the data is populated.
    • Users who had explicitly turned the toggle ON (localStorage.panchangEnabled === 'true') keep it ON. Users who never touched the toggle (no localStorage entry) will now see it OFF — this is the intended behaviour change.
  47. Chart planets + house cusps: pink hover effect for a friendlier UI cue (light + dark mode)

    • Mousing over a planet glyph or a house cusp (Roman numeral) in the SVG chart now fades its colour to pink (#ec4899) with a 150ms transition. Tooltips still appear as before — the hover colour is an additional cue that the glyph is interactive.
    • Scoped to 'svg .planet-text', 'svg .house-element', and 'svg .house-text' so it only targets SVG text elements; the div-based South Indian chart styles are unaffected. '!important' is required because charts.js sets each text element's fill via an inline style/fill attribute.
    • Dark mode fix: global.css recolors these glyphs via '[data-theme="dark"] svg text[fill="..."] { fill: #ffffff !important }' at specificity 0,2,2 — the base hover rule tied and cascade-order made the hover lose. Added a matching 'html[data-theme="dark"] svg .planet-text:hover' override at specificity 0,3,2 so the pink colour wins in dark mode too.
  48. Reload button: positioned top-right of KP cards; removed duplicate on Western Aspects

    • KP Planets card: wrapped the heading in a flex/justify-between row so the lazy-block 'Reload' button now lands at the top-right of the card instead of dropping to the bottom (the lazy-block code anchors the button to the heading's flex parent — the card had a bare h4 with no flex wrapper, so 'parentElement' was the card div and the button got appended after the table).
    • House Cusps card: same flex wrapper applied for visual consistency (no Reload button here — the lazy-block only registers one button per container, on the first heading).
    • Western Aspects: removed the duplicate dynamic 'Reload' button. The section already has a static 'Recalculate' button on the right side that does the exact same thing (clears the aspects cache and re-renders). Added a 'skipButton: true' option to registerLazyBlock and pass it for Western Aspects only — so the lazy-block's auto-load-on-scroll behavior is preserved but no extra button is added.
  49. KP tables mobile: remove unwanted gaps between columns (especially House Cusps Star column)

    • Root cause: Tailwind's 'w-full' set table width to 100% of the card, and our 'min-width: 540px' forced it wider than content needed on mobile. With auto table-layout, the browser distributed that extra ~200px across columns — and most of it landed on the Star column, producing the big empty gap between Star and Sign Lord on House Cusps.
    • Fix: on mobile, override the table width to 'auto' (size to content) and drop the min-width. Columns now sit at their natural width with no extra padding distributed. Horizontal scroll still kicks in if natural content exceeds the card (e.g. on the wider KP Planets table).
  50. KP tables mobile: 'Bhava' → 'B' header + tighter cell spacing

    • Mobile (<lg) header abbreviation: Bhava → B (in KP Planets table). Desktop keeps the full word. Done via responsive Tailwind spans.
    • Reduced cell padding from py-2 px-2 (8px) to 6px 4px on mobile, and dropped table min-width from 620px to 540px. The whitespace between columns is now noticeably tighter — same number of columns, less wasted gap.
  51. KP tables: remove sticky-column shadow line + further header abbreviations on mobile

    • Removed the 2px box-shadow that was rendering as a vertical line beside the frozen Planet/House column. Sticky behavior still works (via solid cell background); just no visual divider.
    • More mobile header abbreviations: Planet → PL (capitalized to match style), Sign → SI (both Planets and House Cusps tables). House → H stays. Desktop (≥1024px) still shows the full words.
  52. KP tables mobile: 'Planet' → 'Pl' / 'House' → 'H' header + reliable horizontal scroll

    • First-column header is abbreviated on mobile (<lg): 'Planet' → 'Pl', 'House' → 'H'. Desktop (≥1024px) keeps the full word. Done via responsive spans, no JS.
    • Re-added `min-width: 620px` on `.kp-sticky-table` under the mobile media query. Previous attempt removed it assuming the table would shrink to fit — but at 12px font with nowrap cells the content is ~534px min, which under some browser table-layout heuristics can end up clipping columns without triggering scroll. Forcing min-width > card width guarantees overflow, which guarantees the horizontal scrollbar appears and the sticky first column becomes meaningful.
    • Cleaned up duplicate scrollbar CSS, explicit `overflow-x: auto` on the scroll container.
  53. KP tables: restore default 12px font on mobile (matches Significators table)

    • Previous mobile CSS shrunk KP tables to 10–10.5px to squeeze in all columns. User feedback: that reads smaller than the neighbouring Significators table which stays at text-xs (12px). Removed the font-size and padding overrides — KP tables now use the same 12px / py-2 px-2 as the rest of the page.
    • Kept the width-saving tricks (2-line lord headers, Star cell wrapping, no forced min-width) so all columns still fit the card without horizontal scroll at 12px.
  54. KP tables mobile: drop min-width, keep 2-line 'Sign / Lord' headers, let Star cell wrap — fits a phone screen with no horizontal scroll

    • Earlier mobile CSS was flattening the 2-line 'Sign Lord' / 'Star Lord' / 'Sub Lord' / 'SS Lord' / 'SSS Lord' headers onto one line (via `th br { display: none }`), which made the lord columns eat horizontal space. Restored the 2-line headers on mobile to match the desktop look.
    • Allowed the Star cell to wrap (`white-space: normal`) so 'U. Bhadrapada (4)' breaks into two lines instead of stretching the column. Every other cell stays single-line.
    • Removed the forced `min-width: 520px/560px` on mobile — the table now shrinks to fit the card width, so on a 375–430px phone all 10/9 columns are visible without horizontal scroll. Sticky first column is preserved in case the table still overflows on very narrow screens.
  55. KP Star column: Uttara/Purva prefix abbreviation now actually matches the source names

    • Previous fix used map keys like 'U.Bhadrapada' — but the nakshatra source in kp-sublords.ts uses full Indian names ('Uttara Bhadrapada', 'Purva Phalguni'). So the map never matched and the column still read 'Uttara Bhadrapada (4)'. Updated keys to the actual source names: 'Uttara Bhadrapada' → 'U. Bhadrapada', 'Purva Phalguni' → 'P. Phalguni', etc.
  56. KP tables mobile: horizontal swipe was broken — removed overflow-y:hidden

    • Prior fix set 'overflow-y: hidden' on the scroll container, which on iOS can block horizontal swipe gestures. Removed that rule and added 'touch-action: pan-x pan-y' so the browser explicitly allows both horizontal table scroll and vertical page scroll.
  57. KP tables mobile: actually freeze Planet/House column during horizontal scroll (was silently broken)

    • The sticky first column was intended but not working — Tailwind's Preflight sets 'border-collapse: collapse' on tables by default, and that breaks 'position: sticky' on <td>/<th>. Added 'border-collapse: separate; border-spacing: 0' on .kp-sticky-table to let sticky actually take effect.
    • Hardened the sticky rules: solid backgrounds on the frozen first cell (so scrolled row text never bleeds through), a row-hover override on the frozen cell, and an 'overflow-y: hidden' on the scroll container so the horizontal scroll is clean.
    • Rules are no longer gated behind max-width:1024px — they're always on (desktop fits the card, so there's nothing to stick). Added min-width to the first column (44px / 38px on <480) to keep the Planet/House label from visually collapsing.
  58. KP tables: keep full 'Bhadrapada', only abbreviate the Uttara/Purva prefix with a space (U. Bhadrapada)

    • Previous abbreviation was too aggressive — 'U.Bhadra' lost the distinctive '-pada' ending. New rule: only the prefix is shortened (Uttara → 'U. ', Purva → 'P. ') with a space after the period, and the core name is kept full: 'U. Bhadrapada (4)', 'P. Bhadrapada', 'U. Phalguni', 'P. Phalguni'.
    • Ashadha is kept as the shorter 'Ashada' spelling (P. Ashada / U. Ashada) to match the most common display form. Single-line wrapping preserved via nowrap on mobile.
  59. KP Planets + House Cusps tables: compact mobile layout with 2-letter signs and shortened nakshatra names

    • Sign column now uses 2-letter codes (Ar, Ta, Ge, Cn, Le, Vi, Li, Sc, Sg, Cp, Aq, Pi) instead of 3-letter (Ari, Tau, Gem, …) — Cn disambiguates Cancer from Cp (Capricorn).
    • Nakshatra names shortened in the Star column: Ashwini → Aswini, Mrigashira → Mrigasira, Ardra → Aridra, Pushya → Pushyami, P./U.Ashadha → P./U.Ashada, Shravana → Sravana, Shatabhisha → Satabhisha, P./U.Bhadrapada → P./U.Bhadra. Format changed from 'Name - pada' to 'Name (pada)'.
    • Mobile: reduced table min-width from 680px to 560px (520px on <480px phones), tightened cell padding, added nowrap on cells — less horizontal scroll on phones while all columns remain visible.
  60. Alan Leo year-aspect table: short planet names + mobile-responsive columns

    • Dropped the redundant long planet name from the Natal/Progressed cells (was 'Ju Jupiter', now just 'Ju'; Midheaven stays as 'X') — short codes were already shown and the full name was pure noise.
    • On mobile (<md), hide the R, +/-, and Base columns so the table fits a phone screen — Natal, EffR, Deg, Progressed, EffR, Deg, Aspect, Orb, and Final remain visible. Reduced cell padding to px-1 on mobile for more room.
    • Mobile-only header abbreviations: Natal → Nat, Progressed → Pro, Aspect → Asp. Aspect names also abbreviated on mobile: conjunction → Conj, sextile → Sex, trine → Tri, square → Sqr, opposition → Opp. Full words remain at md+ breakpoint.
  61. North chart: house numbers no longer overlap planets in crowded houses; removed tooltip from house numbers

    • Houses 5, 6, 8, 9 (corner triangles) had their green house number label sitting on top of planet text when multiple planets occupied the same sign — numbers now placed at the outer edge of each triangle, away from the planet text anchor
    • Removed hover tooltip from green house-number labels (1–12) — tooltip was redundant since the sign code is already visible inline
  62. Planet tooltip: 2-letter sign code + HH:MM:SS (Me | Ta 15:23:45 | Krittika-4 (Su))

    • Tooltip now reads e.g. 'Me | Ta 15:23:45 | Krittika-4 (Su)' — 2-letter sign code matching the NI chart house labels (Ar Ta Ge Cn Le Vi Li Sc Sg Cp Aq Pi) and HH:MM:SS for degree within sign (was Tau 15°23'45").
  63. North chart: show sign short code next to each house number (1 Ar, 2 Ta, …)

    • Each of the 12 green house labels now carries the 2-letter sign code for that house based on the current ascendant (Ar Ta Ge Cn Le Vi Li Sc Sg Cp Aq Pi) — e.g. a Virgo ascendant reads '1 Vi', '2 Li', '10 Ge'.
  64. North chart: constant-size labels — drop degrees (to tooltip) when a house is crowded

    • Previously crowded houses either dropped planets or shrank the font; now the label stays at 13px and instead drops the degree suffix — so a busy house shows 'Me Su' side-by-side while a calm one still shows 'Me 19:31'. Full DD:MM remains on the hover tooltip via data-longitude.
  65. North chart: never drop planets, fix house tooltip sign, keep green house numbers in dark mode

    • Crowded houses previously dropped any planet past maxY (e.g. Mercury silently missing next to Sun+cusp) — now compresses through tiers (13px → 11px → 2-per-line → name-only) so every planet renders; full degrees still visible on hover tooltip
    • House-number hover used to always label H1 as Aries regardless of ascendant (buildChartData was falling back to Aries); now populates window.astrologyApp.chartsLoaded.natal with the actual signData + ascendant
    • Dark mode was repainting the green NI house numbers pink (#f68e8e); restored to the light-mode green
  66. Advanced Settings: remove Graha Hiding; House System fixed to Placidus

    • Graha Hiding dropdown removed from the Advanced Settings panel
    • House System dropdown now shows only Placidus (other options removed)
    • Settings grid reflowed from 4 to 3 columns to match the remaining fields
  67. Verify Birth Time popup: correct sunrise (was off by ~2h)

    • The /api/astro-modules/daily-panchang endpoint returns sunrise as an epoch-ms number, not a string — the popup was treating it as a string and sending garbage to /api/btr/verify
    • Now converts the epoch ms to HH:MM:SS using the birth place's timezone offset (matches /btr/ behavior, plus the +4 min Vedic adjustment)
    • Summary strip sunrise, LMT, and LMT & Sunrise values now match the full /btr/ page for the same input
  68. Verify Birth Time popup: global styles + HH:MM:SS + explicit Use button

    • Tatwa pills, dark Nadi header, and match badges weren't rendering because Astro's scoped CSS doesn't cover innerHTML-injected rows — styles made global (vbt-* prefix keeps them isolated)
    • Nadi table now has a 'Use' button column instead of row-click auto-apply — birth time only changes when you explicitly choose a row
    • Use buttons (both Ranked candidates and Nadi table) now write the full HH:MM:SS value, matching the seconds-precision time picker on the form
  69. Verify Birth Time popup: /btr/ look + click-row-to-rectify

    • Added summary strip above the Nadi table — Weekday, Sunrise, LMT, LMT & Sunrise, Star Lord, Nadi Row, Tatwa, Planet 90/V, Gender/Star, Ascendant — same 10 tiles as the full /btr/ page
    • Tatwa cells are now colored pill badges (FemJala / MalePrithvi / MaleAkash / FemVayu / MaleTejo) in both Ranked candidates and the Nadi table, not plain colored text
    • Nadi table has the dark-navy header bar and highlighted active weekday + sign-type columns
    • Click ANY row in the Nadi table to rectify birth time to that row's T2 (HH:MM) — same behavior as /btr/
    • API /api/btr/verify now returns sunrise/LMT/final-time strings so the popup can render the summary without extra calls
  70. Verify Birth Time popup: visual polish

    • Cleaner panel shell — rounded card with soft shadow, gradient header, subtle section dividers
    • Scan controls: uppercase micro-labels, focus ring on inputs and selects, primary-tinted Run button with lift-on-hover
    • Candidate table: sticky column headers, row hover, best/current rows now use a left-edge color bar + subtle tint (no more heavy full-row wash)
    • Match indicators turned into small circular badges (green tick / muted cross) instead of plain characters
    • Use button is now a pill; mobile tightens padding and font-size for narrow viewports
    • Status bar shows as a left-accent info block; error state uses a matching red accent
  71. Verify Birth Time: clock icon button next to the settings gear

    • Moved Verify Birth Time from a standalone button below the form to an icon button inside the form bar, right before the settings gear
    • Keeps the Submit split-menu (Save / Edit / Delete) reserved for profile management — Verify stays a pre-submit data action
    • Same popup and Nadi Tatwa engine; only the toggle location changed
  72. Verify Birth Time popup (Nadi Tatwa) — rectify without leaving the form

    • New 'Verify Time' button below the birth-data form opens an inline popup
    • Set a scan window (default −10 / +5 minutes), pick gender, optionally auto-detect sign type
    • Runs the Nadi Tatwa rectification via a new /api/btr/verify endpoint — same engine as /btr/
    • Shows ranked candidate times with T1 / T2 / row / tatwa / antar / gender / 90-min planet / Vinod planet, plus a visual Nadi table slice centered on your row
    • Click 'Use' on any candidate — writes the bucket-midpoint T2 back into the birth time field, ready to submit
    • Engine extracted to src/lib/rva/nadi-tatwa.ts so the API and /btr/ page share the same math
  73. Planets Analysis progressed capacity uses v4 total (no double-light)

    • Sub-row capacity values in Planets Analysis were recomputed locally with the pre-v4 formula (perf×0.6 + res×0.4)×light — this double-applied light and used stale weights
    • Now reads capacity.total directly from the API response, matching the v4 formula (perf×0.7 + res×0.3) used by the Dasha Bar and natal main row
    • Fixes the Jupiter sub-row showing 49/11 when Dasha Bar showed 64 for the same progressed year
  74. RVA_MASTER: section checkboxes, age range, and presets

    • Age range inputs (0-120) with auto-synced year display — think in ages, not just years
    • Section checkboxes: Chart, D9 Navamsha, Dynamic Natal, Capacity, House Analysis, Dasha/Bhukti, Progression
    • Uncheck any section to trim prompt size for NotebookLM's paste limits
    • Presets: Quick (Chart+Capacity+Dasha), Full (all on), Timing (Dasha+Progression+Dynamic)
    • Preferences saved to localStorage — your selections persist across visits
    • Focus filter (Career/Marriage/Health/Wealth) still narrows house analysis
  75. RVA_MASTER: dasha/bhukti show DI-connected bhavas and houses

    • Each Mahadasha and Bhukti line now includes Dasha Influencer's bhava (whole-sign) and house (Placidus)
    • Shows the sign where the DI planet sits + strongest planet in that sign
    • Gives AI the house connections needed for timing and area-of-life predictions
  76. RVA_MASTER: Dynamic Natal Chart positions in AI prompt

    • Shows progressed positions of Ma/Me/Ju/Ve/Sa at start/end of range when they differ from natal
    • Su/Mo/Ra/Ke and cusps remain frozen per Dynamic Natal Chart Rule 1
    • Lists sign-change years within the selected range
    • Helps AI identify when dynamic planets have moved signs or flipped retro/direct
  77. RVA_MASTER: structured AI prompt with range filter and focus areas

    • RUN RVA_MASTER header signals AI this is a structured data prompt
    • Range picker (From/To year) + quick chips (5y/10y/60y/All) — filters dasha and progression to selected years only
    • Focus filter (Career/Marriage/Health/Wealth) narrows house analysis to relevant houses
    • Pre-computed capacity scores (Light/Perf/Res/Total) inline — AI interprets numbers instead of guessing
    • Dasha timeline range-filtered with capacity + DI scores per Maha/Bhukti period
    • Progression summary: year-by-year +/- score with top positive and negative aspect
    • Compact ~60-80 line format optimized for NotebookLM paste limits
    • House analysis includes Planet/Occ/Lord/Karaka yearly change sub-rows (range-filtered)
  78. KP Tables: consistent planet degrees across all tabs

    • KP Tables API was dropping seconds from birth time during local→UTC conversion
    • Increased planet degree precision from 2 to 6 decimal places in retrograde/analyze API
    • All tabs (Birth Chart, KP Tables, etc.) now show identical planet positions
  79. KP New ayanamsa: fix ~22-second planetary degree offset

    • KP New (NKPA) was using Swiss Ephemeris built-in Krishnamurti (KP Old) instead of the custom NKPA formula
    • Applied custom adjustment (Lahiri - NKPA) to all planet longitudes, house cusps, and outer planets
    • Fixed in birth-chart, retrograde/analyze, alan-leo, capacity/progression, ashtakavarga/transit-strength APIs
    • Degrees now match V1 XE Man reference software within 1-2 arc-seconds
  80. Alan Leo: slow planet star-lord follows raw retro, not degree

    • Ju/Sa/Ur in progression now keep their NATAL nakshatra when raw motion is Direct
    • Switch to progressed nakshatra only when the planet is physically retrograde
    • Degrees always take the progressed value (unchanged)
    • Fixes wrong Ra/Ke flip on Jupiter — e.g. 2029 Ju square Ma now scores -36 (was +36)
  81. AI Prompt: one-click chart export for LLM analysis

    • Floating AI bot button (bottom-right) copies a ready-to-paste chart summary to the clipboard
    • Includes D1 planets with sign, degree, nakshatra, pada, star lord, retrograde and bhava
    • Includes D9 Navamsha with position from the D9 ascendant
    • House Analysis scores with yearly progression changes (Occupant / Lord / Karaka / Total)
    • Full Mahadasha + Bhukti scorings with DI and R4 values
    • Alan Leo yearly progression aspects — choose 60 / 80 / 100 / 120 years on hover
    • Preamble + 7 interpretation prompts included so the LLM knows exactly what to analyse
  82. Dasha Bar: R4 scores + dasha planet scoring

    • Pulled R4 scores from the Rule 4 table in Dasha Bar
    • Score the dasha planet itself (not the star lord) in Dasha Bar
    • Default scores for the Dasha Influencer
  1. Lal Kitab — all six tabs (Horoscope, Debts, Remedies, Reports, Houses, Planets) now served locally

    • The last remaining VedicRishi dependency on /janam-kundali/ is gone. Built src/lib/lal-kitab.ts + POST /api/v1/lal-kitab/analyze (one endpoint, six kinds), reading Lal Kitab houses as the fixed Aries-based layout (house = sign).
    • Horoscope is now computed straight from the chart (planet placement by sign). Remedies ship a full 9-planet × 12-house dictionary (108 entries) authored from classical Lal Kitab. Debts uses explicit, auditable detection rules over the seven classical karmic debts instead of VedicRishi's hidden rule set.
    • Reports (which 404'd on our VedicRishi plan) is now a local composite — overview + placements + active debts + a headline remedy per planet. Houses (12) and Planets (9), previously plan-locked and unavailable, are authored fresh with classical significations and Pakka Ghar notes.
    • All six external-API (°) badges removed from the sidebar and tab headers; Houses & Planets tabs now canonical to their dedicated landing pages.
  2. Ashtakavarga — Sarvashtakavarga + per-planet Bhinnashtakavarga sections now served locally

    • Built src/lib/ashtakavarga-details.ts: applies the same Parashari Ashtakavarga rules table already used by /api/v1/ashtakavarga/transit-strength, but produces the contributor-breakdown matrix shape (rows: 12 signs, cols: 8 contributors = 7 planets + Ascendant) that the legacy `_ashtakGridHTML` renderer keys on. Sarvashtakavarga aggregates contributor cells across all 7 planet rules; per-planet Bhinnashtakavarga shows the single planet's rule applied to the natal positions of the 8 contributors.
    • Exposed as POST /api/v1/ashtakavarga/details with kind ∈ sarva | bhinna (+ planet for bhinna). Same `ashtak_points` shape the legacy VedicRishi proxy returned, so the existing renderer needs no changes beyond dropping the `.rva-vr-dot` 'data sourced from VedicRishi' indicator.
    • KundaliAPI.sarvashtak + planetAshtak now call the local endpoint. The two `.rva-vr-dot` indicators on these section headers are gone. /janam-kundali/ashtakavarga/ now runs end-to-end locally — no VedicRishi calls at all.
  3. Sadhesati Life Details — replaced VedicRishi proxy with local Saturn-transit walker

    • Built src/lib/sadesati-life.ts: walks Saturn across ~95 years from birth using the same calcVariantDPlanets / Swiss Ephemeris pipeline every other chart endpoint uses. Samples every 15 days, binary-searches each sign-boundary crossing to ~1-day precision, and emits an event whenever Saturn enters one of the three Sadhesati signs (12th from natal Moon = RISING, Moon sign itself = PEAK, 2nd from Moon = SETTING) plus a closing ENDING event when Saturn exits the 2nd.
    • Retrograde re-entries are captured — when Saturn retrogrades back across a sign boundary, that's a separate event flagged with is_saturn_retrograde so the renderer can show the (R) marker.
    • Exposed as POST /api/v1/sadesati/life. Response is the same DD-MM-YYYY-dated array of {date, type, moon_sign, saturn_sign, is_saturn_retrograde, summary} the legacy VedicRishi proxy returned, so the existing renderSadhesatiLifePage renderer needs no changes. The ° external-API badge on the tab is gone.
  4. Char Dasha (Current / Major / Sub) + Varshaphal Mudda Dasha — replaced VedicRishi proxies with local Jaimini engine

    • Built src/lib/char-dasha.ts (Jaimini Chara Dasha — Mahadasha + Antardasha + Pratyantardasha, all keyed off the Lagna sign and Karaka-counting rules) and src/lib/varshaphal-mudda.ts (Tajik Varshaphal Mudda Dasha — 12-year cycle anchored to solar return). Exposed as POST /api/v1/dasha/char (kind ∈ current | major | sub) and POST /api/v1/dasha/varshaphal-mudda, both gated by requireApiKeyOrSameOrigin like every other v1 endpoint.
    • KundaliAPI.charDasha + subCharDasha + varshaphalMuddaDasha now call the local endpoints. Response shape matches the legacy VedicRishi contract so the existing renderers in kundali-analysis.js consume them unchanged.
    • ° external-API badges removed from Current / Major / Sub / Sub-Sub Char Dasha and Varshaphal Mudda Dasha tabs + sidebar entries — they now reflect reality (no badge = local).
  5. Avastha — redesigned with intro, row guide and colour-banded scores

    • /janam-kundali/avastha/ now opens with a one-paragraph explainer — what the Five Classical States are, where they come from (Phaladeepika, Jataka Parijata), and how the 0–100 Total averages them.
    • Above the 5×7 matrix sits a 'Strongest → Weakest' chip strip — the seven planets ranked by Total score with their numeric value, so the dominant and depleted planets are visible at a glance.
    • Score cells are now colour-banded: green ≥75 (strong), amber 40–74 (moderate), red <40 (weak). The Total row uses a darker tint of the same band. Works in both light and dark themes.
    • Below the matrix a 5-card guide explains what each row measures (Baalaadhi maturity, Jagradadi wakefulness, Deeptaadi 9-fold dignity, Lajjitaadi mood-from-company, Shayanaadi 12 daily-life states) plus a legend of the score bands.
  6. Vimshottari Mahadasha — redesigned as 3×3 Bhukti grid

    • /janam-kundali/vimshottari-mahadasha/ now renders 9 mini-tables in a 3×3 grid (responsive: 2-col on tablet, 1-col on mobile). Each card has a 'Bhukti | From | To' header, a title row showing the Mahadasha planet and its date range, and 9 Antardasha rows inside.
    • Currently-running Mahadasha card gets a primary-tinted title row + 'NOW' pill; the active Antardasha row inside it gets a subtle tint + its own NOW badge. Replaces the previous flat 9-row table that only showed the 9 Mahadashas with no antardasha context.
    • Same /api/v1/dasha/vimshottari source — no extra fetch — the shared __vimSharedCache means switching between Mahadasha, Antardasha, Pratyantardasha, Sookshma, Praan tabs still hits the cache.
  7. Jaimini Chara Dasha (Current / Major / Sub / Sub-Sub) — replaced VedicRishi proxies with one local Parashari engine

    • Built src/lib/char-dasha.ts: pure-math Parashari/KN Rao variant. Sign order from Lagna is zodiacal when Lagna is in an odd sign (Aries / Gemini / Leo / Libra / Sagittarius / Aquarius), anti-zodiacal otherwise. Each sign's dasha duration = count of signs to its natural lord's current placement, minus 1, with the counting direction depending on sign type (movable & dual zodiacal, fixed anti-zodiacal). Lord in own sign = 12 years. Sub and sub-sub periods are 12 equal slices of the parent.
    • Exposed as one POST /api/v1/dasha/char with a `kind` discriminator (current | major | sub). The Current branch finds the active major + sub + emits 12 sub-subs; Major returns the 12 majors as an array; Sub returns the parent major + 12 sub signs for the requested sign. Same DD-MM-YYYY date format and field names (sign_id, sign_name, start_date, end_date, duration) the legacy renderer keys on. Sub-Sub Char Dasha is read from the Current response's sub_sub_dasha array — no extra round-trip.
    • KundaliAPI.charDasha and KundaliAPI.subCharDasha now call the local endpoint. Birth instant anchored as UTC epoch ms per the CLAUDE.md Dasha Pipeline rule. All four ° external-API badges (Current / Major / Sub / Sub-Sub Char Dasha + the parent Char Dasha collapsible) are gone.
  8. Varshaphal Mudda Dasha — replaced VedicRishi proxy with local Tajik engine

    • Built src/lib/varshaphal-mudda.ts: divides the current solar year (birthday → next birthday) into 9 Vimshottari-proportion lord periods (Ke 7, Ve 20, Su 6, Mo 10, Ma 7, Ra 18, Ju 16, Sa 19, Me 17 — total 120). Seed lord rotates with year-of-life: seed = lords[(age_years − 1) mod 9].
    • Exposed as POST /api/v1/dasha/varshaphal-mudda. Response keeps the legacy `dashas` array shape and adds `year_no`, `year_start`, `year_end` for the renderer to surface context. Birth instant anchored as UTC epoch ms (Dasha Pipeline rule). The ° external-API badge on the tab is gone.
  9. Numerology family — 7 tabs migrated to one local endpoint backed by Cheiro / Indian dictionaries

    • Built src/lib/numerology-readings.ts: 7 dictionaries (Number Report, Favourable Time, Favourable Place / Vastu, Fasts Report, Favourable Lord, Favourable Mantra, Year-Outlook Prediction), each with one paragraph per radical number 1–9, drawn from public-domain Cheiro / Indian Vedic numerology associations. Prediction uses the Destiny / Bhagyank number (sum of all DOB digits, reduced); the other six use the Radical / Moolank (day-of-birth digit, reduced).
    • Exposed as POST /api/v1/numerology/reading with a `kind` discriminator. Response is the same {title, description} shape the legacy VedicRishi proxy returned, so the existing _renderTitleDescCard renderer works as-is. All seven KundaliAPI.numero* helpers now call the local endpoint.
    • All seven ° external-API badges (Numerology Report, Favourable Time, Favourable Place, Fasts Report, Favourable Lord, Favourable Mantra, Numerology Prediction) are gone.
  10. Stale ° external-API badges stripped from already-local tabs (Daily Nakshatra, House Report, Sign Report, Ascendant Report, Puja Suggestion)

    • These five sub-pages were migrated to local engines in earlier commits (puja-suggestion 31ec7a02c, daily-nakshatra 2f1402661, ascendant-report 1ea984e61, house & sign report 76ab9eb44) but their sidebar / header badges were missed. Pure visual cleanup — the renderers were already calling local endpoints. No behavioural change.
  11. Sub Yogini Dasha — replaced VedicRishi proxy with local engine

    • Built POST /api/v1/dasha/sub-yogini: wraps the existing calculateYoginiDasha engine that already powers Current + Major Yogini, picks the period currently in progress as `major_dasha`, and emits its 8 sub-yoginis (the lib already computed Antar-yogini subPeriods for the active period) as `sub_dasha`.
    • Dates are formatted as DD-MM-YYYY in the chart's local timezone — matches what the renderer's `_parseApiDate` expects. Birth instant is anchored as UTC epoch ms (CLAUDE.md Dasha Pipeline rule), so Cloudflare Worker's UTC runtime doesn't drift Indian chart boundaries by ~5.5h.
    • KundaliAPI.subYoginiDasha now calls the local endpoint. Response shape ({ major_dasha, sub_dasha[] }) is unchanged so the existing _renderSubYoginiFromApi renderer works as-is. The ° external-API badge on the tab is gone.
  12. Numerology Table — replaced VedicRishi proxy with local Cheiro / Indian Vedic engine

    • Built src/lib/numerology-table.ts: Chaldean letter-value table for the name number, day-of-birth reduction for the Radical (Moolank), all-DOB-digits reduction for the Destiny (Bhagyank), and a 9-row lookup table for ruler / friendly / neutral / evil numbers and favourable color / day / god / mantra / metal / stone / substone per radical number. All standard Cheiro associations — no external text.
    • Exposed as POST /api/v1/numerology-table/calculate, gated by requireApiKeyOrSameOrigin like every other v1 endpoint. Accepts either {name, date} (v1 shape) or {name, day, month, year} (legacy shape).
    • KundaliAPI.numeroTable now calls the local endpoint instead of /api/janam-kundali-legacy/vedicrishi. Response shape unchanged ({ destiny_number, radical_number, name_number, radical_ruler, friendly_num, neutral_num, evil_num, fav_color, fav_day, fav_god, fav_mantra, fav_metal, fav_stone, fav_substone }) so the existing _renderNumeroTableCard renderer works as-is. The ° external-API badge on the tab is gone.
  13. Stale ° external-API badges removed from already-local tabs (Jaimini Karakas, Sun Sign Prediction, Biorhythm, Moon Biorhythm)

    • These four sub-pages were migrated to local engines earlier but still carried the ° badge in the sidebar and page header — purely cosmetic confusion, no behavior change. Badges now reflect reality: ° means the renderer still calls VedicRishi, no badge means local.
    • Also dropped the dead jaiminiDetails helper from public/janam-kundali/js/api-client.js — it was never called after the renderer migrated to compute karakas directly from /api/v1/chart/birth.
  14. Planet House Report + Planet Sign Report — replaced both VedicRishi proxies with local content tables

    • Built src/lib/planet-house-report.ts and src/lib/planet-sign-report.ts: two hand-authored 9 × 12 = 108-entry tables (one per report, 216 readings total) covering each of the 9 Vedic planets (Sun → Ketu) placed in each of the 12 Bhavas / Rashis. Each entry is a single classical paragraph in Phaladeepika / Saravali tone — placement nature (auspicious / challenging / mixed), expression in the bhava's domain, behavioural and material signature, and a short remedial pointer where the placement is strained.
    • Sign-report entries use the planet's actual dignity in the sign (exalted / debilitated / own / friend / neutral / enemy) as the spine, so Sun-in-Aries reads as the exalted king while Sun-in-Libra reads as the debilitated one — and each entry adds the sign's elemental and modal qualities (fire/cardinal etc.) on top.
    • Exposed as POST /api/v1/house-report/analyze and POST /api/v1/sign-report/analyze, both gated by requireApiKeyOrSameOrigin like every other v1 endpoint. Same chart pipeline (normalizeChartInput + computeChart); the planet's house / sign is read off chart.planets[Planet].house / .sign which the pipeline already sets.
    • KundaliAPI.houseReport and KundaliAPI.rashiReport now call the local endpoints instead of /api/janam-kundali-legacy/vedicrishi. Response shape is unchanged ({ house_report } and { rashi_report } single-paragraph fields), so the existing renderer in kundali-analysis.js works as-is and the ° external-API badge on both tabs is gone.
  15. Ascendant Report — replaced the VedicRishi proxy with a local rising-sign engine

    • Built src/lib/ascendant-report.ts: a structured data table for all 12 rising signs (Aries → Pisces), ported faithfully from the existing /<sign>-ascendant/ SEO landing pages so the wording stays consistent across surfaces. Each card contains intro paragraph, element/quality/ruler, strengths/weaknesses, favorable colors, lucky numbers, two functional benefics with their house-rulership rationale, two functional malefics with the same, four hand-picked yogas with descriptions, and dasha guidance.
    • Chart-aware overlay: the API now also reports the dignity of the Ascendant lord plus the four functional benefics/malefics in this specific chart — exalted, own sign, debilitated, or neutral — and writes a one-line framing ("Your Ascendant lord Jupiter is exalted in Cancer (5H) — an unusually strong start"). The full per-placement reading still lives on the strongest-planet and planet-capacity pages; this is a soft hint, not a replacement.
    • Exposed as POST /api/v1/ascendant-report/analyze, gated by requireApiKeyOrSameOrigin like every other v1 endpoint. Same chart pipeline (normalizeChartInput + computeChart). Response keeps the legacy { asc_report: { ascendant, report } } fields so the rollout is safe, and adds base / keyPlanets / chartAwareNote for the rich renderer.
    • KundaliAPI.ascendantReport now calls the local endpoint instead of /api/janam-kundali-legacy/vedicrishi. The renderer in kundali-analysis.js was rebuilt to show the sign attributes grid, ruler + functional planets table with dignity badges, separate benefic/malefic cards, the yoga grid, and the dasha note — instead of the single paragraph the VedicRishi proxy used to return. The ° external-API badge on the tab is gone.
  16. Puja Suggestion — replaced the VedicRishi proxy with a local dosha + dasha engine

    • Built src/lib/puja-suggestion.ts: a single composer that runs the four classical detectors (Kala Sarpa, Sadhesati, Manglik with 4-rule cancellation, Pitra Dosha) plus three richer triggers — Gandanta birth (Revati↔Ashwini / Ashlesha↔Magha / Jyeshtha↔Mula in the last/first 2 pada), debilitated natal planets, and the currently-running Vimshottari Mahadasha + Antardasha lords if they are debilitated or in 6/8/12.
    • Each trigger maps to a hand-curated puja card with deity, kshetra, one-line essence, summary, and muhurta hint — so a Saturn Mahadasha with peak Sadhesati surfaces Shani Shanti at Thirunallar with the Saturday Krishna-Ashtami muhurta, not a generic line. Three universal baseline pujas (Navagraha, Mahamrityunjaya, Rudrabhishekam) are always appended at priority 1.
    • Exposed as POST /api/v1/puja-suggestion/analyze. Same chart pipeline as every other v1 endpoint (normalizeChartInput + computeChart), transit Saturn from calcVariantDPlanets at noon-in-birth-tz, current dasha lords via findCurrentDasha — UTC-anchored birth instant per the Dasha Pipeline contract in CLAUDE.md.
    • KundaliAPI.pujaSuggestion now calls the local endpoint instead of /api/janam-kundali-legacy/vedicrishi. The renderer in kundali-analysis.js is unchanged (same { summary, suggestions[{priority,title,one_line,summary}] } shape). The ° external-API badge on the tab is gone.
  17. Daily Nakshatra Prediction — replaced the VedicRishi proxy with a local Tara Bala engine

    • Built src/lib/daily-nakshatra.ts: classical Tara Bala (Tarabalam) math — count from natal Moon nakshatra to today's transit Moon nakshatra, then mod 9 to one of the 9 Taras (Janma, Sampat, Vipat, Kshema, Pratyak, Sadhaka, Vadha, Mitra, Ati-Mitra). Each Tara × 6 domains = 54 hand-written prediction strings.
    • Exposed as POST /api/v1/daily-nakshatra/daily, gated by requireApiKeyOrSameOrigin like every other v1 endpoint. Natal Moon comes from normalizeChartInput + computeChart; transit Moon at noon-in-birth-tz via calcVariantDPlanets — the same pipeline every chart endpoint uses.
    • Header card now shows which nakshatra the Moon is transiting today, which Tara from janma that is (1/9 to 9/9), and a one-line essence — so the page tells you whether the day is Vadha (defer, protect) vs Ati-Mitra (green-light) instead of just a generic six-card grid. The ° external-API badge on the tab is gone.
  18. Jaimini Karakas — replaced the VedicRishi proxy with a local sidereal calculation

    • The tab was erroring/blank because AstrologyAPI's jaimini_details endpoint isn't on the current plan; every load 405-ed and the page rendered an error card.
    • Now computed directly from /api/v1/chart/birth: the 7 Chara Karakas (AK→DK) are assigned by descending degree-within-sign across Sun/Moon/Mars/Mercury/Jupiter/Venus/Saturn (Parashari 7-planet scheme). Jaimini Lagnas are derived locally too — Janma from the ascendant sign, Pada Lagna as Arudha-1, Upa Pada as Arudha-12 (with the 'lord in 1st/7th → 10th from there' adjustment), and Karakamsa as the Atma Karaka's navamsa sign.
    • The ° external-API badge stays for now — happy to drop it once you've eyeballed a few charts and confirmed the values match what you expect.
  19. Moon Biorhythm (Pancha Pakshi) — replaced the VedicRishi proxy with a local Pancha Pakshi engine

    • Built src/lib/moon-biorhythm.ts with the standard Tamil Pancha Pakshi tables: birth bird from Moon nakshatra + birth paksha, Sukla/Krishna reversal, day & night activity cycles split into 5 yamas each.
    • Exposed it as POST /api/v1/biorhythm/moon, gated by requireApiKeyOrSameOrigin like every other v1 endpoint. Birth Moon/Sun longitudes come from the normalizeChartInput + computeChart pipeline, sunrise/sunset/next-sunrise from pickLocalDayEvents so high-latitude UTC roll-over is handled the same way /api/v1/hora handles it.
    • KundaliAPI.moonBiorhythm now calls the local endpoint instead of /api/janam-kundali-legacy/vedicrishi. The ° external-API badge on the tab is gone.
  20. Sun Sign Prediction — switched from AstrologyAPI to the in-house horoscope engine

    • The Sun Sign Prediction tab on /janam-kundali/ no longer calls VedicRishi / astrologyapi.com. It now reads from /api/v1/horoscope (the same engine that powers the /horoscope/ landing page and the per-sign daily/monthly/yearly pages), computed from live planetary transits.
    • Same 6-card layout (Health, Emotions, Profession, Luck, Personal Life, Travel) — KundaliAPI.sunSignDaily maps our 6 in-house domains (health, spiritual, career, finance, relationships, overall) into those cards.
    • The external-API badge has been removed from the tab title now that the data is generated locally.
  21. Biorhythm — wrapped the calculation in a new in-house API endpoint

    • Promoted the local biorhythm math into a reusable lib (src/lib/biorhythm.ts) and exposed it as POST /api/v1/biorhythm/daily, gated by requireApiKeyOrSameOrigin like the other v1 calculation endpoints.
    • The Biorhythm tab on /janam-kundali/ now calls that endpoint via KundaliAPI.biorhythm, with a cache key that includes today's date in birth-tz so readings refresh automatically after midnight.
    • Endpoint is now discoverable in /admin/api-docs/openapi/ and reusable by any third-party caller without scraping the page.
  22. Biorhythm — switched from AstrologyAPI to a local sine-wave calculation

    • The Biorhythm tab no longer calls an external API. The three classical cycles (Physical 23 days, Emotional 28 days, Intellectual 33 days) and their composite Average are computed in-house as sine waves on the day count since birth.
    • Day count is anchored to the chart's birth timezone, so the reading is correct regardless of the viewer's timezone or the Cloudflare Workers UTC runtime.
    • Layout updated to include per-cycle descriptions alongside today's value and trend (improving / degrading / stable), and the AstrologyAPI badge has been removed.
  23. Planet Positions — removed "R" tag from Rahu and Ketu

    • Rahu and Ketu are the lunar nodes and are retrograde by definition, so flagging them with the same R badge used for ordinary planets was noise rather than information.
    • The Status column still shows them as "Shadow", which is the relevant distinction; the R badge now appears only when one of the seven actual planets (Mars, Mercury, Jupiter, Venus, Saturn) is in retrograde motion.
  24. Sub Sub Char Dasha — fixed "Failed to load (HTTP 404)"

    • Page was calling a dedicated sub_sub_chardasha/<major>/<sub> upstream endpoint that isn't part of the active AstrologyAPI plan, so the request 404'd every time.
    • current_chardasha already returns the active sub_sub_dasha array, so the page now reads from that response directly — same data, one fewer round trip, and the cache is shared with the Current Char tab.
  25. Vimshottari Praan — page now shows data (was "No Praan periods returned")

    • Renderer was reading p.start_date / p.end_date but the upstream sub_sub_sub_sub_vdasha endpoint returns p.start / p.end, so every row formatted as a blank cell and the table fell back to the empty state.
    • Now reads start_date || start and end_date || end (and unwraps a response envelope if present), and passes capital-cased planet names (Ketu/Venus/...) on the URL to match the upstream provider's case-sensitive routing.
  26. Vimshottari Mahadasha — capped to one 120-year cycle (was repeating 2 extra cycles)

    • The /api/v1/dasha/vimshottari endpoint was returning 1 partial + 18 full mahadashas (~240 years), so /major-vimshottari/ and /vimshottari-all-levels/ both showed each lord 2-3 times.
    • Now returns the conventional 9 periods: balance of birth lord + 8 full mahadashas, covering one complete 120-year Vimshottari cycle from birth.
  27. All dasha pages — full DD Mon YYYY date format

    • Vimshottari (All Levels, Major), Yogini (Current, Major), Praan, Sub-Yogini, and Char Dasha rows previously rendered endpoints as 'Mon YYYY' or 'Mon DD, YYYY'; sub-period dates collapsed when both endpoints fell in the same calendar month (e.g. 'May 2026 → May 2026').
    • Every dasha page now renders 'DD Mon YYYY' consistently so the date range stays distinguishable at every depth.
  28. Console — silenced "Settings button or panel not found!" error

    • Legacy fallback handler in settings-enhancement.js was looking for the old #settings-btn id (still used by the dynamic-natal-chart toolbar) and logging an error on every Janam Kundali page, where BirthDataFormBar uses #rva-settings-btn instead.
    • Now returns silently when the legacy elements aren't on the page — the actual settings toggle is wired by rva-engine.js to the new id and was always working.
  29. Current Vimshottari Dasha — full DD Mon YYYY at every level

    • Mahadasha / Antardasha / Pratyantardasha rows previously formatted endpoints as 'Mon YYYY', so a Pratyantar period that started and ended in the same month showed 'May 2026 → May 2026' with no day visible.
    • All five rows now render 'DD Mon YYYY' (Praan keeps the trailing HH:MM) so the date range stays distinguishable at every depth.
  30. Planet Positions — Rahu and Ketu now show the R (retrograde) tag

    • Rahu and Ketu are mean lunar nodes and always move retrograde, so the R tag is now forced for both regardless of what the API flag returns.
  31. Current Vimshottari Dasha — added 5th level (Praan)

    • Page now shows all five levels: Mahadasha → Antardasha → Pratyantardasha → Sookshma → Praan.
    • Praan is computed client-side from the active Sookshma so the API response stays the same size.
    • Sookshma row now shows 'DD Mon YYYY' and Praan shows 'DD Mon YYYY HH:MM' so the short date ranges are readable.
  32. Dasha bar — DI capacity scores now match /rva-softwares/

    • Mahadasha header shows the colored DI capacity badge (and a second badge for the bukthi when different).
    • Each antardasha box now shows its bukthi DI capacity score with the same color scale (green/amber/orange/red).
    • R4 rule: when the Dasha Influencer comes from Rule 4, the score uses the R4 capacity table and is tagged with a purple R4 badge.
    • Lazy-loaded: the retrograde/analyze + 6-step capacity chain only fires when the Dasha widget actually scrolls into view, so users who don't open the dasha section pay nothing.
  33. Nakshatra pada in table, varga charts show only 1st cusp

    • Planet Positions: Nakshatra column now displays 'Name - Pada' (e.g. 'Rohini - 2') so the pada is visible alongside the nakshatra.
    • Varga (D2–D60) charts now display only the 1st house cusp (ascendant) like /rva-softwares/, not all 12 cusps — other cusps aren't meaningful in divisional charts.
  34. Varga charts client-side, D9 default, dasha cache key fix, reference tables

    • All divisional charts (D2-D60) now computed client-side from natal data — ported rva-softwares vargaCalcs; previously only D9/D10 had formulas, all others returned natal positions unchanged.
    • Right-side chart defaults to D9 Navamsha instead of Transit Chart.
    • Dasha bar cache key validation added — switching to a different birth chart no longer shows the previous person's dasha data.
    • Panchang bar items spread evenly across full width on expanded desktop layout.
    • Reference tables added below Planet Positions (Signs, Houses, Planets) as collapsible accordions to help read the horoscope.
  35. Panchang NaN:NaN times, right chart defaults to Transit, toolbar moved into panchang bar

    • Panchang bar: sunrise/sunset/moonrise/moonset now show correct HH:MM — msToTimeStr rewritten using Date object to handle IANA timezone strings (parseFloat of 'Asia/Kolkata' was NaN causing integer overflow).
    • Right chart now defaults to Transit Chart instead of D9 Navamsha on initial load.
    • Chart type labels ('Natal Chart', 'Transit Chart') update dynamically when the chart select changes.
    • Sidebar toggle button moved inside the panchang bar (eliminates the separate toolbar row that was consuming vertical space).
    • Sidebar toggle uses event delegation so it works after dynamic DOM injection.
  36. Charts page: complete overhaul — dasha widget, progression, transit, share, polish

    • Dasha Timeline — rva-softwares style antardasha widget (nav buttons, expandable bukthi boxes, year timeline) on Charts page.
    • Current bukthi highlighted in green; prev/next mahadasha navigation; correct highlighting when navigating.
    • Alan Leo western progression bar chart replaces Gantt; year-range control (+/- 10yr, All) to zoom any life period.
    • Transit Ashtakavarga line chart from /api/v1/ashtakavarga/transit-strength with year +/- control.
    • D9 Navamsha now renders correctly as default right-side chart (was showing transit despite D9 selected).
    • Left/right chart selects now functional — choosing any divisional chart (D1–D60) loads and draws it.
    • Planet Positions table fully dynamic from API data; nakshatra column fixed (was [object Object]).
    • Sade Sathi status card (Rising/Peak/Setting/Not Running) computed from transit Saturn vs natal Moon.
    • Panchang cards updated to Gatsby accent-border style (4px colored top stripe, white bg, border).
    • Share link button in toolbar — creates 90-day KV link; ?share= auto-fills and submits the form.
    • Removed redundant 'Birth Charts & Divisional Charts' heading; renamed 'Dasha Timeline & Analysis' to 'Dasha Timeline'.
  37. Mobile birth form readability

    • Widened mobile date field so 'dd-mm-yyyy' shows in full
    • Shrunk Name field so Date and Time stay readable side-by-side
  1. Vimshottari Dasha — 5 levels (Maha → Antar → Pratyantar → Sookshma → Prana)

    • Sookshma rows are now expandable to a 5th Prana level (purple), matching /rva-softwares/.
    • Prana periods are derived client-side from each Sookshma's span — no extra API payload.
  2. Move House — chart now reflects rotated ascendant

    • Clicking M·N (Move House) rotated the planet/cusp tables but the chart kept showing the original ascendant. Chart now redraws with the rotated cusps and planet houses so the Roman numerals (I, II, …) move with the selection.
  3. Slug changed from /kp-horary/ to /kp-softwares/

    • Page moved to /kp-softwares/ — old /kp-horary/ URL redirects (301) to the new slug.
  4. Print report, Move House button, panchang restyled to match /rva-softwares/

    • Print Report: new 🖨 Print Report link at bottom of results opens a formatted A4 print modal (chart + 4 KP tables). Ctrl+P shortcut supported.
    • Move House: removed from settings panel; new 'M' button before settings icon opens popup with house 1-12 selection. Button shows M·N when active. Resets to Original.
    • Panchang bar: redesigned to match /rva-softwares/ exactly — bigger icons, label on top (muted), value bold below, violet/blue/yellow/orange icon colors.
    • Sign names use 2-letter abbreviations (Ar/Ta/Cn/Le etc.) in all KP tables.
    • Su, Mo, Ra, Ke no longer show [R] retrograde marker.
  5. All KP tables + aspects restyled to match /rva-softwares/ exactly

    • 4 KP tables (Planets, House Cusps, Significators Planet/House): restyled with white rounded-xl panels, slate-50 thead, hover rows, colored lord columns (blue/purple/orange/pink/teal) matching /rva-softwares/ exactly.
    • Planet Aspects grid: each cell now shows aspect symbol + (A)/(S) status on line 1 and exact orb° on line 2.
    • House Aspects grid: now computes actual western aspects between planet degrees and house-cusp degrees client-side.
    • Western Aspects list: flat list restyled with white panels, slate-50 headers, hard aspects in red.
  1. Default place — Bangalore for both Groom and Bride

    • Groom default place changed from Hyderabad to Bangalore.
    • Bride default place changed from Vijayawada to Bangalore.
  2. Default birth-time fields to current local time

    • Groom + Bride time fields now pre-fill with the visitor's current HH:MM:SS on page load, so the form is usable immediately without typing a time.
    • Only fills when the input is empty — shared links and ?boy_time= / ?girl_time= URL prefills still win.
  3. Western column — new display order

    • Order: Malefics Pressure → 5yr Progressions → Balance of Aspects → Marriage Yoga & Retrograde → Family Attachment → Exchange of Views → Bond → Attraction → Male Female Planets → Finding Partner Moon → Dasha Significance → Transits → 7th Uranus → Rahu and Ketu → Chance of Marriage.
    • Print/summary rows kept in sync with the on-screen column order.
  4. Western factors — rebuilt 4 logic factors + reordered display

    • 7th Uranus: gated on whole-sign 7th-house presence — if neither chart has Uranus in 7th, auto 5/5; otherwise the existing aspect-strength check runs.
    • Bond: tier-based scoring (Trine-weighted matrix). Both cross-pairs (Su→Mo, Mo→Su) hit + both Trine = 7; mixed/non-Trine = 5; one cross + Trine = 4; one cross + other = 3; same-planet only = 2. Same-planet hits add bonus on top (capped 7). 6/8 sign axis (Shashtashtaka) on any Sun/Moon pair = 0 override.
    • Chance of Marriage: replaced same-sign/element-tally logic with connection-set similarity per house 1-12. Per house, the house lord + occupants build a 'connection set' of houses touched via placement, 7th aspect, special aspects (Mars 4/7/8, Jup 5/7/9, Sat 3/7/10), planets aspecting them, and their star lords' full channels. Each house worth 5/12 if groom's and bride's sets share ≥1 house. 7th house highlighted in calc.
    • Dasha Significance: replaced birth-nakshatra friends/same logic with Dasha Flow at marriage date. Runs Vimshottari to find Maha + Antar (Bhukti) lord at the marriage date (today if missing), applies 4-Rule effective-lord system (R1/R1P/R2/R3/R4/Default); R4 → uses single occupant's house directly (100%), else planet 25% + star lord 75%. Positive houses {1,2,3,4,5,7,9,11} — if any signified → positive. Both lords positive = 2.5; one = 1.0; none = 0.
    • Display reorder: Marriage Yoga & Retrograde → Family Attachment → Exchange of Views → Bond → Attraction → Male Female Planets → Finding Partner Moon → Dasha Significance → Transits, then remaining factors after.
  5. Transits factor — Jupiter & Saturn now compute when marriage date is set

    • Frontend now sends marriageDate + ayanamsha to /api/v1/matching/western (was missing, so the backend always saw an empty date).
    • Backend now computes transit Jupiter & Saturn at noon UTC on the marriage date via Swiss Ephemeris (matching natal ayanamsha) instead of hardcoding transitPlanets=undefined.
    • Result: J-1..J-6 and S-1/S-2 (MSP/SMP) checks now run and score; the 'No marriage date or transit data available' message only appears when no date is entered.
  6. Moon Vedic card — split into 'Ashtakoot Scoring' and 'Other Moon Scoring' groups

    • Added two sub-headings inside the Moon Vedic column: the classical 8-koot factors (Varna…Nadi, /36) and the extra Moon-based factors (Rajju…Moon Ashtakavarga, /14) are now visually grouped.
    • Each heading shows its running subtotal so users can see how the 50-point Moon Vedic score breaks down.
  7. Marriage Yoga — house analysis scoring (rule4-weighted)

    • Replaced the old 3-rule Venus/7th-lord-kendra/Jupiter+Venus check (max 3) with house analysis scoring driven by /api/v1/capacity/planet houseAnalysis.
    • Per person: H7×0.75 + avg(H2,H5)×0.25 using each house's effective-planet capacity score (rule4-weighted, resolved via powerful-planet/RP/R2/R3/R4 chain).
    • Gate: H7 effective-planet score must be ≥ 40 in BOTH charts; otherwise the yoga score is 0.
    • Combined display 'Marriage Yoga & Retrograde' = marriageYoga (max 10) + 7th-lord retrograde (max 6) = 16.
    • API: /api/v1/capacity/planet now also returns houseAnalysis per requested mode (?modes=rule4 → data.modes.rule4.houseAnalysis), and ?houseAnalysisMode=<mode> overrides the top-level houseAnalysis with that mode's reweighted result.
  8. Balance of Aspects + 7th Uranus — weighted cross-chart aspect scoring

    • Replaced 'Negative Aspects' factor with 'Balance of Aspects': weighted natal + cross-chart aspects for all 8 planets (SU/MO/MA/ME/JU/VE/SA/UR). Benefic-benefic negative aspects score +1 instead of full penalty.
    • G_Result = natal_groom[planet] + compare_groom_to_bride[planet]; threshold ≥ -10 passes. Score = (G_pass + B_pass) / 16 × 20.
    • 7th Uranus factor rewritten with same weighted methodology — Uranus natal + cross-chart strength scored; each side ≥ -10 threshold gives 2.5 pts (max 5).
  9. All 42 Kundali Matching concept pages — complete rule library

    • Created 41 dedicated concept pages covering all Vedic, extended South Indian, and Western synastry matching rules (#1–42).
    • Pages: /dina-kuta, /gana-kuta, /yoni-kuta, /rashi-kuta, /graha-maitri, /rajju, /vedha, /vashya, /mahendra, /stree-deergha, /varna-kuta, /nadi-kuta, /moon-hemmed, /moon-associates, /astakavarga-matching, /kuja-dosha, /malefics-matching, /ascendants-match, /ascendant-lords, /seventh-houses, /seventh-lords, /eighth-lords, /eight-planets-matching, /ascendant-moon, /venus-mars, /venus-position, /attractions-synastry, /exchange-of-views, /bondage, /family-attachment, /bad-aspects, /position-malefics, /five-year-progressions, /transits-rule, /individual-marriage-yoga, /seventh-uranus, /seventh-lord-retrograde, /similar-combinations, /dasha-significance, /male-female-planets, /rahu-ketu-match.
    • Shared CSS (kuta-concept.css) for all pages: meta card, varna badges, compatibility tables, example blocks, callouts.
    • All 42 sidebar entries updated from hash anchors to dedicated page URLs.
    • Old /concepts/kundali-matching/varna-kuta page removed.
  10. Dasha heading colors — groom purple, bride pink to match print design

    • Groom 'Current Dasha' heading now uses brand purple (#7c3aed) matching the print report, was dark navy (#1d4ed8).
    • Bride heading keeps pink (#be185d).
  11. Fix calculation — apiSuccess meta optional + .ok/.success mismatch

    • apiSuccess() meta parameter made optional so section APIs (moon-vedic, other-vedic, western) can call it without chart-level meta.
    • Frontend now checks response.ok instead of response.success to match the ApiResponse envelope schema.
  12. Fix 'Cannot read ayanamsha' crash on chart calculation

    • Removed unused chart.meta.ayanamsha read in calc-service.ts that threw when chart meta was momentarily undefined.
    • Added optional chaining (chart.meta?.julianDay) for defensive safety throughout computeChart.
  13. Fix 500 error on calculate — tz field normalization + real error messages

    • charts.ts API now maps tz → timezone so frontend timezone values are correctly parsed.
    • Frontend now reads the JSON error body before throwing, showing the actual server error instead of a generic HTTP 500 message.
    • Section API calls (moon-vedic, other-vedic, western) isolated — updating one rule cannot affect others.
  14. Birth chart style matched exactly to RVA Software

    • Background color changed from #ffffdc to #fefddc (cream match).
    • Planet text: 13px (was 12px), normal weight, orange house cusps rgb(255,87,34) (was red).
    • Center info block: left-aligned at x=106 with clip-path, 27px line spacing, timezone added.
    • Sort order: ascending for Aries–Virgo signs, descending for Libra–Pisces (matches rva-engine).
    • Compact mode (>6 items): houses 1-per-line, planets 2-per-line at 11px with DD:MM format.
    • North Indian chart: updated colors and positions to match RVA Software layout.
  15. Print report redesign — black badges, Vedic combined, Rasi/Nakshatra/Charan mid-section

    • Score badges changed from purple to black; Final Score badge now blue.
    • Scores section: 3 badges (Astakoot, Vedic combined, Western) + Rasi/Nakshatra/Charan middle + large Final Score.
    • Vedic badge shows combined Moon Vedic + Other Vedic score out of 100.
    • Header table: Nakshatra, Rasi, Charan in separate columns; Marriage Date replaces Manglik.
    • Factor table columns renamed: S.No / Points / Scored (was # / Max / Score).
  16. One-page A4 print report — dynamically built from live chart data

    • Print FAB (bottom-right) generates a compact A4 portrait page on demand.
    • Header table: groom/bride names, birth date, time, nakshatra, manglik status.
    • Score banner: Ashtakoot, Moon Vedic, Other Vedic, Western, Overall, Grade.
    • Three factor tables (Moon Vedic / Other Vedic / Western) in a 3-column grid.
    • Both natal charts cloned as SVG side-by-side; current Dasha (Maha / Antar) below.
    • Life graph captured from live canvas as PNG and included at foot of page.
  17. Share icon disabled until Submit; 60-day Alan Leo graph; charts always one horizontal line

    • Share button now visible but grayed-out before Submit, enabled after calculation.
    • Share button repositioned: after Translate icon, before Gear+Submit.
    • Alan Leo graph reduced to 60 data points (was 120) for faster rendering.
    • Charts always stay on one horizontal line (flex nowrap + SVG scales within container).
  18. Chart.js local, sticky print FAB, charts closer, progression labels cleaned up

    • Chart.js served locally (was CDN — caused 'Chart is not defined' when CDN blocked).
    • Print button moved to sticky FAB at bottom-right corner.
    • Progression tabs: removed 'GROOM/BRIDE NATAL CHART' subtitle text.
    • Charts layout changed to flex-centered — natal and progressed charts closer together.
  19. South/North toggle, centred tab buttons, dasha design, date alignment, Alan Leo auth fix

    • South / North Indian chart style toggle button added to Charts & Dasha header.
    • Print button added (Ctrl+P also works) — all chart panels visible in print.
    • Tab buttons (Birth, Groom Progression, Bride Progression) centred.
    • Dasha Antardasha card now has a distinct purple left-border accent.
    • Marriage date field aligned with Bride row controls (same place-field width).
    • Alan Leo API auth: Referer header accepted as fallback when browser omits Origin.
  20. Marriage date field, nakshatra below names, progression +/− year control, dasha design, closer charts

    • Marriage date picker added to Groom row in the form bar.
    • Nakshatra / moon sign info moved to sit directly below couple names in summary bar.
    • Progression year control replaced with styled − / + buttons (like RVA Software).
    • Current dasha redesigned to single-line 'Mahadasha - Planet date to date' style.
    • Charts gap reduced so natal and progressed charts appear side-by-side more compactly.
    • Alan Leo graph error handling improved; credentials and timezone fallback fixed.
  21. Full report UI: birth charts, Vimshottari dasha bars, Vedic & Western score columns, life graphs

    • Charts & Dasha section placed above score columns.
    • Dasha bars (groom + bride) rendered below birth charts using dasha-timeline component.
    • 3 score columns: Moon Vedic (50pts), Other Vedic (50pts), Western (100pts) with A/B/C/D grade badges.
    • Life graph shows progressed aspect scores age 0–70 for both partners.
    • Planetary Positions section removed.
  1. Panchaka Rahitam + Chandra Balam — filter now actually works

    • Both filters existed in the drawer for weeks but the calculator never set the corresponding fields on slot results — selecting any panchaka category silently filtered out every slot. Now every slot is labelled with the correct panchaka (1 of 6) and Chandra Balam (Yes / No).
    • Panchaka uses B. V. Raman's classical 4-factor formula: (tithi # + weekday # + nakshatra # + lagna #) mod 9 — remainders 3/5/7/0 = Rahitam, 1/2/4/6/8 = Mrityu/Agni/Raja/Chora/Roga. Worked example: Anuradha + Panchami + Wed + Scorpio = 34 → 34 mod 9 = 7 → Rahitam.
    • Chandra Balam = Moon not in 6th, 8th or 12th rashi from the native's Janma Rashi (per Raman). Previously the docs page used the 4/8/12 rule; corrected to 6/8/12 to match the source.
    • Slot detail card now shows the Panchaka category and Chandra Balam state as labelled rows; CSV export gained the two columns.
    • Docs pages /muhurat-panchaka-rahitam/ and /muhurat-chandra-balam/ rewritten with the correct formulas, worked examples, and per-event exception rules (occupation → avoid Raja; house-building → avoid Raja+Agni; travel → avoid Chora; marriage → avoid Roga+Mrityu).
  2. Documentation — 19 concept pages added at /muhurat-calculator-introduction/

    • New docs section mirrors the kundali-matching docs pattern: a single Introduction page plus one page per filter concept, all sharing a left-rail sidebar and a TOC.
    • Coverage: Panchaka Rahitam, Tarabalam, Nakshatras, Ascendants, Placements, plus the 8 Panchanga sub-pages (Varam, Tithi, Yoga, Karana, Masam, Mrityu Tithi, Sunya Tithi, Chandra Balam) and the 5 Kalam sub-pages (Abhijit Muhurta, Brahma Muhurta, Rahu Kalam, Yamaganda, Gulika Kalam).
    • Each concept page explains what the filter does, the classical rule it implements, the three-or-more state options (Yes / No, Mrityu / Regular / Siddha, etc.), and which selections to make for common acts (marriage, housewarming, vehicle, business).
    • Slugs are namespaced under /muhurat-* to avoid collision with general nakshatra / ascendant / yoga pages.
  3. Nakshatra panel — no more horizontal scrollbar; 3-month default range

    • Nakshatras chip popover used to overflow horizontally on desktop because long labels like "Uttara Bhadrapada" forced the 4-column grid past the popover width. Popover widened to 500px and grid items now allow shrinking so the labels ellipsize cleanly — scrollbar is gone.
    • Date range default extended from today + 30 days to today + 60 days, so the picker opens with 3 calendar months of coverage instead of 2.
  4. Suitability dots on every filter option

    • Each option in the filter popovers / drawer now has a small colored dot between the checkbox and the label — green = recommended, yellow = average / conditional, red = avoid.
    • Marriage purpose: 11 nakshatras green (Rohini, Mrigashira, Magha, Uttara Phalguni, Hasta, Swati, Anuradha, Mula, Uttara Ashadha, Uttara Bhadrapada, Revati), 10 yellow (Ashwini, Bharani, Krittika, Punarvasu, Pushya, Chitra, Vishakha, Shravana, Dhanishta, Purva Bhadrapada), 6 red (Ardra, Ashlesha, Purva Phalguni, Jyeshtha, Purva Ashadha, Shatabhisha).
    • Dots react to the Purpose select (Marriage / House Warming / Business) — switching purpose re-colors the open drawer / popover. House Warming + Business classifications are placeholders (everything yellow) until we add their tables.
  5. All Filters drawer — reorganized into 7 logical sections

    • Section order (top to bottom): Rahitam · Tarabalam · Nakshatras · Ascendants · Placements · Panchanga · Kalam.
    • Rahitam now holds just Panchaka Rahitam — the cleaner, focused single-item section it was meant to be.
    • Panchanga gained 3 tithi-flavor refiners that previously hid inside Rahitam: Mrityu Tithi, Sunya Tithi, Chandra Balam. Order: Day (Varam) → Tithi → Yoga → Karana → Masam → Mrityu Tithi → Sunya Tithi → Chandra Balam.
    • New Kalam section gathers the 5 time-window switches: Abhijit Muhurta · Brahma Muhurta · Rahu Kalam · Yamaganda · Gulika Kalam. "Prefer only" toggles come first; "Skip slots inside" toggles after.
    • Dropped the small "Refine your Muhurta search parameters." subtitle from the drawer header — the title says it all.
  6. Placements — now starts unchecked, same as every other filter

    • The 9 × 12 Planet Placements grid used to load with all 108 cells pre-checked. Now every cell starts blank — check the (planet, house) cells you want to require, leave the rest empty for no constraint.
  7. Tarabalam, Rahitam, Nakshatra — filter UI polish

    • Tarabalam now starts with everything unchecked, matching every other filter. Earlier it had all 9 Tara types pre-checked which was confusing.
    • Rahitam chip badge no longer shows a phantom '3' before the user touches anything — the Rahu Kalam / Yamaganda / Gulika switches were being counted as active in their default state.
    • Nakshatra picker now shows the ruling planet (Ke, Ve, Su, Mo, Ma, Ra, Ju, Sa, Me) on the left of each row so you can pick by Vimshottari lord at a glance.
  8. Filter popovers — no more duplicate titles

    • When a chip's popover has just one visible category (Rahitam, Tarabalam, Nakshatras, Ascendants, Placements), the black 'second title' that repeated the chip name is gone. The All / Clear buttons moved up into the popover header so they're still one tap away.
  9. Rahitam chip popover stays focused on Panchaka Rahitam

    • Clicking the Rahitam chip on the filter bar now shows only Panchaka Rahitam — the other 8 dosha-avoidance items (Mrityu Tithi, Sunya Tithi, Chandra Balam, Rahu Kalam, Yamaganda, Gulika, Brahma Muhurta, Abhijit Muhurta) live in the All-Filters drawer instead, so the chip popover stays small.
    • Active counts still roll up to the Rahitam chip badge regardless of which surface you used to toggle them.
  10. All-Filters drawer now surfaces every legacy filter

    • Restored Rahitam to its full 9 items: Panchaka Rahitam, Mrityu Tithi, Sunya Tithi, Chandra Balam, Rahu Kalam, Yamaganda, Gulika, Brahma Muhurta, Abhijit Muhurta.
    • Added a new Panchanga section to the drawer with Tithi, Yoga, Karana, Day (Varam), Masam — same options as the legacy /muhurat-calculator-protype/ sidebar.
    • No new chips on the filter bar — the bar stays at 5. Reach the new categories via the 'All Filters' button on the right.
  11. Compact placements grid + per-filter All/Clear

    • Placements popover now shows a single 9×12 grid (planet abbrevs across, House 1–12 down) instead of nine separate per-planet checkbox columns. Much faster to scan and untick a few cells.
    • Every filter category has a small 'All' and 'Clear' pair in its header: All checks every option (no constraint); Clear empties the selection. The Placements grid has one shared All/Clear that resets all nine planet rules in one tap.
  12. Chart-section chevron now reads correctly

    • Chevron ▼ now means the Birth Charts section is closed; ▲ means it's open. Previously the chevron pointed the wrong way at page load and after auto-collapse.
  13. Birth Charts section moved above the filter bar

    • Page order is now: Forms → Birth Charts → Filter Bar → Calendar. The charts sit closer to the forms so you can verify the birth data before refining filters.
  14. Filter bar regrouped — Rahitam / Tarabalam / Nakshatras / Placements

    • Replaced the old Panchanga / Doshas / Planet Placement chips with four focused groups: Rahitam (dosha avoidance), Tarabalam, Nakshatras, Placements.
    • Tarabalam and Nakshatra moved out of the old Panchanga catch-all into their own chips.
    • Tithi, Yoga, Karana, Day (Varam), Ascendant, Masam — rarely used — are no longer surfaced in the filter UI. Defaults stay open (include-all), so the calendar isn't affected.
  15. Filter bar moved above charts; auto-collapse on first filter

    • Slim filter bar now sits between the forms and the birth charts (was below the charts).
    • Removed the Apply Filters button from the bar — filters take effect as you toggle them. The drawer still has its own Apply/Reset in the footer.
    • All Filters button moved to the right edge of the bar.
    • First time you start applying filters, the birth charts auto-collapse so the calendar pops into view. Tap the chevron to re-open them.
    • Disabled the rva-bundle's hover tooltip on the birth charts here — it was pulling the wrong fields. Will be re-enabled once a muhurat-specific tooltip is built.
  16. Birth charts now match /kundali-matching/ exactly

    • Reference birth charts (Person 1, Person 2, Current Transit) now render through the shared ChartRenderer used by /kundali-matching/ — same cream background, centered Name/Date/Time/Lat/Lng/TimeZone block, and North/South toggle behaviour.
    • Removed the outer border on the Birth Charts card so the SVG sits flush.
    • Submitting the search no longer scroll-jumps the page — calendar appears in place.
  17. Calendar redesign — cleaner cells with score-bar underline

    • Day cells are now flat white with the date number on top and a thin green underline whose width and saturation tracks the number of available slots.
    • Selected day fills in solid violet (matches the new muhurtha-builder design language).
    • Weekend columns (Sat/Sun) get a soft cream tint; past days are muted.
    • Week now starts Monday (M T W T F S S).
    • Section heading above slot list reads 'Pick a slot for 25 December' with the date in violet.

No updates yet. Check back soon.

  1. Powerful planet — multiple Dig Bala planets resolved purely by sequence order

    • When two or more planets share a sign and each has Dig Bala (passing any of the 8 rules), the strongest is now chosen directly by sequence order (Rahu > Ketu > Sun > Moon > Venus > Jupiter > Saturn > Mars > Mercury), skipping debilitated — the same way the house analysis picks its powerful planet.
    • Removed the earlier R1 sub-tiebreak that let a planet physically sitting in its own Dig Bala house outrank sequence order (e.g. it was picking Mercury over Sun in a Sagittarius Sun+Mercury pair; now Sun wins by sequence).
    • Applied at the shared-library level (findPowerfulPlanetAllSigns + findPowerfulPlanet), so the powerful-planet API, house analysis, dasha influencer, and the strongest-planet / dasha-analysis pages all behave consistently.
  1. Detailed Comparison — Natal chart now reflects submitted birth data

    • Earlier the 'Natal' chart in the Detailed Comparison was actually the first row of the analysis range — which, with the default Analysis Type of 'From Current Date', meant today's transit chart got labelled Natal. The submitted birth date was effectively ignored for that panel.
    • The API now always computes a separate natal chart from the submitted birth date/time and the frontend uses it for the Natal column, independent of Analysis Type.
    • Age column is now computed against the birth year, so it shows the user's actual age at each row instead of starting at 0 from today.

No updates yet. Check back soon.

  1. /horoscope/ converted to a navigation hub

    • The /horoscope/ page no longer computes predictions in the browser via WASM. It is now a server-rendered sign + timeframe picker that links out to the matching per-sign SSR page (e.g. Aries → /aries-daily-horoscope/).
    • Timeframe tabs are now Daily / Monthly / Yearly (matching the 36 SSR pages). The Weekly tab is gone.
    • System tabs (Vedic / Western) are gone — both systems already render side-by-side on the destination pages.
    • Dead code removed: public/horoscope/js/{horoscope-app,horoscope-transit,horoscope-renderer,horoscope-predictions,horoscope-predictions-special}.js (the SSR engine in src/lib/horoscope/ is the single source of truth now).
    • Page is now mostly static HTML — only a small inline script that swaps the href as the user changes timeframe. Works without JS thanks to default /{slug}-daily-horoscope/ hrefs.
  2. Horoscope engine: cross-isolate edge cache via Cloudflare Cache API

    • composeHoroscope() now wraps in-isolate memoization with a Cloudflare Cache API layer (cache key includes system|sign|timeframe|UTC-date, TTL 24h).
    • First request in any isolate populates the edge cache; subsequent requests across isolates reuse the computed prediction without invoking Swiss Ephemeris or the prediction composer.
    • Cache writes are fire-and-forget; cache misses gracefully degrade to fresh compute. Local dev (no caches global) skips the layer cleanly.
    • composeHoroscope is now async — internal change, both callers (SSR component + API endpoint) updated.
  3. /admin/api-docs/api-v1: /api/v1/horoscope endpoint documented

    • Added a 'Horoscope' section under API v1 with the endpoint signature, all query parameters, and the full response data shape.
    • Inserted into the table of contents between 'Panchang, KP & Matching' and 'Composite Endpoints'.
  4. Server-rendered transit predictions on every sign horoscope page (36 pages)

    • All 36 per-sign pages (12 signs × daily/monthly/yearly) now render a real transit-based prediction block instead of the static 'Prediction Graph' image placeholder.
    • Each page shows Vedic (Moon sign) AND Western (Sun sign) predictions side-by-side, computed server-side from live planetary positions via the shared Swiss Ephemeris (panchangam) module.
    • Predictions are deterministic per (sign, timeframe, UTC date) — same answer for everyone viewing that page on that day. Memoized in-isolate to avoid recomputation.
    • Each system block shows: 9 planet transit pills (color-coded with retrograde + house badges) → intensity bar (10 segments) → 6 domain cards (Overall/Career/Health/Relationships/Finance/Spiritual) → applicable specials (Sade Sati phase, Rahu-Ketu axis, Jupiter year transit, Mercury/Venus/Mars/Jupiter/Saturn retrograde modifiers).
    • Yearly pages map to monthly composition (slow-planet-weighted) for now.
    • Now a real SEO play — Googlebot sees concrete prediction text per sign instead of an empty interactive shell.
  5. Public horoscope API — /api/v1/horoscope

    • GET /api/v1/horoscope?sign=aries&timeframe=daily&system=vedic[&date=YYYY-MM-DD]
    • Returns the same prediction object the sign pages render: 9 transits with sign/house/retrograde/dignity, intensity (1-10), 6 domain texts, special transits.
    • Same v1 envelope, CORS, rate limit (300/min/IP), and same-origin-or-X-RVA-Key auth as the other v1 endpoints.
    • sign param accepts a name ('aries'...'pisces') or index 0-11; system is 'vedic' (Lahiri sidereal) or 'western' (tropical).
  6. Premium glassmorphism redesign across the page

    • Hero now leads with a gradient title, animated 'Live Planetary Transits' badge, and the date underneath.
    • System tabs (Vedic / Western) and timeframe tabs (Daily / Weekly / Monthly) sit on a frosted glass pill with active state filled by a violet→purple gradient.
    • 12 zodiac cards: glass surface, gradient outline ring on hover/active, element-tinted lord chip, soft drop shadow on the icon, lift animation on hover.
    • Transit pills: per-planet color (Sun amber, Moon slate, Mars red, Mercury emerald, Jupiter gold, Venus pink, Saturn navy, Rahu violet, Ketu teal) with a glowing planet dot and tinted house badge.
    • Prediction cards: glass surface with a vertical domain accent bar (overall/career/health/relationships/finance/spiritual), responsive 1–2 column grid, hover lift with domain-tinted glow.
    • Intensity dot row replaced with a gradient-fill bar segmented across 10 steps.
    • Special transit cards (Sade Sati / Rahu-Ketu / Retrograde) get matching glass + accent treatment with a duration chip.
    • Subtle aurora gradient now sits behind the page in both light and dark mode for depth.
  1. Click any Nadi row to rectify the birth time

    • Rows are now clickable — the birth time updates to that row's T2 (bucket midpoint, so recomputation lands back on the same row) and the calc re-runs automatically
    • Hover cursor turns into a pointer; the currently matched row stays non-clickable to avoid no-op re-runs
    • Pairs naturally with the T2 column — scan the table for a row whose planet/tatwa pattern fits known life events and click to lock it in
  2. Nadi table shows T2 (clock time) alongside T1

    • New T2 column next to T1 in the 480-row Nadi table
    • T2 = T1 reversed through the LMT and sunrise adjustments — i.e. the real wall-clock birth time that maps to that row
    • Makes it easier to scan rows and pick a rectified birth time without running the math in your head