← Back to Blog
Building in Public

The New Year Build

christian crumlish•
A robot reviewing a status dashboard at the start of a new year, planning what to build next.
“Some of these already work!”

The New Year Build

December 31, 2025 to January 1, 2026

New Year’s Eve started with issue creation. Eight new GitHub issues for Alpha Setup and MUX phase gates. The kind of planning work that feels productive but isn’t building anything yet. Yes, this is how I ring in the new year (lolsob).

Then I pulled up the Sprint A12 backlog: 13 issues assigned, including a P0 bug (#489) that was supposedly crashing user sessions with 422 errors. I had an inkling that a lot of the recent alpha testing and fixing may have already addressed a few of these, so I asked the Lead Developer to investigate.

The stale backlog

The investigation took minutes. Issue #489, the P0 bug? Already fixed. December 22, commit 859197ba. The fix was live on both main and production branches.

Issue #486, a test failure? Also fixed. December 27, commit 1afc5e26.

Two of three “bugs” weren’t bugs anymore. They were stale tracking. The fixes had shipped, but nobody had closed the issues.

This is a pattern worth naming. Work happens, fixes deploy, issues stay open. The backlog becomes a fossil record of past problems rather than a map of current ones. We’d been carrying phantom bugs.

The health dashboard

With the phantom bugs cleared, we moved to real work: Issue #530, the Integration Health Check Dashboard.

This was foundation work for Alpha Setup. Before users could configure their integrations, they needed to see what was working and what wasn’t. Before we could test the setup wizards, we needed visibility into connection status.

The implementation came in three phases:

Phase 1: Dashboard UI (576 lines). Overall status display with health icons. Individual cards for Notion, Slack, GitHub, Calendar. Status dots per integration. Test buttons with loading states. A “Test All Connections” button for bulk testing.

Phase 2: Health Check API (453 lines). Three endpoints: overall health, test single integration, test all integrations. Pydantic models for type safety. Response formatting that humans could actually read.

Phase 3: Error Guidance System. The part that mattered most. Specific fix suggestions for common errors. “Notion: Invalid API key” with instructions. “Slack: Token expired” with refresh steps. “Calendar: Auth failed, MCP not running” with the actual solution.

By 3 PM on New Year’s Eve, the dashboard was complete. Ready for commit.

The OAuth sprint

New Year’s Day brought the OAuth integrations. Slack first, then Calendar. It’s been bugging me that alpha testers have to type in ginormous API keys. Yes, I made them a nice GUI to do it with. Yes, I store the keys in their keychain and not in the clear in their environment, yay! But still, OAuth is just plain easier. We use it all the time now without even noticing.

Time to get into the details:

Slack followed the pattern we’d established: TDD scaffolding (10 tests), OAuth endpoints (3), UI integration, CLI update, integration testing (22 tests total). Five phases, clean execution.

Calendar was different. Google Calendar uses file-based OAuth by default — credentials.json and token.json sitting on disk. Desktop pattern. Not web-friendly.

We made a decision: implement full web OAuth instead, matching the Slack pattern. Standard redirect flow. User-friendly for web setup.

That required me to create Google Cloud OAuth credentials first — a PM prerequisite before implementation could start. Once the environment variables were set, the implementation followed the same five-phase structure as Slack: 12 tests, OAuth handler service, backend endpoints, frontend UI, adapter integration.

By the end of New Year’s Day: both OAuth flows complete, 34 tests passing, ready for end-to-end browser testing.

The methodology enhancement

Parallel to the OAuth work, we updated the omnibus log methodology. The Document Manager had synthesized seven days of logs (Dec 25–31), and the synthesis revealed a gap: we were compressing HIGH-COMPLEXITY days the same way we compressed STANDARD days.

The enhancement added specific guidance: space allocation (250 timeline + 280 executive summary for HIGH-COMPLEXITY vs. 60 + 200 for STANDARD), compression ratios (20–30% for HIGH-COMPLEXITY, more aggressive for STANDARD), red flags (compression under 30%, missing workstreams, collapsed events).

We also “reinflated” a few overly compressed recent complex days.

The shipping news

To wrap up the day, my Chief of Staff helped me pull together and publish Weekly Ship #023 that evening: “The capability sprint.” Coverage from December 19–25. The arc from 5 queries to 63 queries mapped, discovery gaps to architectural thinking to execution. Keeping folks posted at a sustainable pace.

← Back to BlogAlso available on Medium