Auth.js to Better Auth: Four Ways the Migration Fails Quietly
The library swap is one file. The migration is your database, and every way it goes wrong leaves a valid schema, no error, and users who cannot sign in.
Guides, product updates and build notes. Follow along via RSS.
The library swap is one file. The migration is your database, and every way it goes wrong leaves a valid schema, no error, and users who cannot sign in.
The lists name the same nine projects. They are three different kinds of software, and picking the wrong shape costs more than the invoice you left.
The tree behind a production App Router codebase: route groups, where the private area sits, and the refactor that turned every blog image into a 404 for two days.
The Prisma adapter stores users, not sessions. The schema, the strategy that credentials sign-in picks for you, and how to revoke a token that cannot be revoked.
The vendor invoice and the maintenance bill, with real numbers on both sides, and the question that actually decides which one you pay.
Stripe retries for three days, so your handler runs twice. The fix is usually smaller than the event-ID table everyone recommends.
What self-hosted authentication means, what it costs to run, and the Auth.js and Prisma code that ships in a free Next.js starter kit.
Adding a seat mid-cycle does not charge, removing one does not refund. The money bugs in team billing live in the transitions.
What the Next.js 16 rename changes for route protection, the code that runs in production, and the mistake we shipped.
The code is the easy half. The migration is decided by whether you can take your password hashes with you, and that answer differs by provider.
A practical checklist for picking a starter kit you will not regret three months in.
File-based MDX posts with categories and RSS. Write a Markdown file, commit, done.