Next.js SaaS Starter — Pack de Contexte
Pack de contexte copiable pour une application SaaS Next.js avec App Router, Better Auth, facturation Stripe et Postgres afin que votre agent IA fonctionne correctement dès la première invite.
CursorClaude CodeCodexWindsurf Next.jsPostgreSQLTypeScriptTailwind
Collez ceci en haut d’une nouvelle tâche pour que l’agent comprenne la structure, les conventions et les limites du projet SaaS avant d’écrire une seule ligne de code.
Contexte du projet
A multi-tenant SaaS application built with Next.js 15 App Router.Authentication is handled by Better Auth with email/password and OAuth providers.Billing uses Stripe Checkout + webhooks. All persistent data lives in PostgreSQLaccessed via Drizzle ORM. The app is deployed to Vercel with a Neon Postgresdatabase.Stack
Next.js 15 (App Router, React Server Components)TypeScript (strict mode, no implicit any)Tailwind CSS v4Better Auth v1 (session cookies, OAuth: Google + GitHub)Drizzle ORM + drizzle-kit migrationsNeon PostgreSQL (serverless driver @neondatabase/serverless)Stripe (Checkout sessions, Customer Portal, webhooks)Resend for transactional emailZod for all input validationStructure du répertoire
src/ app/ # App Router — every folder is a route segment (auth)/ # Sign-in / sign-up pages (unauthenticated layout) (dashboard)/ # Protected routes (authenticated layout) billing/ settings/ api/ auth/[...all]/ # Better Auth catch-all handler webhooks/stripe/ # Stripe webhook endpoint components/ ui/ # shadcn/ui primitives (do not edit generated files) app/ # Application-level components lib/ auth.ts # Better Auth server instance + config auth-client.ts # Better Auth browser client db/ schema.ts # Drizzle table definitions (single source of truth) index.ts # db client (Neon serverless) stripe.ts # Stripe SDK singleton validations/ # Zod schemas, one file per domain middleware.ts # Auth session check + route protectiondrizzle/ migrations/ # Auto-generated SQL — never hand-editdrizzle.config.tsConventions de codage
- Server Components by default. Add "use client" only when you need browser APIs, event handlers, or React hooks.- Data fetching happens in Server Components or Route Handlers — never fetch from a Client Component via useEffect.- Database access only inside lib/db or server actions; never import the db client into a Client Component.- All user input is validated with Zod before hitting the database.- Drizzle schema changes require a migration: `npx drizzle-kit generate` then `npx drizzle-kit migrate`. Never hand-edit files in drizzle/migrations/.- API routes live under app/api/ and export named HTTP-method handlers (GET, POST, etc.). Use NextResponse.json() for responses.- Environment variables accessed via process.env must also be declared in .env.example (no secrets in that file).- Stripe amounts are always in the smallest currency unit (cents).Limites des tâches IA
- Do not switch the ORM, auth library, or email provider without explicit instruction.- Do not edit files under src/components/ui/ — they are shadcn/ui generated and will be overwritten.- Do not hard-code secrets. Use process.env and add the key to .env.example.- Do not add a Pages Router file (pages/ directory). This is App Router only.- All schema changes must go through Drizzle migrations, not raw SQL ALTER.- Middleware (middleware.ts) must remain at the project root, not inside src/app.- Stripe webhook handler must verify the signature with stripe.webhooks.constructEvent before processing any event.llms.txt
Le dépôt expose un fichier /llms.txt à la racine du projet qui liste les conventions clés et les objectifs des fichiers afin que les agents puissent s’orienter sans lire chaque fichier.
# Next.js SaaS StarterFramework: Next.js 15 App RouterAuth: Better Auth (src/lib/auth.ts)DB: Drizzle ORM + Neon Postgres (src/lib/db/schema.ts)Billing: Stripe (src/lib/stripe.ts)Email: ResendValidation: Zod (src/lib/validations/)Protected routes: everything under src/app/(dashboard)/Public routes: src/app/(auth)/ and landing page