Skip to content

Friday, July 10, 2026

Tearing out Filament

Jan Peter
tearing-out-filament.png

We're tearing out the last remnants of Filament this week, and for a refactor this size, it feels less like dread and more like relief. It's one of the final major pieces before early access — not the biggest, but close, and still a real chunk of work. We still lean on Filament quite a lot — it runs Ops, the panel our own team uses to run the fleet — but the customer side of it needs to go.

Early on, the priority was functionality, not interface. We needed to build a feature, wire up the resource behind it, drop a button on the page, and see if the flow actually worked — fast, without stopping to think about styling or notification logic or any of the scaffolding a real interface needs. Filament gave us exactly that, and it was pretty great at it: build a resource, add a button, test the command, change it, test again. We didn't have to build the interface; we didn't have to build the chrome around it. We could just build, build, build.

We've said before why CRUD-first stopped being the right shape for something a customer touches directly — that's not this post. This one's about the actual doing: what it takes to remove a UI that's carried real traffic since day one, without breaking the things quietly wired through it.

Login is a good example of "quietly wired through it." OAuth sign-in — GitHub, Google — ran through a Filament plugin, routes that only worked because the admin panel existed underneath them. Pulling that out means standing up first-party routes with byte-identical URLs, because GitHub and Google have your callback URL registered on their end; get that wrong and every existing login breaks. MFA had its own landmine: passkey login was gated behind a check for "is this request inside the admin panel," which meant flipping the Ops panel to be the default would have silently broken passkey login for every customer, not just the team running Ops. And something like 35 notification and email templates link back into Filament's admin URLs — "review this" pointing at a resource page that's about to stop existing — every one of those had to move onto Hybrid's own routes before the old panel could actually come out.

None of that is dramatic by itself. Together it's most of the actual work — decommissioning something customer-facing while people are still using it means finding every hidden dependency before you cut it loose, not after. And once it's done, we stop splitting attention across two interfaces. Everything left goes toward making the one people will actually touch right, before we hand it to anyone new.


strackt is a company of one, so "I" and "we" aren't always different things — but here it's worth being specific. I don't have design skills. I don't know how to start from a blank canvas, don't know how to make something look right out of nothing. That's not a company gap, it's a personal one — and since I'm the only one here, it means strackt doesn't have a designer either. What I do have is judgment: I know what I want, I know it when I see it, I know how to judge a result. Claude Design changed what design meant for me — the creative work stopped being "generate from zero" and became "look at this, say what's wrong, iterate." That's a process I can actually work in. It's how I ended up doing custom design work at all: no design framework underneath, nothing borrowed as a base — I pulled inspiration from everywhere, sure, but the structure itself is built from scratch. Which brings its own problem, organising a design system by hand instead of inheriting one, but that's a different fight.

This is what launches on August 28. Same tools we started with — Inertia, Vue — but nothing else carried over; not a component, not a line. What's left after this lands is one interface for the people using strackt, not two, and the weeks between now and then go toward making that one interface right instead of keeping two of them alive.