/

Better Auth - Next.js Showcase

Next.js 15React 19TypeScriptbetter-authPrismaNeonPostgreSQLOAuth2GitHub OAuthGoogle OAuthResendTailwind CSS v4Server ActionsRSCEdge RuntimeTurbopackVercelMIT

Über dieses Projekt

Project
Open-Source-Lern-Boilerplate, von Grund auf gebaut, um die Trade-offs zwischen client- und serverseitiger Authentifizierung greifbar zu machen — zwei optisch identische Dashboards, zwei komplett unterschiedliche Mechaniken.

Meine Rolle

- Alleiniger Autor: Architektur, Code, Schema, Deployment und Doku - Design des pädagogischen Kontrasts: client useSession() + router.replace() vs server auth.api.getSession() + unauthorized()-Interrupt - Prisma über den HTTP-Adapter (@prisma/adapter-neon) an Neon angebunden — Edge/Serverless-kompatibel - E-Mail/Passwort + GitHub + Google OAuth über better-auth implementiert - Resend-basierte E-Mail-Verifizierung mit autoSignInAfterVerification hinzugefügt - React Server Components CVE-Schwachstellen gepatcht (Security-Härtung) - CLAUDE.md + README.md + .env.template verfasst, damit jeder klonen, konfigurieren und starten kann

Technische Highlights

- Bewusst kein middleware.ts — jede geschützte Route übernimmt ihren eigenen Session-Check und macht den Trade-off sichtbar - Catch-all Auth-Route unter /api/auth/[...all] deckt sämtliche better-auth HTTP-Aufrufe in 4 Zeilen ab - experimental.authInterrupts aktiviert — unauthorized() wirft echten HTTP 401 aus dem RSC, rendert app/unauthorized.tsx in-place, URL bleibt erhalten, kein Client-Flash - Server Actions für Sign-out, Multi-Session-Revoke und Profil-Updates mit revalidatePath() - Turbopack für dev und build - Prisma-Schema mit Cascading Deletes, FK-Indizes, Unique Constraints auf E-Mail + Token

Gelöste Herausforderungen

- Zwei Routen, die identisch aussehen, aber gegensätzlich funktionieren — visuell synchron über eine geteilte UnauthorizedScreen-Komponente - Neon-HTTP- vs TCP-Falle: @prisma/client allein fällt still auf TCP zurück und bricht in Edge-Runtimes — durch verpflichtenden Adapter im Singleton gelöst - Resend-Sandbox-Falle: onboarding@resend.dev liefert nur an die registrierte E-Mail — als Lernpunkt dokumentiert - Session-Wahrheitsgrenze: "better-auth ist die einzige Quelle der Session-Wahrheit" durchgesetzt — kein localStorage-Drift, kein spoofbarer Client-Zustand

Gezeigte Expertise

✅ Beherrschung des Next.js 15 App Routers — RSC, Server Actions, Route-Interceptors, experimental.authInterrupts ✅ Tiefes Verständnis der Auth-Trade-offs: Client-Hooks vs Server-Session, 200 vs 401, URL-Erhalt, Content-Leak-Fenster ✅ Edge/Serverless-Datenbank-Muster mit Neons HTTP-Treiber + Prisma-Adapter ✅ Security-Bewusstsein: CVE-Behebung, Env-Validierung, kein clientseitiger Auth-Zustand ✅ Lehren durch Code: bewusste architektonische Kontraste, eingebettete Docs, MIT-lizenzierter wiederverwendbarer Seed
Auf GitHub anschauen