
The Standup
what shipped, what broke, and the shortcut that saved the most time
Stay lazy.
New tips delivered weekly. No spam.
Shipped
How lazy.dev was built: a tutorial site that deleted its own database
Zev Uhuru
operator, lazy.dev
Aug 21, 20264 min readmetanext.jssimplify
Prisma, SQLite, NextAuth, an admin panel — all shipped, all removed. What replaced them was one TypeScript array, and the site got faster and easier to run.
This site started with the architecture you'd sketch on a whiteboard: Postgres-shaped schema in Prisma, SQLite underneath, NextAuth with GitHub OAuth, an admin CRUD panel behind the login, API routes for videos and posts. All of it worked. All of it is gone.
What went wrong with being right
Nothing broke dramatically. The database simply didn't fit the deploy target — SQLite has no persistent filesystem on serverless hosts — and the admin panel existed only to edit about twenty rows that one person ever touched. Every piece was defensible individually. Together they were a maintenance surface built for a site that didn't exist yet.
What replaced it
A static array in src/data/videos.ts with four helper functions. Adding a tutorial is now editing a file and pushing. There's no connection pooling, no migration step, no auth to protect an editor that had one user, and no hosting bill for the database.
The rule that came out of it
Infrastructure earns its place by removing pain that already exists, not by anticipating pain that might. The archived code sits in _archive/ with a note about when to bring it back: multiple contributors, draft scheduling, or server-side search. Until one of those is true, the array wins.
The best migration this year was the one that deleted the database.
The magazine you're reading follows the same rule. It's a TypeScript array of posts, rendered by two routes. When it needs to be more than that, it can be — and there's a seam already in place for reading posts from Esy, the same way the video list does.
written by
Zev Uhuru
Runs the board, builds the thing, writes down what actually worked. Every issue starts with something that shipped — usually with an agent doing the typing.
