GitHub 登录(Google 可选),基于 arctic 实现 OAuth,使用带轮换的 Cookie 会话
saas-starter — Next.js SaaS模板
作者 GenPM-net
基于 Next.js 的 SaaS 起始模板,集成 GitHub 登录、Stripe 订阅、套餐权限控制、事务邮件与 Postgres/Drizzle,后端逻辑以 TypeScript 源码形式放在 src/lib 中。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 2
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
Stripe 订阅支持结账、客户门户和幂等 webhook,订阅状态镜像到 Postgres
通过 hasEntitlement(user, 'pro') 在服务端进行套餐权限判断
首次登录时通过 Resend 发送 React Email 欢迎邮件,开发环境输出到控制台
Postgres + Drizzle 数据层,每个模块有独立 schema.ts,迁移文件位于 drizzle/
每个模块附带 AGENTS.md,供 Claude Code、Cursor、Copilot、Codex 等工具了解模块用法
模板详细介绍
该模板面向需要快速搭建带订阅计费能力的 SaaS 应用场景。README 说明其包含 GitHub 登录(Google 可选)、Stripe 订阅(结账、客户门户、幂等 webhook 同步到 Postgres)、套餐权限控制(通过 hasEntitlement 判断)、首次登录发送欢迎邮件(开发环境打印到控制台)、Postgres + Drizzle 数据层,以及为 AI 编码代理准备的模块说明文件。后端代码位于 src/lib,可直接修改。
使用前需准备 Postgres 数据库、GitHub OAuth 应用、Stripe 测试密钥及若干环境变量,并执行 Drizzle 迁移。本地开发需转发 Stripe webhook 事件。README 还介绍了通过 GenPM 安装额外模块(如 RBAC、存储、任务队列)的方式,但模板本身不包含这些模块。模板未说明生产部署的完整步骤、性能指标或安全审计情况,仅提供 Vercel 部署按钮和 MIT 许可证。
适合你的项目吗?
适用场景
- 需要快速启动一个带 GitHub 登录和 Stripe 订阅计费的 SaaS 项目
- 希望后端鉴权、计费、邮件逻辑以可读的 TypeScript 源码形式存在,便于直接修改
- 使用 AI 编码助手参与开发,希望模块有明确的说明文件辅助修改
- 需要将 Stripe 订阅状态同步到自有 Postgres 数据库并进行套餐权限控制
适合人群
- 熟悉 Next.js、TypeScript 和 Postgres 的开发者
- 需要订阅制 SaaS 基础骨架而非完整成品项目的团队
- 愿意自行配置 GitHub OAuth、Stripe 和邮件服务的项目
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
通过 npx degit 或 GitHub 的 Use this template 获取代码,然后执行 npm install
- 2
复制 .env.example 到 .env.local,并填写 DATABASE_URL、AUTH_SECRET、GitHub OAuth 凭据、Stripe 测试密钥、STRIPE_PRICE_PRO、APP_URL 等变量
- 3
执行 Drizzle 迁移命令初始化数据库,然后运行 npm run dev
- 4
本地开发时使用 stripe listen --forward-to localhost:3000/api/stripe/webhook 转发 Stripe 事件
- 5
生产环境需要配置 RESEND_API_KEY 和 EMAIL_FROM,开发环境邮件会打印到控制台
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- 需要自备 Postgres 数据库(本地、Neon、Supabase 或 RDS 均可),模板本身不提供数据库服务。
- 需自行创建 GitHub OAuth 应用并提供 GITHUB_CLIENT_ID 与 GITHUB_CLIENT_SECRET,回调地址为 <APP_URL>/auth/callback/github。
- 需自备 Stripe 测试模式密钥与 webhook 密钥,并配置 webhook 端点及指定事件。
- 需自行创建 Stripe 月度 Pro 价格并提供其 price_… 标识。
- 生产环境必须配置 RESEND_API_KEY 与 EMAIL_FROM;开发环境可省略,邮件仅打印到控制台。
- 本地开发需运行 stripe listen 将 Stripe 事件转发到 /api/stripe/webhook,否则订阅状态无法同步。
- 使用前需执行 Drizzle 迁移命令初始化数据库结构。
- RBAC、存储、任务队列等额外模块需通过 GenPM 另行安装,模板本身不包含这些模块。
- 安装额外模块需使用 GenPM 安装脚本或 CLI,属于外部工具依赖。
- src/lib 下的各模块各自附带 LICENSE 文件,使用或再分发时需一并保留其许可声明。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
| `DATABASE_URL` | Any Postgres: local, [Neon](https://neon.tech), Supabase, RDS. |
README 原文
| `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | A [GitHub OAuth app](https://github.com/settings/developers) with callback `<APP_URL>/auth/callback/github`. |
README 原文
| `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET` | Test-mode keys. Webhook endpoint `<APP_URL>/api/stripe/webhook` with `checkout.session.completed` and `customer.subscription.created/updated/deleted`. |
README 原文
| `STRIPE_PRICE_PRO` | The `price_…` id of your monthly Pro price. |
README 原文
| `RESEND_API_KEY`, `EMAIL_FROM` | Optional in development (emails are printed). Required in production. |
README 原文
Locally, forward Stripe events: `stripe listen --forward-to localhost:3000/api/stripe/webhook`.
README 原文
node --env-file=.env.local node_modules/drizzle-kit/bin.cjs migrate --config src/lib/db/drizzle.config.ts
README 原文
genpm add @core/rbac @core/storage @core/jobs
README 原文
curl -fsSL https://genpm.net/install.sh | sh # or: npx @genpm-net/cli <command>
README 原文
https://github.com/GenPM-net/saas-starter/blob/main/LICENSEhttps://github.com/GenPM-net/saas-starter/blob/main/README.mdMIT. The modules in `src/lib` are MIT as well (see each `LICENSE`).
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-17。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 85 / 100
- 技术栈
- Next.js · React
- 网站类型
- SaaS · 启动器
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-10-16
- 截图检查日期
- 2026-10-17
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Next.js。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261018 · 2026-10-18
查看当时使用的来源资料
SHA-256: b67aae9f102d833174c46aa1352749d0101cd249cff566276ac4597fc13abc1d
2026-10-17T01:55:12.739Z
来源文件 / 仓库# Next.js SaaS Starter **Next.js 16 + GitHub login + Stripe subscriptions + plan gating + transactional email + Postgres/Drizzle.** No auth library to configure, no billing SDK to learn: the whole backend is plain TypeScript in `src/lib`, readable and yours to change, installed with [GenPM](https://genpm.net) and pinned to verified commits. [](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FGenPM-net%2Fsaas-starter&env=DATABASE_URL,AUTH_SECRET,GITHUB_CLIENT_ID,GITHUB_CLIENT_SECRET,STRIPE_SECRET_KEY,STRIPE_WEBHOOK_SECRET,STRIPE_PRICE_PRO,APP_URL&envDescription=Postgres%20URL%2C%20a%2032-char%20AUTH_SECRET%2C%20a%20GitHub%20OAuth%20app%20and%20Stripe%20test%20keys&envLink=https%3A%2F%2Fgithub.com%2FGenPM-net%2Fsaas-starter%23environment-variables&project-name=saas-starter&repository-name=saas-starter)  ## What's included | Feature | Where | How | |---|---|---| | GitHub login (Google optional) | `src/lib/auth` | Cookie sessions with rotation, OAuth via [arctic](https://arcticjs.dev). Routes in `src/app/auth`. | | Stripe subscriptions | `src/lib/billing`, `src/lib/stripe` | Checkout, customer portal, idempotent webhooks mirrored into Postgres. | | Plan gating | `src/lib/billing/plans.ts` | `await hasEntitlement(user, 'pro')` anywhere on the server. | | Welcome email | `src/lib/email` | React Email templates sent with Resend on first login (console in development). | | Postgres + Drizzle | `src/lib/db` | One client, a `schema.ts` per module, migrations in `drizzle/`. | | Rules for your AI agent | `src/lib/*/AGENTS.md` | Claude Code, Cursor, Copilot and Codex know how each module works before changing it. | ## Quick start ```bash npx degit GenPM-net/saas-starter my-saas && cd my-saas # or "Use this template" on GitHub npm install cp .env.example .env.local # fill it in (see below) node --env-file=.env.local node_modules/drizzle-kit/bin.cjs migrate --config src/lib/db/drizzle.config.ts npm run dev ``` Open http://localhost:3000, sign in with GitHub, then upgrade with Stripe's test card `4242 4242 4242 4242`. Locally, forward Stripe events: `stripe listen --forward-to localhost:3000/api/stripe/webhook`. ## Environment variables | Variable | What | |---|---| | `DATABASE_URL` | Any Postgres: local, [Neon](https://neon.tech), Supabase, RDS. | | `AUTH_SECRET` | 32+ random chars: `openssl rand -base64 32`. | | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | A [GitHub OAuth app](https://github.com/settings/developers) with callback `<APP_URL>/auth/callback/github`. | | `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET` | Test-mode keys. Webhook endpoint `<APP_URL>/api/stripe/webhook` with `checkout.session.completed` and `customer.subscription.created/updated/deleted`. | | `STRIPE_PRICE_PRO` | The `price_…` id of your monthly Pro price. | | `APP_URL` | Public URL of the app (used in emails). | | `RESEND_API_KEY`, `EMAIL_FROM` | Optional in development (emails are printed). Required in production. | ## Add more modules Need roles and permissions, file uploads, background jobs, a blog or a whole store? ```bash curl -fsSL https://genpm.net/install.sh | sh # or: npx @genpm-net/cli <command> genpm search roles genpm add @core/rbac @core/storage @core/jobs ``` Or ask your agent: run `genpm mcp setup` once, then *"add role-based access control with genpm"*. Every install shows a dry-run plan first, never runs install scripts, and lands as source code you own. `genpm outdated` and `genpm update` bring module updates in with a three-way merge that keeps your edits. Browse the catalog at [genpm.net](https://genpm.net). ## How this template was made ```bash npx create-next-app@latest saas-starter --ts --app --src-dir --tailwind --eslint genpm add @core/billing @core/email --install-deps # pulls @core/auth, @core/db and @core/stripe ``` Then the integration steps from each module's `AGENTS.md`: route handlers in `src/app`, the price → feature map in `plans.ts`, `allowImportingTsExtensions` in `tsconfig.json`, and the landing and account pages. `genpm.lock` records the exact commit of every module. ## License MIT. The modules in `src/lib` are MIT as well (see each `LICENSE`).
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

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 · 启动器
