预置 Better Auth 认证,支持邮箱密码注册登录、会话管理、Google 与 GitHub OAuth 以及 TOTP 双因素认证
next-launch — Next.js SaaS模板
作者 adityayaduvanshi
NextStack 是一个基于 Next.js 15 App Router 的启动模板,预置 Better Auth 认证、Prisma 7 与 PostgreSQL 数据库、shadcn/ui 组件库和 Tailwind CSS v4,并提供邮箱密码、OAuth、双因素认证及受保护路由等配置。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 2
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
使用 Prisma 7 与 PostgreSQL,提供类型安全的数据库客户端和迁移命令
预装 50 多个 shadcn/ui 组件,搭配 Tailwind CSS v4 与 Geist 字体
通过中间件实现受保护路由,并可用单个 AuthPage 组件复用登录与注册页面
使用 next-themes 实现明暗主题切换
项目名称、描述和 URL 集中在 config/app.ts 一处配置
模板详细介绍
该模板面向需要快速搭建带认证与数据库的 Next.js 应用的开发者。README 说明其技术栈包括 Next.js 15(App Router、Turbopack)、TypeScript、Better Auth、Prisma 7(PostgreSQL)、shadcn/ui、Tailwind CSS v4 和 Geist 字体。功能上提供邮箱密码注册登录与会话管理、可通过环境变量启用的 Google 与 GitHub OAuth、基于 TOTP 的双因素认证、基于中间件的受保护路由、类型安全的 Prisma 客户端、50 多个预装 shadcn/ui 组件、使用 next-themes 的明暗主题,以及由单个 AuthPage 组件驱动的登录与注册模板。项目配置集中在 config/app.ts,用于修改应用名称、描述和 URL。README 未提供关于性能、生产就绪程度或除上述功能外的其他能力说明。
适合你的项目吗?
适用场景
- 需要快速搭建带邮箱密码、OAuth 和双因素认证的 Next.js 应用
- 使用 Prisma 与 PostgreSQL 作为类型安全数据库层的项目
- 希望直接复用 shadcn/ui 组件库和 Tailwind CSS 样式的界面开发
- 需要受保护路由和会话管理的后台或用户中心类应用
- 通过 Vercel 或 Docker 部署的 Next.js 应用
适合人群
- 熟悉 Next.js App Router 与 TypeScript 的开发者
- 需要预置认证与数据库配置以缩短初始搭建时间的项目
- 计划使用 PostgreSQL 和 Prisma 进行数据建模的团队
- 希望以 shadcn/ui 为基础构建自定义界面的开发者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
克隆仓库后运行 npm install 安装依赖
- 2
复制 env.example 为 .env 并填写 NEXT_PUBLIC_APP_URL、BETTER_AUTH_SECRET、BETTER_AUTH_URL 和 DATABASE_URL 等必填变量
- 3
运行 npx prisma migrate dev --name init 推送数据库结构
- 4
运行 npm run dev 启动开发服务器,默认访问 http://localhost:3000
- 5
OAuth 提供商需在 .env 中配置对应客户端 ID 与密钥后自动启用,回调地址为 /api/auth/callback/{provider}
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- 必须提供 PostgreSQL 数据库连接字符串(DATABASE_URL),项目依赖外部 PostgreSQL 服务才能运行。
- 必须自行生成并配置 BETTER_AUTH_SECRET 随机密钥,否则认证功能无法正常工作。
- 启用 Google OAuth 需自行申请并配置 GOOGLE_CLIENT_ID 与 GOOGLE_CLIENT_SECRET,属于外部服务账号要求。
- 启用 GitHub OAuth 需自行申请并配置 GITHUB_CLIENT_ID 与 GITHUB_CLIENT_SECRET,属于外部服务账号要求。
- 使用 OAuth 需在对应提供商后台自行设置回调地址,属于外部服务配置要求。
- 部署到 Vercel 时需在平台仪表盘中手动配置全部环境变量,包括生产域名对应的 URL。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
| `DATABASE_URL` | Yes | PostgreSQL connection string |
README 原文
| `BETTER_AUTH_SECRET` | Yes | Random secret — run `openssl rand -base64 32` |
README 原文
| `GOOGLE_CLIENT_ID` | Optional | Enables Google OAuth |
README 原文
| `GITHUB_CLIENT_ID` | Optional | Enables GitHub OAuth |
README 原文
2. Set the OAuth callback URL in your provider's dashboard:
README 原文
https://github.com/adityayaduvanshi/next-launch/blob/master/LICENSEhttps://github.com/adityayaduvanshi/next-launch/blob/master/README.mdSet all environment variables in the Vercel dashboard under **Settings → Environment Variables**. Make sure `NEXT_PUBLIC_APP_URL` and `BETTER_AUTH_URL` are set to your production domain.
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-14。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 80 / 100
- 技术栈
- Next.js · React
- 网站类型
- SaaS · 启动器
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-04-12
- 截图检查日期
- 2026-10-14
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Next.js。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261015 · 2026-10-15
查看当时使用的来源资料
SHA-256: 24992ad20f8d7108f2a9e2c6485c8801fba12d405ea8bd08d3ced81ed157d9fa
2026-10-14T18:12:19.231Z
来源文件 / 仓库# NextStack
A production-ready Next.js starter with authentication, a type-safe database, and a complete UI system — all pre-configured so you can start building on day one.
## Stack
| Layer | Technology |
|---|---|
| Framework | [Next.js 15](https://nextjs.org) (App Router, Turbopack) |
| Language | [TypeScript](https://www.typescriptlang.org) |
| Auth | [Better Auth](https://better-auth.com) |
| Database ORM | [Prisma 7](https://www.prisma.io) (PostgreSQL) |
| UI Components | [shadcn/ui](https://ui.shadcn.com) |
| Styling | [Tailwind CSS v4](https://tailwindcss.com) |
| Fonts | [Geist](https://vercel.com/font) |
## Features
- **Email/password auth** — sign up, sign in, session management
- **OAuth** — Google and GitHub (enable by adding env vars)
- **Two-factor authentication** — TOTP-based 2FA via Better Auth plugin
- **Protected routes** — middleware-based route protection, ready to extend
- **Type-safe database** — Prisma client with full TypeScript inference
- **Component library** — 50+ shadcn/ui components pre-installed
- **Dark mode** — light/dark theme with `next-themes`
- **Reusable auth templates** — single `AuthPage` component drives both sign-in and sign-up
- **Project config** — one file (`config/app.ts`) to rename and rebrand everything
---
## Getting Started
### 1. Clone the repository
```bash
git clone https://github.com/adityayaduvanshi/next-launch.git
cd next-launch
```
### 2. Install dependencies
```bash
npm install
```
### 3. Set up environment variables
```bash
cp env.example .env
```
Then fill in your values (see [Environment Variables](#environment-variables) below).
### 4. Push the database schema
```bash
npx prisma migrate dev --name init
```
### 5. Start the dev server
```bash
npm run dev
```
Open [http://localhost:3000](http://localhost:3000).
---
## Environment Variables
| Variable | Required | Description |
|---|---|---|
| `NEXT_PUBLIC_APP_URL` | Yes | Your app's public URL (e.g. `http://localhost:3000`) |
| `BETTER_AUTH_SECRET` | Yes | Random secret — run `openssl rand -base64 32` |
| `BETTER_AUTH_URL` | Yes | Same as `NEXT_PUBLIC_APP_URL` |
| `DATABASE_URL` | Yes | PostgreSQL connection string |
| `GOOGLE_CLIENT_ID` | Optional | Enables Google OAuth |
| `GOOGLE_CLIENT_SECRET` | Optional | Enables Google OAuth |
| `GITHUB_CLIENT_ID` | Optional | Enables GitHub OAuth |
| `GITHUB_CLIENT_SECRET` | Optional | Enables GitHub OAuth |
> OAuth providers are **automatically disabled** if their env vars are not set — no code changes needed.
---
## Project Structure
```
next-app/
├── app/
│ ├── (auth)/ # Auth route group
│ │ ├── _components/
│ │ │ ├── auth-form.tsx # Shared sign-in / sign-up form
│ │ │ └── auth-page.tsx # Page shell with logic & layout
│ │ ├── sign-in/[[...sign-in]]/page.tsx
│ │ └── sign-up/[[...sign-up]]/page.tsx
│ ├── (marketing)/ # Public marketing pages
│ │ ├── _components/
│ │ │ └── theme-toggle.tsx
│ │ └── page.tsx # Landing page
│ ├── globals.css
│ └── layout.tsx # Root layout with metadata
├── config/
│ └── app.ts # ← Project name, description, URL
├── lib/
│ ├── auth/
│ │ ├── auth.ts # Better Auth server config
│ │ ├── auth-client.ts # Better Auth browser client
│ │ └── index.ts
│ ├── db.ts # Prisma client singleton
│ └── utils.ts
├── prisma/
│ └── schema.prisma # Database schema
├── components/
│ └── ui/ # shadcn/ui components
└── env.example
```
---
## Customization
### Rename the project
Edit `config/app.ts` — this is the single source of truth for your app's name, description, and URL:
```ts
export const appConfig = {
name: "YourApp",
description: "Your app description",
url: "https://yourapp.com",
}
```
### Add a database model
1. Add your model to `prisma/schema.prisma`
2. Run `npx prisma migrate dev --name your-model`
3. Use it anywhere via `import db from "@/lib/db"`
```ts
import db from "@/lib/db"
const posts = await db.post.findMany({
where: { authorId: session.user.id },
})
```
### Access the session in a Server Component
```ts
import { headers } from "next/headers"
import { auth } from "@/lib/auth"
export default async function Page() {
const session = await auth.api.getSession({
headers: await headers(),
})
if (!session) redirect("/sign-in")
return <div>Hello, {session.user.name}</div>
}
```
### Add an OAuth provider
1. Add credentials to `.env`:
```
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret
```
2. Set the OAuth callback URL in your provider's dashboard:
```
http://localhost:3000/api/auth/callback/google
```
That's it — the provider activates automatically.
### Enable / disable Two-Factor Auth
2FA is enabled by default via the `twoFactor()` plugin in `lib/auth/auth.ts`. Remove it from the `plugins` array to disable it.
---
## Available Scripts
```bash
npm run dev # Start dev server (Turbopack)
npm run build # Production build
npm run start # Start production server
npm run typecheck # TypeScript type check
npm run lint # ESLint
npm run format # Prettier
```
---
## Deployment
### Vercel (recommended)
```bash
npm i -g vercel
vercel
```
Set all environment variables in the Vercel dashboard under **Settings → Environment Variables**. Make sure `NEXT_PUBLIC_APP_URL` and `BETTER_AUTH_URL` are set to your production domain.
### Docker / other platforms
Build the production image:
```bash
npm run build
npm run start
```
The app runs on port `3000` by default.
---
## License
MIT — use this for anything, personal or commercial.
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

ai-website-cloner-template
Clone any website with one command using AI coding agents
Next.js · 启动器

Next.js SaaS Starter
Next.js SaaS Starter 是 Next.js 官方维护的 SaaS 起点模板,定位介于学习资源和可直接部署的脚手架之间。
Next.js · SaaS

Next.js Commerce
Next.js Commerce 是 Vercel 团队维护的电商启动模板,基于 Next.js App Router 构建,采用服务端渲染、React Server Components、Server Actions …
Next.js · 电商

Next-js-Boilerplate
Next-js-Boilerplate 是一个面向 Next.js 16、Tailwind CSS 4 和 TypeScript 的启动器,核心定位是开发者体验优先。
Next.js · 启动器

tailwind-nextjs-starter-blog
tailwind-nextjs-starter-blog 是一个面向个人技术博客的 Next.js 与 Tailwind CSS 启动模板,其 v2 版本基于 App Router 与 React Server Comp…
Next.js · 博客

next-forge
Production-grade Turborepo template for Next.js apps.
Next.js · 启动器
