seedbed

casework 02 · collapser · built alone, june to july 2026 · live at collapser.one

The Product That Removed Itself

The nerve to delete the thing you built

it's live → collapser.one

On July 16 I deleted my product. No pause, no deprecation flag. 2,980 lines gone in one commit, including the 556-line table at the center of the interface and the 287-line webhook that, for two weeks, was the app. The commit message says what it did: “Remove old collapse vision.” The migrations that carried it out read like chapter titles: projects_become_domains, drop_routing_tables, retire_settings.

Remove old collapse vision

39 files changed, 1,527 insertions(+), 2,980 deletions(-)

  • projects_become_domains
  • drop_routing_tables
  • retire_settings
fig. 1 · the pivot, as a diff.

The product survived. It’s live at collapser.one, and it’s better for the amputation. This piece is about why. RITA’s casework shows what it means when I take over someone else’s project. This one shows the part of the job that’s harder to put on a resume: building the wrong thing well, noticing, and having the nerve to delete it.

The itch

Start with the problem, because it’s probably yours too. Every project wants its own identity (help@, desk@, support@), and the path of least resistance is a new Google Workspace per project. I answer to twelve addresses across my projects: the studio, two products, an AI startup, more. Twelve identities, each wanting its own login, seat, and monthly line item. It adds up in money, and worse, in head-space. We live in a time when one person can run thirty projects. Thirty email accounts is insane. The human brain wasn’t meant for that.

The name came from a literal picture: identities down one axis, tools across the other. Email, calendar, drive. A matrix of surfaces, and the job is collapsing the grid to one sane place to stand. The Identity Matrix Collapser. Within twelve hours of the first working build I’d shortened it to The Collapser; the long name survives only in the repo. (People keep offering me the quantum-mechanics reading, where many identities sit in superposition, the tool measures, and the state collapses. That’s not where it came from. I love it anyway.)

PLATE 01seedbedfieldbasesameorbitenlighten labluzeMAILCALENDARDRIVE········column one, collapsednextone place to stand
fig. · the matrix. mail is only column one.

Act I: the router

The first build took two days. Twenty commits, June 28 and 29. The architecture was the obvious one: a service in the mail path. Resend caught mail for my domains, POSTed to my webhook, my code looked up a routes table and re-sent each message to my real inbox. I built the apparatus you’d expect around it: per-project route tables, a delivery log, and a tester that sent a probe address a message and verified the whole reply loop actually closed. It worked. I received my real mail through my own code.

Which means for two weeks, every message I got passed through something I was on the hook for.

The gap

Then nothing for two weeks. No commits. What the history can’t show is that the silence was the most productive part of the project.

I gut-check constantly. It’s temperament, not process: am I building something for nothing? What about spam reputation? How does forwarding interact with authentication? What does Google actually let you do natively? I hate email, which is exactly why I’d never looked closely at it. Somewhere in two weeks of those questions I found the hole in my own understanding: Google Workspace already does this. Secondary domains. Every domain I own can live in one Workspace, every address landing in one inbox, mail arriving at Google and stopping. No Resend, no webhook, no service of mine in the path. The thing I’d spent two days building, Google had quietly supported all along, buried under confusing docs and a zillion options.

That discovery is embarrassing, and the embarrassment is the product. My gap of understanding turned out to be everyone’s gap: the capability exists, and approximately nobody knows how to walk to it. So the product stopped being a place where you manage your mail and became a place where you verify you’ve configured it right. Read the DNS, read the Workspace, grade both against the collapsed ideal, say exactly what to change, confirm when it’s done. If the app disappeared tomorrow, your mail wouldn’t notice.

Deleting the router was two feelings at once. Disappointment, because I hadn’t known the technical detail and I’d built a product on top of not knowing. And relief, because I was no longer on the hook for routing anyone’s email at 3am. The judgment call was that the second feeling was information: a version of this product that lets me sleep is also the version that deserves to exist.

The kicker lives in the current code: a domain still running the old architecture gets graded with the stage legacy. My first version is now a condition my product diagnoses.

The measurer

What replaced the router is a product with opinions, and the opinions are the design work:

It never touches your mail. The first bolded sentence in the README. Nothing routed, forwarded, or rewritten; the deliverable is a correctly configured Google Workspace instead of a running service.

It stores nothing about the thing that matters. Every dashboard load reads DNS and Google live. A stale answer, on a screen whose entire job is “what is true right now,” is worse than a slow one.

Nothing is ever “good.” A stated rule in the vocabulary layer: no checkmarks. The UI warns or stays quiet. And it’s honest about the edge of its own knowledge. Whether DKIM signing is actually on is invisible to every API without send-as-you permission, which isn’t worth one boolean, so that check admits to being a published-key check and nothing more.

The same fact reads differently depending on who’s asking. The public checker at /check reads any domain and deliberately has no opinion. A Resend key there is “harmless, may be wanted.” The dashboard knows the domain is one you’re collapsing, so the identical record becomes “a leftover,” and an ImprovMX MX becomes “a trapdoor.” Same measurement layer underneath; one file of interpretation each way.

The Collapser's public DNS check for seedbed.studio: a record table of MX, verify, SPF, DKIM, and DMARC rows, each with its published value and a restrained verdict, headed NOTHING TO FIX.
fig. /check · the same domain on /check.
awaiting screenshotsrc/assets/casework/collapser/dashboard--same-domain.png
fig. dashboard · the same domain on the dashboard. same records, different verdicts.

The deep cuts run the same direction. DNS resolvers are pinned to public ones so the footer can name them. “Reproducible” becomes something you can check yourself with dig. Row-level security on the one stored secret is enabled with deliberately zero policies, because there is no correct row-level answer when every column-level answer is “absolutely not.” The whole surface is one indigo accent, monospace for anything that is a record or an address, and a landing page that’s a numbered manifesto instead of a feature grid.

The /one-inbox hero: the headline Twelve addresses. One inbox. Seven dollars., a stat band comparing what it costs now with $7.20, and a diagram of twelve addresses fanning into a single indigo node labeled one inbox.
fig. hero · the /one-inbox hero. twelve addresses collapsing into one node, drawn from the logo's own geometry.

Method, honestly

Built the same way as RITA (I design and decide, agents execute, everything runs through me) but tuned for a solo greenfield: more of the work happened as concept in chat, and the build was admittedly more cowboy than RITA’s regulated altitudes. What made loose acceptable is that my own twelve domains were the test fleet. I ran the full journey against real stakes, repeatedly, catching edge cases the way no test suite would have, because I have enough projects to be the edge cases. There are no tests; the build is the gate, and the README says so. The migration history has diverged from production and I’ve deliberately not reconciled it. The database is a thin layer at best; the state of record is Google’s, and the fresh start can carry that fix. The hero’s “$7.20” is a hair stale (a seat runs about $8.50 now) but the ratio holds: one Workspace acting as every project instead of a Workspace per project.

Column one

Email is just the first column of the matrix. The same collapse is owed to calendars, and to the rest of the grid after that. Subscribe to a colleague’s calendar, share a meeting, and you’ll see the event twice, which is exactly the kind of thing nobody should tolerate. Maybe the fix is a buried setting the guides can surface; maybe it’s a tool. Either way, the belief underneath doesn’t change, and it’s the same one the studio runs on: you’re the person; the project is a hat you wear. Your identity should be the thing that joins your projects. It shouldn’t be something every new project provisions another copy of.

The claim this piece makes is about judgment. Anyone can ship the two-day router. The work was the two silent weeks of questions after, and the one commit that took it all back out.