Week 19 — May 5 – 11, 2026
Summary
A big week across three fronts: brand, ML tooling, and platform infrastructure. The TradeSpark Design System was checked in as the canonical brand spec and adopted across the static site — all 8 demo pages were restyled with the new tokens, eyebrow → .spark-text headline pattern, and shared nav chrome. The ML eval pipeline gained non-blocking multi-model runs with a full dashboard (golden-set picker, progress bars, comparison table, record diff drawer), and the Traction admin demo surfaced live Supabase user/project analytics behind an email-allowlist gate. The livekit-recorder was overhauled with AES-CBC encrypted writes and depth-track support, and a new video-to-3D reconstruction pipeline (ffmpeg → COLMAP → fastgs) was added. The repo's docs/ corpus was exposed at /docs/* through the static site for convenient browsing.
19 code commits | 107 unique files changed | +8,572 / -1,145 lines
Highlights
TradeSpark Design System Adoption (May 7–8)
The canonical brand spec was checked into /design/TradeSpark Design System/ (README, SKILL.md, colors_and_type.css, preview HTML components, JSX UI kit) and wired as a Claude Code skill. dev/static_site/ was restyled with the new tokens (navy #183e6d, spark #e45125, bg #f4f8fb), plus .eyebrow, .spark-text, .btn-arrow, .hero-glow utilities. All 8 demo pages were then restyled with brand tokens, with ML demos sharing a consolidated fullscreen header.
Non-Blocking Eval Pipeline + Dashboard (May 7)
POST /ml/eval/run is now non-blocking: spawns one eval worker per model, returns immediately. The /demos/ml-eval dashboard provides golden-set picker, task-type/judge filters, multi-model comparison table (metrics + judge subscores), per-record diff drawer, and recent-runs list. Zombie self-heal mirrors the training pipeline's probe pattern. Follow-up polish added metric tooltips, judge-score legend, and project titles in records.
Traction Admin Demo (May 7)
New admin-only /demos/traction page showing live Supabase analytics: user totals with registered/anonymous split, homeowner vs pro counts, per-month calendar heatmaps for daily signups and project creation, and a paginated project list with AI-plan drawer. Gated by a new TradesparkEmailAdmin dependency (email allowlist via Modal Secret, decoupled from Supabase roles). A follow-up commit fixed a crashloop where the traction module's top-level tsweb import crashed every non-users service.
LiveKit Recorder Overhaul — Encrypted Writes + Depth Support (May 5)
The Go livekit-recorder's S3 uploader package was removed. Recordings (RGB + depth) are now encrypted via encryptAndWriteFile (AES-CBC) before being written to the S3 path. Encryption round-trip tests verify the encrypt-decrypt path. The recording bot, clip handling, and REST handler were refactored for the new flow.
Video-to-3D Reconstruction Pipeline (May 5)
New session_to_splat.video_3d_reconstruction.py implements the full video-to-3D pipeline: decrypt recordings → ffmpeg frame extraction → COLMAP SfM → fastgs Gaussian splatting. Comes with its own Dockerfile. The existing session_to_splat.py was refactored for pipeline variant routing.
ml-generation Rename + Detail Pane Restructure (May 8)
The ML dashboard demo was renamed from ml-dashboard to ml-generation to better reflect its purpose. A DEMO_REDIRECTS map 301-redirects the old slug. The detail pane was restructured from a 2-col split to a top-row project description + bottom-row 2-col refinement/plan layout.
Docs Exposed at /docs/* (May 9)
The repo's docs corpus (architecture, services, 25 changelog files) and IMPROVE.md are now browsable at /docs/* on the static site. Runtime markdown rendering via markdown-it-py, login-required auth, path-traversal protection. FastAPI's built-in Swagger UI was disabled to free the /docs route.
Zombie Training Job Self-Heal (May 6)
A new _probe_running_job helper asks Modal whether running FunctionCalls are still alive — reaper kills and OOMs now surface as failed with the exception captured. Progress bars gained proportional fill with step/epoch tick overlays.
Daily Breakdown
May 5 (2 code commits)
631cb8aAdded crypto to livekit recorder, updated agent instructions, depth track handling, session recordings to splatting work (+2,253/-688)4f0d119Add livekit-recorder encryption tests, add fastgs splatting impl (+771/-156)
May 6 (1 code commit)
1efeee9Self-heal zombie training jobs and finer-grained progress bar (+117/-29)
May 7 (9 code commits)
972012aAdd Traction admin demo with email-allowlist gate (+990/-2)8e7ef69Add non-blocking eval pipeline + multi-model comparison dashboard (+1,096/-23)3dd7a0cDefer traction router import so non-users services don't crashloop (+14/-2)363987fUpdate Synthetic Generate test for non-blocking response shape (+2/-3)570201fAdopt TradeSpark Design System across dev/static_site/ + wire skill (+2,290/-392)1d0edb6ml-eval: tooltips on metrics, judge-score legend, project titles in records (+338/-16)87df64etraction: brand restyle — tokens, voice, eyebrow + spark-text headline (+36/-21)b9aace7traction: regrade calendar ramp to 0.20/0.40/0.60/0.80/solid navy (+11/-11)27ec5f6mobile-session: brand restyle — tokens, eyebrow + spark-text headline (+9/-8)
May 8 (5 code commits)
4cd33eeml-generation: rename from ml-dashboard + restructure detail pane (+79/-49)0ec07e0ml demos: share site-header chrome + brand restyle (tokens, badges) (+96/-195)063e103traction: convert to non-fullscreen, drop legacy topbar (+9/-42)66a88bfmodel-proxy: brand restyle — tokens, chip palette, eyebrow + spark headline (+8/-7)41e4c91websocket-test: brand restyle — tokens + eyebrow / spark-text headline (+4/-3)
May 9 (1 code commit)
cb6674astatic-site: expose internal docs/ + IMPROVE.md at /docs/* (+298/-1)
Modified Files
May 5
dev/livekit-recorder/pkg/participant/data.go— AES-CBC encrypt/decrypt,encryptAndWriteFiledev/livekit-recorder/pkg/participant/data_test.go— new: encryption round-trip testsdev/livekit-recorder/pkg/participant/processing.go— encrypted writes for RGB + depthdev/livekit-recorder/pkg/participant/participant.go— restructured lifecycle, depth awarenessdev/livekit-recorder/pkg/recording/bot.go— bot refactoreddev/livekit-recorder/pkg/recording/clip.go— clip handling updateddev/livekit-recorder/pkg/recording/service.go— service restructureddev/livekit-recorder/main.go— simplified entry pointdev/livekit-recorder/pkg/http/rest/recording.go— REST handler trimmeddev/livekit-recorder/pkg/upload/s3.go— removed (replaced by encrypted writes)dev/livekit-recorder/pkg/upload/uploader.go— removeddev/livekit_ts/agent/agent.py— depth-track detection, session lifecycle reworkdev/livekit_ts/agent/instruction_sets.py— agent instructions expandeddev/livekit_ts/agent/recorder.py— DEK passing, subprocess configdev/livekit_ts/agent/room_agent_worker.py— worker adjustmentsdev/livekit_ts/agents/livekit_agent_helpers.py— image + helper reworkdev/livekit_ts/agents/dockerfile.livekit_agent— new: agent Dockerfiledev/livekit_ts/agents/dockerfile.livekit_agent.entrypoint.sh— new: agent entrypointdev/livekit_ts/agents/dockerfile.entrypoint.sh— removed (replaced)dev/queues/session_to_splat.py— refactored for pipeline variantsdev/queues/session_to_splat.video_3d_reconstruction.py— new: video-to-3D pipeline (fastgs)dev/queues/dockerfile.session_to_splat— updated builddev/queues/dockerfile.session_to_splat.video_3d_reconstruction— new: 3D reconstruction Dockerfiledev/queues/dockerfile.session_to_splat.entrypoint.sh— new: entrypointdev/queues/colmap_undistorted_sfm_export.sh— COLMAP with checkpointsdev/queues/video_to_gsplat.sh— end-to-end splatting scriptdev/queues/__init__.py— new: package initdev/core/core.py— image and config updatesdev/core/data.py— DEK and encryption adjustmentsdev/core/mls.py— MLS module updatesdev/core/models/__init__.py— new models exportdev/core/models/jobs.py— new: job modelsdev/core/models/telemetry.py— telemetry model changesdev/app.py— app composition updatesdev/deploy.sh— deploy script adjustmentsdev/users/auth.py— auth refinementsdev/requirements.txt,dev/requirements_full.txt,requirements.txt— dependency updatesdev/tests/test_core/test_mls.py— MLS test updates
May 6
dev/ml/ml_endpoint.py—_probe_running_jobhelper for zombie detectiondev/ml/training/trainer.py— emittotal_stepson epoch/step eventsdev/static_site/templates/demos/ml-training.html— proportional progress bar with tick overlays
May 7
dev/users/traction.py— new: Traction admin endpoints (296 lines)dev/core/admin.py— new:TradesparkEmailAdminauth dependencydev/core/__init__.py— exportTradesparkEmailAdmindev/core/core.py— addTradesparkAdminsModal Secretdev/users/users_endpoint.py— include traction router, deferred import fixdev/ml/eval/eval_runner.py— progress_callback, event emission, project titlesdev/ml/ml_endpoint.py— eval worker, eval_jobs/eval_runs Dicts, non-blocking POST, zombie probedev/static_site/endpoint.py— register traction + ml-eval in FULLSCREEN_DEMOSdev/static_site/templates/demos/traction.html— new: Traction dashboard UIdev/static_site/templates/demos/ml-eval.html— new: ML eval dashboard UIdev/static_site/templates/index.html— add Traction + ML eval cardsdesign/TradeSpark Design System/— new: canonical brand spec (53 files).claude/skills/tradespark-design— new: skill symlinkdev/static_site/assets/css/site.css— TradeSpark brand tokens + utilitiesdev/static_site/assets/img/— brand logo assets + favicondev/static_site/templates/_header.html,_fullscreen_header.html,login.html,posts_index.html— brand restyledev/static_site/DESIGN.md— replaced with canonical spec pointerCLAUDE.md,dev/CLAUDE.md— cross-reference design specdev/static_site/templates/demos/mobile-session.html— brand restylebruno/.../Synthetic Generate.bru— response shape assertion update
May 8
dev/static_site/templates/demos/ml-dashboard.html→ml-generation.html— renamed + restructureddev/static_site/endpoint.py— slug update,DEMO_REDIRECTSwith 301 redirectdev/static_site/templates/index.html— link target updatedev/static_site/README.md— migration tabledev/static_site/templates/_fullscreen_header.html— shared ML nav headerdev/static_site/templates/demos/ml-comparison.html— brand restyledev/static_site/templates/demos/ml-eval.html— brand restyledev/static_site/templates/demos/ml-training.html— brand restyledev/static_site/templates/demos/traction.html— convert to non-fullscreendev/static_site/templates/demos/model-proxy.html— brand restyledev/static_site/templates/demos/websocket-test.html— brand restyle
May 9
dev/static_site/docs.py— new: docs corpus loader (158 lines)dev/static_site/templates/docs_index.html— new: docs index pagedev/static_site/templates/_doc_layout.html— new: doc detail layoutdev/core/core.py— mount docs/ + IMPROVE.md onto imagedev/static_site/endpoint.py— /docs routes, disable Swagger UIdev/static_site/templates/_fullscreen_header.html,_header.html— Docs nav linkdev/static_site/templates/index.html— "Browse all docs" card