Work Tracker

📊 Daily Overview

Total Activity: 26 commits + 1 merges across 3 repositories


🚀 GitHub Activity

1. VipinKaushik 🔒 — 14 commits + 1 merges

feat(vipin): practitioner dashboard + CMS content editor · 73cc327

  • Three-panel dashboard: nav sidebar, week timeline, booking detail panel
  • Week navigation (prev/next), mobile tab bar, hamburger menu
  • Settings sub-pages (pricing, availability) with VipinAdminFrame sidebar
  • Site content CMS: /vipin/content — per-key EN/HI editor with draft/publish
  • Multi-env MongoDB: MONGODB_DB e…

fix(booking): split mongoose model types out of client bundle · eaa3770

Client components were importing SESSION_TYPES / BookingStatus from the
mongoose model file, dragging mongoose into the client bundle where
mongoose.models is undefined and module evaluation threw
“Cannot read properties of undefined (reading ‘PublicBookingRequest’)”.

feat(vipin): settings panel + dashboard wiring fixes · 444f72a

Adds practitioner settings surface (contact, availability defaults) and
threads server-driven time options through the public booking form so
the dashboard can override slots without a redeploy.

fix(booking): widen buildLocalTimeOptions to accept baseOptions override · 0b53fc0

BookingFormPublic already passes a third serverTimeOptions argument; the
two-arg signature was breaking the Vercel build with TS2554. Add the
optional baseOptions param (defaults to TIME_OPTIONS) so the existing
caller compiles while keeping the same behaviour when omitted.

feat(panchang): mandala rewrite, L1+L2 cache, geolocation chip · 950f743

SkyMandala — canonical Jyotish wheel with 108 pada subdivision ticks at the
outer rim, 27 always-visible nakshatra labels, 12 rashi labels (English over
Devanagari), rashi-boundary spokes, and graha glyphs superimposed at their
longitudes.

chore: section error boundaries, timezone-aware panchang dates, pricing/CMS polish · 908c0a1

  • SectionBoundary component wrapping each homepage section so a single
    section throw can’t take down the whole page; each section degrades
    independently.
  • panchang-cache pure helpers (timezone-aware date resolution + cache
    key normalization) extracted from the route handler so they can be
    unit-tested without p…

…and 8 more commits in this repo.

Merges:

  • Merge pull request #35 from Rupali59/redesign/homepage-components

2. SSJK-bot 🔒 — 7 commits

feat: SSJK-bot scaffold — grammY + Express webhook + healthz · 6149382

Phase 1.5 SM 3 (first half). New sibling project to SSJK-mb. One bot
token, one process. Webhook receives Telegram updates here; state
mutations route through SSJK-mb’s /api/internal/* via X-Internal-Token.

fix(config): load .env.local before .env (workspace convention) · 8318efa

The workspace uses Next.js .env.local convention across all client projects.
A bot user (Rupali) put credentials in SSJK-bot/.env.local, but dotenv was
only reading .env. Now we load .env.local first, then .env (latter overrides
former — opposite of typical, but matches what users expect when they have
both files).

feat: POST /api/internal/dispatch — bot owns Telegram API surface · 8673a16

Pair to SSJK-mb commit on the same topic. Bot is now the only process
that holds TELEGRAM_BOT_TOKEN and talks to api.telegram.org.

POST /api/internal/dispatch
Auth: X-Internal-Token (shared with SSJK-mb’s /api/internal/*)
Body: { chat_id: number | numeric-string, text: non-empty string }
200: { ok: true,…

feat: Phase 1.5 SM 6a — inline keyboard + Start/Done/Snooze callbacks · d06f1b8

Adds the daily UX layer the design doc bet on. Bot now owns:

  • keyboard rendering for task DMs (4 buttons per status)
  • callback_query routing → SSJK-mb T5 internal API
  • in-memory dedup (Telegram retries within minutes; surviving
    bot restart deferred to Phase 2 Mongo-backed dedup)

fix(keyboards): swap emoji for geometric Unicode (▷ ✓ ✗) + drop snooze emoji · 59ddff5

Phase 1.5 SM 6a button labels were rendering with full-colour emoji
(💤 ⛔ and ▶ on some clients). User wanted icons, not emoji.

Telegram inline keyboards accept text only, so the trick is using
codepoints that don’t have an emoji variant. New label set:

feat: Phase 1.5 SM 6b — Blocked conversation + /tasks command · 78e42f1

Closes the keyboard UX loop from SM 6a. Tapping ⛔ Blocked now opens
a real reply flow instead of showing a placeholder toast.

Blocked conversation (src/lib/pendingBlocks.ts + src/handlers/messages.ts):

  • In-memory Map<tgUserId, {taskId, fromStatus, expiresAt}> with 60s TTL
  • Tap ⛔ → ctx.reply(“What’s blocking you?…

…and 1 more commits in this repo.

3. SSJK-mb 🔒 — 5 commits

feat: Phase 1.5 T5 — internal API for SSJK-bot (transition / open-tasks / snooze) · 1a18097

New routes on SSJK-mb, mounted at /api/internal/* BEFORE telegramAuth so
the sibling SSJK-bot process can call them without holding a Telegram
WebApp initData token. Gated by a separate shared secret
(SSJK_MB_INTERNAL_TOKEN) verified via timing-safe compare.

feat: Phase 1.5 SM 3 — route Telegram dispatch through SSJK-bot · 04f0b87

Incremental Path B (dispatch-only) split. Telegram Bot API contract now
lives in exactly one place: SSJK-bot. SSJK-mb’s sendDM still owns
notifications row writes + Motherboard usage reporting + retry queue —
we kept the data-ownership boundary clean and only moved the wire.

feat: Phase 1.5 SM 6a — thread intent+taskId through dispatch wire · 10a6185

Task-assignment DMs now carry the metadata SSJK-bot needs to render
the inline keyboard. Two-line plumbing change:

server/telegram/sendDM.js

  • sendTelegramDM accepts optional intent arg, threads to dispatch
  • dispatchTelegram POSTs { intent, taskId } to the bot’s
    /api/internal/dispatch when set; bot uses the…

feat: Phase 1.5 SM 6b — POST /api/internal/task/:id/block · dab1260

Orthogonal-to-status block route. Sets blocked=true + blockedReason +
blockedOnId on a task. Status is unchanged (the design doc treats blocked
as orthogonal — an open or in_progress task can be blocked).

feat: Phase 1.5 SM 6c — staff preferences routes (buttonLanguage) · 8ed12f5

GET + PATCH /api/internal/staff/:tgid/preferences. One pref today
(buttonLanguage: ‘en’ | ‘hi’); the shape is ready for more without
needing new routes.

GET behavior:

  • Falls back to buttonLanguage=‘en’ when no staff doc exists
    (keeps the bot’s dispatch path working before first auth or
    add-staff CLI invocat…

📈 Development Analytics

Daily Summary

MetricToday
Commits26
Merges1
Skill runs0
Decisions0
Eurekas0
CEO plans0
Notes touched0

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:           63 / 90  (substantive)
Days with any signal last 90:  66 / 90
Skill runs (since 2026-03-25):  75
Commits this year (authored):  1097
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 (17d), motherboard-shared (11d), Astroclarity (10d)

💭 My Notes

[Your own thoughts, observations, or context for this day — this section is never overwritten by automation]