# How I Built a Production-Ready AI SaaS Boilerplate with Next.js 16 — Full Stack Breakdown

> Source: <https://dev.to/margot_orin/how-i-built-a-production-ready-ai-saas-boilerplate-with-nextjs-16-full-stack-breakdown-263e>
> Published: 2026-10-29 18:02:41+00:00

Every time I started a new AI SaaS project, I spent the first 2-3 weeks on the same things: authentication, Stripe integration, database setup, AI provider plumbing. Over and over.

So I built **ShipAI** — a production-ready Next.js 16 boilerplate that has all of this pre-configured and ready to customize.

| Layer | Tech | 
|---|---|
| Framework | Next.js 16 (App Router, TypeScript, Turbopack) | 
| Auth | NextAuth.js (Google, GitHub, email/password) | 
| Payments | Stripe (subscriptions, webhooks, customer portal) | 
| Database | Prisma + PostgreSQL | 
| AI | Vercel AI SDK v4 (OpenAI + Anthropic) | 
| UI | Tailwind CSS + 15 shadcn/ui components | 
|  | Resend | 
| Deploy | Vercel (one-click) | 

48 files. 16 routes. Zero TypeScript errors.

If you're upgrading from v3, heads up: `useChat` no longer exposes `input`, `handleInputChange`, or `append`. The new API uses `sendMessage` and a transport pattern (`DefaultChatTransport`). I spent time figuring this out so you don't have to.

`export const dynamic = "force-dynamic"` no longer works with Cache Components enabled. Use `connection()` from `next/server` plus `export const instant = false` for dynamic server pages.

`checkout.session.completed` can fire before the subscription record exists in your database. Always use `prisma.subscription.upsert()` instead of separate create/update calls.

Prisma v8 has a completely different CLI and is more of a platform play. For a developer-friendly boilerplate, Prisma v5 with the familiar `npx prisma generate` workflow is the right choice.

If you're building AI SaaS products and want to skip the boilerplate phase:

Happy to answer any questions about the architecture or technical decisions in the comments!
