📊 Daily Overview
Total Activity: 14 commits across 3 repositories
🚀 GitHub Activity
1. VipinKaushik 🔒 — 10 commits
fix(vipin): single nav on mobile + consistent tab-bar icons · ed2f373
On mobile the /vipin admin was showing three competing nav surfaces:
the desktop topbar’s horizontal link list, the left sidebar nav (whose
links rendered run-together as “PricingAvailabilityContent”), and the
bottom tab bar. Now the bottom tab bar is the sole mobile nav:
- hide .vipin-topbar .vipin-nav at ≤900px (slim topbar keeps brand +
sign-out only)- hide .vipin-left and the now-pointless calendar toggle
- give .vipin-center bottom padding so content clears the fixed bar
Tab-bar icons swapped to monochrome text glyphs (▤ ₹ ◷ ✎︎ ⚙︎) with
U+FE0E text-variation selectors so they don’t render as colour emoji.
fix(panchang): dedup redundant client fetches on homepage load · b6629f0
The homepage fired 4 API calls on load: 2 for the SSR seed location
(Gurugram default) re-fetched client-side, then 2 more for the geo-resolved
location. The first pair was pure waste — SSR already passed that data in as
initialPlanets/initialPanchanga.SkyMandalaInteractive now tracks a lastFetchedKey ref (lat4,lon4,date),
seeded with the SSR data’s key when initial props are present. The mount
effect skips the fetch the server already did; a fetch only fires when the
location or date actually changes. Result: 4 calls → 2 (geo-resolved only),
or 4 → 0 when the user’s location matches the seed cell.…
fix(mandala): place grahas on a true-angle band with collision staggering · 31bbbe8
Planets were positioned at their longitude angle but at the old reference’s
decorative orbit radii (0.10-0.21, deep near the centre), so a planet “in
Taurus” sat near the middle instead of aligning with the Taurus rashi band,
and planets close in longitude (Sun 55°, Mercury 62°, Jupiter 88°) piled
on top of each other.Now all grahas sit on a single band (R_GRAHA_BASE 0.255, just inside the
rashi labels) at their true zodiacal angle, so each can be traced radially
out to the rashi/nakshatra it occupies — the moon glyph lines up under its
highlighted nakshatra label + needle. …
fix(mandala): stop graha pulse animation collapsing planets to centre · c39c9df
Every graha rendered stacked at the centre because the graha
carried
both atransform="translate(x y)"SVG attribute (position) and a CSS
transform: scale()pulse animation. A CSS transform REPLACES the SVG
transform attribute rather than composing with it, so the animation’s
scale(1) wiped the translate and dropped every planet to the origin (0,0).Split into two nodes: outer
holds the position (translate attribute,
no animation), innerholds the pulse (transform-origin 0,0, scale
animation). The scale now composes within the translated parent, so each
graha pulses in place at its true position.
chore(assets): prune unreferenced public/content, add nakshatra + graha icons · f366fe9
public/content/ held 221 files (blog images, consultation icons, infographics,
homepage images, UI icons, country flags, partial astrology sets) — none
referenced by any V1 code; they were assets for the archived knowledge hub,
blog, and consultation detail pages stripped in the V1 cleanup. Recoverable
from git history if a future cycle restores those surfaces.Kept public/assets/ (fonts, favicons, brand — all wired) untouched.
…
fix(vipin): add missing left-sidebar nav styles · 572123c
The left-column redesign (calendar removed, replaced with a route nav)
shipped the markup — .vipin-left__nav / __nav-label / __nav-link in
page.tsx and VipinAdminFrame.tsx — but the matching CSS was never
written. Only the old .vipin-left__section-label existed, so the links
rendered as unstyled inline anchors (“PricingAvailabilityContent” run
together).Adds block links with padding, grouped section labels, hover, and an
accent-tinted active state. Desktop now shows a proper sidebar nav;
mobile still hides it in favour of the bottom tab bar.
chore(vipin): remove vestigial show/hide-calendar toggle · e4eac3a
The toggle was a leftover from before the left-column redesign, when
that column held a MiniCalendar widget the button could collapse on
mobile. The calendar was removed (column is now a route nav), and the
mobile nav fix hides the whole left column anyway, so the toggle was
dead UI — a button labelled “Hide calendar” that toggled no calendar.Removes the button + navOpen state from VipinShell and the now-unused
.vipin-nav-toggle / data-nav-open CSS. Keeps hasBooking /
data-booking-open which still drives the right-hand detail panel.
feat(mandala): wire graha PNG icons onto the wheel + sun-arc · 27845cf
All 9 graha icons now sourced (added mercury/venus/mars/saturn from
thenounproject to complete sun/moon/jupiter/rahu/ketu). The wheel swaps
the geometric GrahaGlyph for the real PNGs via, keyed by planet
id; the colored disc ring still carries each graha’s identity. SunArcWidget
uses the same sun.png/moon.png so the day-phase glyph matches the wheel.Icons are black line-art on transparent — a theme-aware CSS filter keeps
them black on the light theme (readable on the light disc fill) and inverts
to light on the dark theme. GrahaGlyph component retained but no longer
referenced (kept for potential reuse).
chore(assets): swap sun/moon/jupiter/rahu/ketu to matching line-art set + add earth · 3caec19
Replaces the 5 original graha PNGs with versions from the same thenounproject
line-art family as mercury/venus/mars/saturn, so all 9 grahas share one
consistent style (canonical astrological symbols, black on transparent).
Adds earth.png (observer/geocentric centre marker — not a graha, not yet
wired into the wheel).
fix(vipin): remove redundant broken topbar nav + restore two-col grid · 4c5e06b
The topbar rendered a second nav (VipinNav) duplicating the left
sidebar’s routes. Worse, .vipin-nav was styled flex-direction:column,
so in the horizontal topbar the links stacked vertically and overflowed
the 52px bar — the floating “Availability/Pricing/Settings” artifact.
- remove
from the topbar (brand + sign-out only); delete
the now-unused nav.tsx and dead .vipin-nav* CSS (base, the 768px
row override referencing old .vipin-sidebar classes, and the mobile
hide rule)- add the missing .vipin-two-col base grid (220px + 1fr). …
2. SSJK-mb 🔒 — 2 commits
feat: Phase 1.5 SM 7 — morning briefing routes + OOM hardening · 49d9479
Briefing infra on SSJK-mb (scheduler lives in SSJK-bot):
GET /api/internal/staff/active
→ [{ telegramUserId, displayName, role, briefingsEnabled, buttonLanguage }]
active !== false; briefingsEnabled defaults true (opt-out, per design doc)POST /api/internal/briefing/mark-sent { telegramUserId, date }
→ 201 claims the per-day-per-user slot | 409 already sent
Atomic via unique index on (date, telegramUserId) — race-free across
duplicate cron fires / crash recovery / future multi-instance.
- briefing_log collection + briefing_log_unique index in db/indexes.js
…
feat: Phase 1.5 SM 7b — heartbeat collection + stats/heartbeat routes · 702bd65
Observability infra for the bot’s adaptive heartbeat (scheduler in SSJK-bot).
GET /api/internal/stats/open-tasks → { count }
office-wide open+in_progress, snooze-aware, not deletedPOST /api/internal/heartbeat { openTaskCount, lastCallbackAgoMs?, lastOutboundAgoMs? }
append-only into capped bot_heartbeats; 201. Append failures aren’t
worth a 5xx — a dropped health ping is acceptable.
- bot_heartbeats CAPPED collection (5MB / 10k docs) created in
db/indexes.js ensureCappedCollections() — capped collections need
explicit createCollection, can’t be retrofitted. Idempotent.…
3. SSJK-bot 🔒 — 2 commits
feat: Phase 1.5 SM 7 — morning briefing scheduler + startup catch-up · 72c8629
09:00 IST cron (node-cron, timezone Asia/Kolkata) DMs each active staff
member a digest of their open tasks, in their language. Startup catch-up
fires immediately if the bot boots inside the 09:00-11:00 IST window and
today’s slot is unclaimed.src/scheduler/briefing.ts:
- runBriefingOnce(deps) — pure-ish runner (injected sendMessage + now),
fully unit-testable without cron or grammy- claim-before-send: POST mark-sent (201) BEFORE sendMessage, so a race
or retry can’t double-DM (409 → skip)- skip rules: briefingsEnabled=false, zero open tasks (no spam),
already-sent- per-user errors don’t abort the batch
- istDateString / istHour compute IST calendar deterministical…
feat: Phase 1.5 SM 7b — adaptive heartbeat scheduler + activity metrics · 430cfcc
Self-DMs the operator on a usage-scaled cadence; a missing ping is the
“bot is down” signal. Writes each ping to bot_heartbeats so a Phase 2
job can derive a data-driven schedule.Cadence (Asia/Kolkata):
peak 09:00-20:30 IST → every 30 min (’*/30 9-20 * * *’)
off-peak 21,23,1,3,5,7 IST → every 2h (‘0 21,23,1,3,5,7 * * *’)Payload (no emoji — ’●’ status dot, consistent with keyboard icons):
● SSJK bot alive — N open · last tap Xm ago · last send Xm ago · next briefing in Xhsrc/lib/botMetrics.ts:
in-memory lastCallbackAt / lastOutboundAt; ms-ago accessors; resets on
restart (liveness signal, not data — “no activity yet” post-restart is
accurate)…
📈 Development Analytics
Daily Summary
| Metric | Today |
|---|---|
| Commits | 14 |
| Merges | 0 |
| Skill runs | 0 |
| Decisions | 0 |
| Eurekas | 0 |
| CEO plans | 0 |
| Notes touched | 0 |
Decisions logged today
None today.
Eurekas
None today.
Strategic plans authored
None today.
Notes touched
None today.
Running totals (as of this date)
Active days last 90: 64 / 90 (substantive)
Days with any signal last 90: 67 / 90
Skill runs (since 2026-03-25): 75
Commits this year (authored): 1111
Decisions logged this year: 0
Eurekas this year: 5
CEO plans authored this year: 12
Projects touched this year: 54
Top projects last 90: portfolio (25d), Mothership (19d), VipinKaushik (18d), motherboard-shared (11d), Astroclarity (10d)
💭 My Notes
[Your own thoughts, observations, or context for this day — this section is never overwritten by automation]