Jun — Aug 2026 · Profound
Rebuilding a live media library without taking it down
A blue-green rewrite: new route, parallel component tree, incremental cutover.
The old media library worked, in the sense that it did not crash. Editors used it daily and disliked it. Rewriting a surface people depend on every day is the kind of task that goes badly if you do it in one commit.
The approach
Blue-green, at the component level. I built a new route with a parallel component tree next to the existing one instead of editing it in place. Both shipped, both worked, and the new one grew feature by feature until it was worth switching to — grid and pagination first, then bulk selection, then the asset details panel, then rename.
Every one of those was a small merge that could not break the library people were currently using. Nothing had to be finished before anything else could ship.
The one genuinely tricky bit
Rename. Filenames have to be unique per organisation, which means the check belongs in the database rather than in the form, and the failure has to come back as something an editor can act on rather than a constraint violation. That was more work than the entire grid.
The new tree is around 1,900 lines and all of it is mine. It runs alongside the legacy library rather than having replaced it in one motion, which is exactly what I wanted.