Skip to content
Delivered

Fedi's portal was rebuilt on the current platform with no DNS change and a byte-identical history

Fedi's portal drifted 170 schema versions behind. We rebuilt it on the current platform with no DNS change and grafted its custom surfaces back on.

Client
Fedi
Sector
Bitcoin infrastructure, early-stage company
System
Custom agents, Knowledge brain, Workflow studio
Live since
Jun 2026
Last measured
20 Aug 2026
  1. The fork had drifted about 170 schema versions behind the platform.

    Everything still worked. It just could not receive anything new, which meant the client was paying for a product that had stopped arriving.

  2. The custom pages looked bolted on, because they were.

Everything worked. Nothing new could arrive.

Fedi's portal was forked from our platform in April 2026 and then did what forks do. The platform kept moving. The fork did not. By the time we looked at it properly, it was roughly 170 schema versions behind.

The thing about that kind of drift is that it produces no symptoms. Every page loaded. Every custom workflow ran. Nobody filed a bug, because there was no bug to file. What there was instead was an absence: every improvement shipped to every other client in those months had stopped arriving here, and the client was paying for a product that had quietly stopped being delivered.

A rebuild, underneath the people using it

We chose to rebuild rather than migrate. Migrating 170 versions of schema across a fork with its own tables is a sequence of small risks, each of which has to go right, and the end state is a database nobody fully trusts. A rebuild has one large risk, which is the cutover, and you can plan a cutover.

So: the current platform, a fresh database, and the custom work grafted back on. Twenty-one route segments that exist in this client's repository and in no other and not in the platform. Release documentation drafted from a signature-verified webhook and held behind an approval. Help-centre updates proposed with a diff and a preview and approved one item at a time rather than in a batch, because a batch hides the bad one. A dashboard for what the models actually cost, per surface.

The cutover needed no DNS change at all. The portal is served through a shared router, so moving it meant changing three database pointers and the brand variables. Nobody watching had a reason to notice.

The history moved with it, and we checked rather than assumed: three conversations, fourteen messages, nine read receipts, compared on both sides afterwards. The old database was kept intact as a one-command way back, which we did not need and would have wanted badly if we had.

Nothing publishes itself

Every one of the three workflows ends at a person. A release event produces a draft, not a document. A proposed help-centre change produces a diff, not an edit. Approval is per item, and the reject path carries a reason, because a rejection nobody explains teaches the system nothing.

One thing that came out of this build outlived the engagement. Release documentation was the first job on our platform that ran inside the application, rather than posting out to an external pipeline and waiting. That pattern is now how every in-application job is written, for every client. The work was paid for once by one company and every client since has ridden on it.

A clean rebuild that nobody has opened

3 of 3
conversations migrated and compared byte for byte

Twenty-one bespoke route segments. A hundred and thirty-one documents indexed in the brain. Three of three conversations migrated with every message and every read receipt intact. Zero DNS changes at cutover. A twenty-nine page manual.

And zero client accounts have signed in to the rebuilt portal.

The engagement was stopped at the client's request during a restructuring in August, and we left the portal, the brain and all three workflows running rather than tearing them down. That is the context, and it is not an excuse. The rebuild was sound and nobody used it, and a case study that printed the first half of that sentence without the second would not be worth reading.

What the engagement did produce, permanently, is the in-application job pattern that every client now runs on. If you want the version of this with people actually using the thing, the two knowledge-brain builds are the ones to read: one here and one here.

What we measured

3 of 3conversations migrated, byte for byteBuild artefact
How this was measured

14 messages and 9 read receipts, compared after the move rather than assumed.

0client accounts that have signed in to the rebuilt portalSystem loggedby Advizr, 20 Aug 2026
How this was measured

Read from the tenant profile table. The rebuild was sound and nobody has used it.

What broke, and how we know it is fixed

Eight call sites compiled perfectly and would have failed the moment anyone used them.

Why
The fork's own tables collided by name with the platform's, so they were renamed into a namespace. Most references moved with the rename because a type-checker could see them. Eight could not: they were relationship names written inside query strings, which are text as far as the compiler is concerned. Text compiles. Text also does not exist at runtime.
The fix
Every query string was read by hand against the new names, because there was no tool that could have found them.
How we know
Each of the eight was exercised against the rebuilt database rather than type-checked. A green build had already told us they were fine once.

What we did not measure

We did not measure time saved on release documentation or help-centre upkeep, because no baseline was recorded before the rebuild and inventing one afterwards would be worse than having none. The harder number is the one above: the portal, the brain and all three custom workflows are live, and no client account has opened them. The engagement was stopped at the client's request during a restructuring in August, and the systems were left running rather than torn down.

Built by

  • James BoothEngineer of record

What we would do again

  • A fork that cannot take an update is already broken, even while everything on it works. The cost of the drift is everything the client stops receiving, and none of it shows up as an error.
  • Rename a table and the compiler will follow it everywhere except inside a string. Relationship names written into query text compile cleanly and fail at runtime, and no amount of green build tells you otherwise.
  • Migrate history by comparing it, not by trusting the copy. Counting three conversations, fourteen messages and nine read receipts on both sides took minutes and is the only reason we can say the move was clean.

More stories

Every story

Run your whole company on AI.

Tell us how your business runs. If we're not the right fit, we'll say so on the call.

Your custom strategy and systems, delivered in under a month. Your named people using them every week by day 30. Or we keep working for free until both are true.

The page ends on a hand drawn chart of the sky that draws itself as it comes into view, with a small sail ship crossing its open sky from a far star to a beacon and a small planet.

© 2026 Advizr AI Inc. · Vancouver, BC, Canada

Delivered in under a month. Used by your named people every week by day 30. Or we work free until both are true.