LOADING THE FEED ▮
NICHE OF ONE
LIVE --:--
← The Feed

Built So You Can Leave

/Thirty-two days ago it was a WordPress plan in the trash. Now it's three codebases and a publishing platform where writers keep 97 cents on the dollar and walk with every reader if they want. The whole build log, tech and wrong turns included.

post to X email it
an open doorway cut into a tall brick wall built by hand, a key left in the lock, warm red light spilling from the room beyond
// the everything pass All-Access The whole catalog, the members vault, and the back room where the operators talk shop. $67/yr →

TL;DR: Thirty-two days ago this was a WordPress plan I threw in the trash. Now it’s three codebases, a live members community, a publishing platform where writers keep 97 cents on the dollar and own every reader, and a money rail that can’t be forged. Built solo, in the open, on the idea that you shouldn’t have to rent your business from a platform that can evict you on a Tuesday. Here’s the whole map, the real tech under it, and every wrong turn on the way. The door’s open. Come look.

On the second of June I deleted a WordPress multisite I’d spent weeks building. Wiped the containers, handed sixty-four gigs back to the disk, archived the corpse, and started over.

WordPress isn’t bad. I was hauling a freight train to do a job that wanted a bicycle.

I wanted a network of sites that a laptop could rebuild in the time coffee takes to brew, that no plugin could hold hostage, that I could hand to somebody else someday without a manual thicker than the thing it described.

WordPress was never going to be that. So I quit carrying it.

What follows is the build log for what came after. The whole thing, framing and sawdust and the parts I tore back out, not the shiny reveal.

Day one: a network born in an afternoon

The first commit stands up a hub, a store, and a personal site on one shared engine. By the end of that same day there are ten rooms running on it.

One engine, os.njk, driving every one of them: dark and light, a Command-K launcher, a live radio station wired into the corner. Ten sites, one afternoon, because the whole point of leaving WordPress was that this should be possible.

Static Eleventy. HTML that’s already built when it hits the server, so there’s nothing to hack, nothing to patch at 2am, nothing between a reader and the words but a file.

It deploys with a flip switch to cheap shared hosting. The entire public network is files on a disk behind a CDN.

First principle, made concrete: the thing should be light enough that losing it would be an inconvenience, not a catastrophe.

The flip: own the front door

For a while the site itself lived on Substack, and the domain pointed at it. On June 7th I turned that around. nicheof.one started serving my own code, and Substack got demoted to one spoke among many.

That’s the move most people never make. You build your whole house inside somebody else’s mall because the foot traffic is free, and then the mall changes the rules, or the rent, or just dies, and your house dies with it.

The flip says the funnel ends at something I own. Spokes feed the apex, the apex feeds a list that lives in my own database, and no platform sits in the middle taking a cut and a hostage.

The money, built to not lie

A creator platform is a payment system wearing a coat. Get that wrong and nothing else matters.

Two rails. Gumroad stays as merchant of record for one-time products and the affiliate engine, because handling sales tax across the whole world is a job I don’t want.

Stripe became the owned subscription rail: the memberships, the yearly All-Access pass, run straight through my own Stripe account.

Somewhere in there I found a live bug where the buy buttons were charging ten dollars a month for what should have been a forty-seven-dollar year. Fixed it the same day I found it. That’s the tax on building fast, and you pay it by looking.

The members app is a single file. gate.php, four thousand four hundred lines of PHP and SQLite, running the whole community: passwordless magic-link sign-in, the sale webhooks, the posts and comments and DMs, the grants that unlock what you paid for.

One file is a heresy to a certain kind of engineer. It’s also auditable in an afternoon and deployable by copying it, and for a one-person shop that’s worth more than architectural purity.

I ran a security audit against it this week, adversarial, trying to break my own money. The verdict: you cannot forge a sale.

Both webhooks verify cryptographic signatures with constant-time comparisons, refuse anything unsigned, reject replays outside a five-minute window, and grant access exactly once no matter how many times a webhook fires.

I read the Stripe handler line by line myself, because on the part that touches money you trust nothing you didn’t verify with your own eyes.

The look, found by throwing things away

The design didn’t arrive. It got argued into place, mostly by deletion.

It started as a neon multi-theme launcher, too many choices doing too much. That got torn down to a single Underground skin, a zine in the light and a CRT terminal in the dark.

Then inked, hand-drawn heroes in the vein of a Mignola comic. Then a full rebrand to red. Then, the biggest swing, a broadsheet newspaper system: a nameplate masthead on every page, datelines and tickers and classifieds, red rationed down until it means one thing only, the door where money changes hands. Warm paper, fluid type, engravings drawn one at a time.

Every one of those was a full build, mostly bulldozed by the next. That’s how you find an identity, the same way a sculptor finds a shape, by cutting away everything that isn’t it.

The hard part: a publishing platform of its own

The members community was one thing. A place where other writers could run their own magazines was another, and it didn’t fit inside a single PHP file.

So at the end of June, spaces-svc got built: a proper application. PHP 8.3, Postgres, Redis, running in Docker on its own box.

Every writer gets their own eZine at their own subdomain under a wildcard, yourname.nicheof.one. It went live on July 1st.

The interesting problems were the boring-sounding ones. Sign-in has to work across subdomains, so gate.php mints a signed token and spaces-svc verifies it against a shared secret, and a reader moves between the apex and a writer’s space without ever logging in twice.

Payouts run on Stripe Connect. I started with the embedded components, hit a wall in the identity-verification flow, and pivoted to Express: hosted onboarding plus a login-link dashboard, the whole KYC problem handed to the people who do it for a living.

The platform fee is three percent. Tips are zero. A writer keeps ninety-seven cents on every dollar and owns every reader who ever unlocked a word, and if they want to walk, they export the whole thing to Markdown or ePub and go.

That last part is the entire philosophy in one feature. A platform you can leave with all your work and all your readers has to earn you every month instead of trapping you. Most are built so you can’t get out. This one’s built so you can walk.

Where it stands, July 4th

Three codebases. The static apex network, three hundred eighty-five commits deep, a broadsheet press system, self-hosted search and self-hosted analytics because I’d rather not feed a reader’s every move to somebody else’s server.

The members app, security-audited, running the Underground.

The publishing platform, live under the wildcard, with a reader home that unlocks a whole library across every writer at once, a full editor, newsletters, exports, creator payouts.

This week alone: enforced a content-security policy on the publishing app where there’d been none, self-hosted every font so no reader’s page phones Google on load, swept five hundred and thirty-nine pages back above a readability floor, and killed a cross-site-scripting hole in a preview before it ever shipped.

Nearly every feature this month came paired with a security or accessibility fix, because building fast and building loose are two different things and only one of them is worth doing.

It is not finished. A publishing platform three days into its life has one writer on it, and a two-sided thing with one side is a promise, not a proof.

There’s an old news ticker I ripped out because I wasn’t going to do the work to keep it honest. A managed-service page still sitting unfinished. The tail is real, and I’m not going to pretend it isn’t.

But the machine runs. You can read on it, publish on it, get paid through it, and leave with everything if you want to. That’s the thing I said couldn’t be rented and shouldn’t be, built to where you can put your hands on it.

The whole place is open. Walk through it.

If you find a room worth staying in, there’s a key on the wall. If you don’t, you’ve lost nothing but an afternoon. That was always the deal.

// comments
Open full search ↵esc closes · ↑↓ move · ↵ opens