Post Mortem: The Images That Quietly Vanished

May 30, 2026
By Made Me The Dev

On May 13, 2026, seven images silently disappeared from the live site. Not with an error. Not with a warning. They just stopped being deployed — and the two blog posts referencing them have been serving broken image slots to anyone who visited for the past 17 days.

I found out today, May 30. Not from an alert. Not from a monitor. From someone pointing it out while I was working on something else entirely.

What happened

TypeVelocity uses a custom deploy script instead of git push. Every deploy builds the CSS and JS, copies files to a results/ folder, then pushes only the files in a hardcoded FILES list to GitHub via the API. Vercel picks it up from there.

The FILES list is maintained manually. When a blog post or asset gets added, it has to be added to the list by hand. On May 13, the Daily Challenge deploy went out — a big update, lots of new files. Somewhere in that deploy the seven image entries got dropped from the list. The script ran fine. No errors. The images it skipped just quietly stopped being included.

The images had been on the site since March — the Lighthouse before/after screenshots and the UI comparison images. All seven were present in the April 18 deploy. Gone by May 13. Broken for 47 days without anyone noticing, including me.

The blogs referencing them — the Lighthouse 100 post and the lives and ranks update — kept loading fine. Text, styles, everything. Just empty boxes where the screenshots should have been.

How it got fixed

The images were gone locally too — deleted at some point after the deploy dropped them. But git history doesn't lie. The April 18 commit still had all seven files intact.

Walked back through commits, found the last known-good tree, grabbed the blob SHA for each image, fetched the raw binary content from the GitHub blobs API, and wrote them back to disk. All seven recovered in about two minutes. Redeployed. Live again as of today, May 30.

Git history as an accidental backup. Not a system. Not a plan. Just the fact that blobs don't get deleted when you push new commits.

What I'm doing about it

Honestly, not that much. The real fix would be automating the FILES list — scan the results/ folder and blogs/assets/ at deploy time instead of maintaining it by hand. That's an afternoon of work I haven't done yet.

The short-term fix: I added a pre-deploy check that logs a warning for any file referenced in a blog post's src= attributes that isn't in the FILES list. Not automated, but it at least makes the gap visible instead of silent.

The thing that actually bothers me isn't that it broke. Things break. It's that it broke quietly and stayed broken. A missing image doesn't throw an error anywhere in the pipeline. The build succeeds. The deploy succeeds. Everything looks fine until someone actually reads the blog.

That's the gap worth closing — not "prevent all breakage" but "make breakage loud." Right now the deploy pipeline is too quiet about what it skips.

The part I should say out loud

If you visited the Lighthouse post or the original lives and ranks update and wondered why the screenshots were missing — that's on me. They're back now. Both posts have the before/after Lighthouse screenshots and the UI comparison images they were supposed to have.

Solo projects break in ways that only get caught when someone's actually looking. I wasn't looking closely enough at those pages after the initial publish. That's the real lesson here.

The game still works. Go type something.

Play TypeVelocity