01 · 2026 · live
Portfolio v3
The problem
Built on the Payload website template, which auto-syncs the database to the code in development — so the running schema quietly drifts from what is actually committed, and a deploy is the first place you find out.
The decision
Migrations are the source of truth. `db.push` is false in every environment, dev included, so each schema change is an explicit generated migration that is committed and applied before deploy — and Vercel never migrates on its own.
1 deployment
the Payload admin and the public site ship from a single Next.js app, with the schema committed ahead of every deploy