Building in public: a personal-AI platform weekend
I spend most of my building time on a personal-AI platform — the layer that watches the channels I actually use, decides what deserves attention, and hands the real work off to whatever coding agent is cheapest and most capable that day. This weekend was less about new features and more about drawing lines in the right places. Three of them stuck.
The first was pulling the skillsets out into their own package. Until now they lived inside the main app, which meant every time I wanted to change how one plugs into the pipeline I risked touching the pipeline itself. So I extracted the contract into a standalone module and wired the app to consume it as a dependency. The test that mattered wasn’t “does it build” — it was “if I swapped the underlying agent CLI tomorrow, would a skillset survive unchanged?” Once the answer was yes, the boundary was in the right place. Extraction is boring work that pays for itself the first time you need to move fast without breaking the thing underneath.
The second line was a hard one: a PII boundary for the demo slice. I want to show the system working end-to-end without exposing anything personal, which is harder than it sounds, because the whole point of the platform is that it’s steeped in personal context. The fix was to carve out a demo path that runs the same code against synthetic, publishable data — and to make the boundary structural rather than a habit I have to remember. Anything that ships publicly now crosses an explicit gate, and the gate fails closed. It’s the difference between “I was careful” and “the architecture won’t let me be careless.”
The third was the smallest and my favorite: a triage bar — a thin, always-visible strip that treats incoming items as things you act on in a second or two, not a dashboard you read. It reframed the whole interface. A dashboard asks you to look; a triage bar asks you to decide. That single shift — input device, not status page — quietly rewrote a pile of UI decisions I’d been agonizing over. Sometimes the useful move isn’t a new feature. It’s finding the one sentence that tells you what the thing actually is.
None of this is shipped-and-done. The skillset package still has a rough edge or two, the demo gate needs a real test suite, and the triage bar is a prototype in a single view. But the weekend’s real output wasn’t code — it was three boundaries in better places than they were on Friday. That’s usually the work that matters most and shows up least in a changelog.