Day 15: The Fix-Everything Day
Yesterday's demo broke things. Today I fixed all of them. And then kept going.
← Day 14: The Demo That Broke Everything
Clearing the demo debt
Yesterday's demo with Elliot left me with four GitHub issues. By lunchtime, three were closed.
PR #6: Model cache invalidation. When you add a new provider, the model list now updates immediately. No more stale dropdowns showing Claude models when you just configured OpenAI.
PR #9: OpenAI tool compatibility. Rewrote the tool descriptions so both Claude and GPT models discover file paths correctly. Claude infers aggressively, GPT needs explicit guidance. The fix was making pinchy_ls descriptions unambiguous enough for both.
PR #11: Filter non-chat models. OpenAI returns embedding models, TTS models, all sorts of things that can't hold a conversation. Now the dropdown only shows models that actually support chat.
Soft-delete: because "Are you sure?" isn't enough
I added soft-delete for both agents and users. Instead of permanent deletion, records get a deletedAt timestamp. Deactivated users can't log in. Deleted agents disappear from the sidebar. But everything is recoverable.
For an enterprise product, hard-delete is a liability. An admin accidentally removes a user and their entire chat history vanishes? No. Soft-delete with reactivation is the baseline.
I built database views (active_agents, active_users) so every query automatically filters out soft-deleted records. No risk of accidentally showing a "deleted" agent in the UI.
The audit log grows up
PR #10 was the big one. The audit log went from a bare table of events to something you'd actually want to use:
- Name resolution — instead of cryptic UUIDs, you see "Clemens deleted Agent Smithers"
- Responsive card view — on mobile, entries collapse into readable cards instead of a broken table
- Dynamic event-type filtering — dropdown populated from actual events in your log
- CSV export — filtered, so you export what you're looking at
- Integrity verification — click a button, the HMAC chain gets checked, tampered rows get highlighted in red
- Tool-level logging —
tool.pinchy_ls,tool.pinchy_readas distinct event types
Settings that don't lose your work
This one came straight from the demo. Issue #8: switch between settings tabs and your unsaved changes vanish. Classic SPA problem.
The fix was a full refactor of the agent settings page. Lifted state to the parent, added a unified save bar that's always visible, dirty-dot indicators on tabs with unsaved changes, a confirmation dialog before navigating away. The kind of polish that separates a prototype from a product.
Global settings got the same treatment: keepMounted tabs so switching between Context, Providers, and Users doesn't reset anything.
The small things
Agents now know your name. The system prompt includes it, and greeting messages use a {user} placeholder. Smithers says "Good morning, Clemens" instead of "Good morning, user." Onboarding doesn't ask for your name anymore because Smithers already knows it from the system prompt.
People keep showing up
An old friend called out of the blue. We hadn't talked in about a decade. He'd been following the Build in Public updates, got excited about Pinchy, and wants to collaborate. He works with enterprise customers and sees the demand for exactly what we're building. Where I'm strong on the product and development side, he brings enterprise sales experience and customer relationships.
This keeps happening. People reach out because they see the progress, they see the openness, and they think "I want to be part of this." I love it. If you're reading this and thinking the same thing: book a call. I genuinely enjoy talking to people about what we're building, and the best ideas so far have come from exactly these conversations.
84 commits, 112 files, 7,764 lines
This was the most productive day of the entire build. Five PRs merged, three issues closed, two new ones filed for next time. It was also the most focused: every commit traced back to either yesterday's demo or making the product feel more complete.
There's a pattern here. Demo → issues → fixes → polish → new features that only become obvious once you start polishing. The audit log integrity check? I built it because I was already in the audit log code fixing the UI. The settings refactor? Started with "tabs lose state" and ended with dirty indicators, a sticky save bar, and navigation warnings.
Momentum compounds.
What's next
Mobile navigation (#12) and evaluating a migration from Auth.js to Better Auth (#15). And more demos.
Follow the build: github.com/heypinchy/pinchy