launchCTRL
Personal project portfolio + build-tracking dashboard. Heatmap, stats, daily dispatch brief, and end-of-day shutdown automation — all driven from this repo.
Tech Stack
About
launchCTRL is the command centre for every project in this portfolio. A single Astro-built dashboard that tracks build hours, lines of code, active days, closures, decisions, priorities, Claude Code usage, and a daily automated dispatch brief — all driven by local sync scripts that scan Claude session transcripts, git history, and project markdown frontmatter.
What it does
| Surface | Purpose |
|---|---|
/ (Command Centre) | Project rankings, build hours, LOC, 2026 activity heatmap, Claude stats |
/priorities | Unified priorities + ideas pipeline with 5D scoring |
/closures | Daily shipping log + decision register |
/portfolio | Project cards with status, tech, ecosystem |
| The Dispatch | Email brief sent at /shutdown time via Resend (no cron) |
Sync scripts
All project metrics are auto-computed from local sources — nothing hand-entered after initial seeding.
sync-loc.mjs— parallelfind + wc -lper project, ~1.7s for 2000+ filessync-build-hours.mjs— scans~/.claude/projects/**/*.jsonl, attributes time to projects viacwd+ tool_usefile_paths, idle-gap-cappedsync-claude-stats.mjs— per-model token usage, active days, streaks, peak hoursync-closures.mjs,sync-decisions.mjs,sync-ideas.mjs,sync-priorities.mjs— pull from the Obsidian vaultparallel-sync.mjs— orchestrates all of the above in ~5–15s
The Dispatch
Sent at /shutdown time, not via cron. A single Gemini Flash call (sync-brief.mjs) distills the day’s closures, current priorities, open loops, and Claude activity into a 5-section HTML email; send-dispatch.mjs ships it via Resend to two recipients. If /shutdown isn’t run, no email goes out — that silence is the staleness signal.