Weekly chapter62
2026-W21 · ending May 23, 2026· May 2026 chapter ↗

The week I built the spine

I started the week chasing reliability. The recording feature in uc-meeting-ops was good, but it wasn't bulletproof. I needed a way to capture meetings without the browser tab dying when I switched windows o…

301commits13systems5min read
Product capture

Contact-Ops — review queue.

I started the week chasing reliability. The recording feature in uc-meeting-ops was good, but it wasn't bulletproof. I needed a way to capture meetings without the browser tab dying when I switched windows or minimized the app. Monday was about solving that friction.

I spent the day in uc-meeting-ops pushing version 0.4.0. The headline was the AlwaysOnControl component. It keeps the browser tab alive and recording even when you switch windows. I added a popout window so the UI stays out of the way. The backend got a new session mode to track this state. It is a straightforward change across seventeen files. You turn it on, the browser stays awake, and the recording continues. No magic. I also cleaned up the desktop browser recorder, bumping it to 0.3.0. The distinction between the tab mode and the desktop stream is now clear.

Monday also required some unglamorous hygiene. I fixed a guard on the OAuth2 start route so it fires only once. The redirect logic was looping before, which confused everyone. I narrowed the OAuth2 proxy cookie domain to the specific subdomain to stop it from leaking. Keycloak integration needed love too. I made the sync for user organizations additive so we do not overwrite existing memberships. New SSO users land in their personal organization instead of some magic default. I also added tolerance for email-as-username in Keycloak and added logging for SSO failures. Guessing why a login failed is a waste of time.

I added a popout window so the UI stays out of the way.

Tuesday shifted focus to the audio stack. The microphone experience was fragile. The VAD engine ignored user preferences, and hot-swapping devices would crash the session. That is unacceptable for a tool people rely on for work. I rewrote the audio device picker to respect the user's selection. I added hot-swap support on devicechange and built a per-session override with a live VU meter. That single commit touched twelve files and added 1,783 lines. You pick a mic, it works. You unplug it, the system adapts.

With the audio pipeline stabilized, I retired the meet-whisper container. It was a legacy dependency that bloated images and slowed startup. I migrated the default STT provider to parakeet-server and integrated browser-side Parakeet 0.6B INT8 STT. The server 1.1B instance remains as a fallback for high-accuracy needs. The default is now local and fast. I dropped the baked-in Whisper images, saving about 880 MB. I also deleted the dead meet_chunks pipeline and the associated /api/rag/chat endpoint. That endpoint had payload-key drift and a cross-org leak risk. The canonical meeting_transcripts pipeline covers the use case anyway.

Action items were buried in session final summaries. I promoted them out of the summary into a first-class table. This involved a migration, a new API endpoint, and a dedicated frontend component for recent action items on the dashboard. It makes the data discoverable. I also built a tool-using meeting-rag agent for the dashboard ask bar, so users can query their meeting history directly.

By Wednesday, the Conference Room backend and frontend landed in one shot. Phase 1 gave me multi-room native infrastructure with a setup wizard, a detail page, and internal auth between the room recorder and the backend. I wired up satellite device secrets for WebSocket and state-mutating endpoint auth. I killed a cross-org isolation leak and ran cross-org integration tests across Qdrant and Postgres. The diarization toggle got threaded through the chunk pipeline. The pipeline status became dropdowns with Discard and New Session controls. The always-on audio source picker finally ships with mic, tab, and combined options plus a simultaneous-recording guard.

In listing-ops, I cut a big multi-tenant wave. The schema groundwork went in first, then every INSERT started stamping tenant_id across the API and core. I shipped the Quick Listing flow where you drop photos, describe the item, and the agent fills the rest. The diagnostics got background polling, history, three-strike alerts, and a Settings UI. Per-integration liveness probes and bulk set-and-republish for shipping policy landed too.

Thursday brought Accounting-Ops to life. I scaffolded the whole thing, tore it apart, and reworked it into a three-level isolation model of workspace, entity, and user. I squashed six phase-zero bugs and pushed a polished landing and dashboard shell. It deployed live at accounting-ops.magicunicorn.dev. Thirty-three files for the refactor alone, twenty more for the UI pass. I had wanted a proper accounting service for a while, and today it actually existed.

Meeting-ops absorbed the most commits by a wide margin. The headline was always-on recording: full audio capture that doesn't drop, a capture-only mode that skips browser inference on iOS and Android, and a server reprocess path that picks up chunks when the browser can't keep up. I wired session attachments to Garage storage, added a move-between-orgs feature with cascade and Qdrant re-tagging, and consolidated the LLM consumers onto Qwen 3.6 35B-A3B.

Friday compounded everything. One hundred and fifty commits across ten repos. The headline was contact-ops. I built an entire agent framework from nothing and wired it into a working inbox. Not a wireframe, not a mock endpoint, but a system where an agent can detect conflicts, propose resolutions, and a human can approve, reject, or snooze them with evidence panels and tiered confirmation. Phase 3 began Friday. By Friday afternoon it was shipping.

The foundation was a BaseAgent class with a registry, a trust ladder, and enough infra that the agents don't burn cash or hang forever. Celery workers, a cost guard with five layers, an outbox, a dead-letter queue, and a circuit breaker. I wired up observability with OpenTelemetry and Prometheus. The inbox itself got a full UI: three-pane resizable layout, virtualized list, bulk actions, snooze picker, focus mode, structured diffs with per-field choice, evidence panels, confidence dots, agent badges, and a command palette for keyboard users.

On the accounting side, the work was consolidation. accounting-ops got Phase 2 wiring for categorization, journal, reports, and CPA export. Phase 1.6 added encrypted-at-rest credential storage. I scaffolded three new MCP connectors: SimpleFIN, eBay Finances, and IMAP receipts. Two worker services, receipt extraction and reconciler, and a full CPA export service supporting IIF, QBO, CSV, and PDF. The eBay connector scaffold was 4,120 lines across 23 files. The canonical shape commit added another 1,394 lines across 14 files.

Meeting-ops shipped v1.0.0 with bulk import admin controls, a Brigade graph viewer embedded in session details, Parakeet streaming, and a native iOS bootstrap in Swift and SwiftUI.

Saturday was about plumbing. The FalkorDB graph sync in contact-ops kept tripping on its own parameters. The client was sending them as redis PARAMS instead of inline CYPHER prefix. Fixed it with a two-file change. Over in uc-meeting-ops the bulk import worker was reading the wrong Redis URL. Simple env var fix. I dropped a healthcheck on the meet-bulk-import-worker container so we can actually tell if it is alive. The frontend Dockerfile got a TypeScript strict check enforced. The build now refuses to ship if strict mode is violated. Twenty-one pre-existing failures went away. The suite went from 288 to 318 passed

Also in the frame

Real product captures — click any to enlarge.

accounting ops
accounting ops
listing ops
07 / Activity

The week, in commits.

Daily velocity and the systems that carried the work.

14Mon18
26Tue19
57Wed20
48Thu21
150Fri22
6Sat23
·Sun24
Week beginning May 18, 2026.
Index

13 systems,
one week of work.

accounting-opsaccounting-ops-cpa-exportaccounting-ops-ebay-finances-mcpaccounting-ops-imap-mcpaccounting-ops-receipt-workeraccounting-ops-reconcileraccounting-ops-simplefin-mcpcontact-opslisting-opsuc-clouduc-meeting-opsuc-meeting-ops-iosunicorn-ecosystem