租户模型为 User ↔ Membership ↔ Organization,租户页面统一经 getOrgContext(slug) 校验归属
rovidev-saas-starter — Next.js SaaS模板
作者 rovidev95
基于 Next.js App Router 的多租户 SaaS 启动器,包含组织、RBAC、套餐限额与 Stripe 订阅及幂等 Webhook。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
RBAC 定义 OWNER / ADMIN / MEMBER 三种角色并映射到权限模块
套餐席位与项目限额在服务端强制执行
Stripe 结账、客户门户与 Webhook 齐备,Webhook 先记录事件 id 再处理以避免重复副作用
邮箱密码认证使用 bcrypt 与 jose 签名的 JWT 会话 Cookie
提供 CI 工作流及覆盖 rbac、plans、billing、slug 的单元测试
模板详细介绍
这是一个多租户 SaaS 骨架,使用 Next.js App Router 构建,覆盖多数 SaaS 应用起步阶段需要的基础设施:认证、组织、基于角色的访问控制、套餐限额,以及带幂等处理的 Stripe 订阅 Webhook。租户模型为 User ↔ Membership ↔ Organization,所有租户范围内的页面都通过 getOrgContext(slug) 校验用户确实属于该组织。RBAC 定义 OWNER / ADMIN / MEMBER 三种角色,映射到 src/lib/rbac.ts 中的权限。套餐的席位与项目限额在服务端强制执行,逻辑位于 src/lib/plans.ts。认证采用邮箱加密码,使用 bcrypt 与 jose 签名的 JWT 会话 Cookie。Stripe 部分包含结账、客户门户,以及一个在处理前先记录事件 id 的 Webhook,避免重复投递造成副作用叠加。仓库附带 CI 工作流与单元测试脚本,测试覆盖 rbac、plans、billing、slug 等业务逻辑。演示站点托管在 Render 免费层,闲置后首次请求可能需要约 50 秒唤醒;演示账号为 [email protected] / password123,测试卡号 4242 4242 4242 4242。代码采用 MIT 许可,但演示图片、字体、图标等第三方素材需按各自许可单独核对,域名、托管、数据库、支付等外部服务可能另行收费。
适合你的项目吗?
适用场景
- 需要快速搭建带组织与成员管理的多租户 SaaS 后台
- 需要为产品接入 Stripe 订阅、客户门户与幂等 Webhook 处理
- 需要在服务端按套餐限制席位与项目数量
- 需要一套可运行、可测试的 Next.js App Router 全栈起点
适合人群
- 准备从零构建多租户 SaaS 的开发者
- 需要参考 Stripe 订阅与 Webhook 幂等实现的团队
- 希望以 MIT 许可代码为基础二次开发的项目
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
复制 .env.example 为 .env,设置 DATABASE_URL 与 AUTH_SECRET
- 2
用 docker compose up -d db 启动 Postgres,或自备数据库
- 3
依次执行 npm install、npx prisma migrate dev、npm run db:seed 后 npm run dev
- 4
Stripe 需创建两个周期性价格并填入 STRIPE_PRICE_PRO / STRIPE_PRICE_SCALE
- 5
本地开发用 stripe listen --forward-to localhost:3000/api/stripe/webhook 转发事件
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 使用 Stripe 订阅功能需自行创建两个周期性价格,并将价格 ID 填入 STRIPE_PRICE_PRO 与 STRIPE_PRICE_SCALE 环境变量;Stripe 为外部付费服务,可能产生费用。
- 运行前必须配置 DATABASE_URL 与 AUTH_SECRET 环境变量,并自行准备 PostgreSQL 数据库(可用 docker compose 启动或自备)。
- 本地开发 Stripe Webhook 需安装并使用 Stripe CLI 转发事件,依赖 Stripe 账号与外部服务。
- 官方演示站点托管于 Render 免费层,闲置后首次请求可能需约 50 秒唤醒,仅影响演示体验,不影响自托管代码。
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
Create two recurring prices and put their ids in `STRIPE_PRICE_PRO` / `STRIPE_PRICE_SCALE`.
README 原文
cp .env.example .env # set DATABASE_URL and AUTH_SECRET
README 原文
stripe listen --forward-to localhost:3000/api/stripe/webhook
README 原文
https://github.com/rovidev95/rovidev-saas-starter/blob/main/LICENSEhttps://github.com/rovidev95/rovidev-saas-starter/blob/main/README.mdHosted on Render's free tier, so the first request after idle may take ~50s to wake up.
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-03。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 85 / 100
- 技术栈
- Next.js · React
- 网站类型
- SaaS · 启动器
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-06-28
- 截图检查日期
- 2026-10-03
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Next.js。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
已完成服务器许可规则与 AI 来源核对;未经过人工编辑审核。
查看当时使用的来源资料
SHA-256: 6df0585a52928a0840100a79c09830746fcd1c783b97faace67bfba944106c03
2026-10-03T02:52:32.815Z
来源文件 / 仓库# saas-starter [](https://github.com/rovidev95/rovidev-saas-starter/actions/workflows/ci.yml) [](LICENSE)  [](https://rovidev-saas-starter.onrender.com) > **Live demo:** [rovidev-saas-starter.onrender.com](https://rovidev-saas-starter.onrender.com) > Sign in with **[email protected]** / **password123**, then go to *Billing* to try a > subscription. Use Stripe's test card **4242 4242 4242 4242** (any future expiry / CVC). > Hosted on Render's free tier, so the first request after idle may take ~50s to wake up. A multi-tenant SaaS skeleton built with the Next.js App Router. It covers the plumbing most SaaS apps need on day one: authentication, organizations, role based access control, plan limits and Stripe subscriptions with a webhook that doesn't double-apply events. Stack: Next.js 15, React 19 (server actions), Prisma + PostgreSQL, Tailwind, TypeScript.  ## What's included - Tenancy: `User` ↔ `Membership` ↔ `Organization`. Every tenant-scoped page goes through `getOrgContext(slug)`, which checks the user actually belongs to the org. - RBAC: `OWNER / ADMIN / MEMBER` mapped to permissions in `src/lib/rbac.ts`. - Plans with seat/project limits enforced server-side (`src/lib/plans.ts`). - Stripe checkout, customer portal and a webhook that records each event id before processing. - Email/password auth with bcrypt and a signed JWT session cookie (jose). ## Getting started ```bash cp .env.example .env # set DATABASE_URL and AUTH_SECRET docker compose up -d db # or your own Postgres npm install npx prisma migrate dev npm run db:seed # demo org + [email protected] / password123 npm run dev ``` ## Stripe Create two recurring prices and put their ids in `STRIPE_PRICE_PRO` / `STRIPE_PRICE_SCALE`. Forward events while developing: ```bash stripe listen --forward-to localhost:3000/api/stripe/webhook ``` The webhook stores every event id in `ProcessedWebhook` before acting, so a re-delivered event is acknowledged without repeating side effects. ## Layout ``` src/ app/ page.tsx marketing + pricing (auth)/ login / register dashboard/[slug]/ overview, members, billing (tenant scoped) actions/ server actions (auth, org, billing) api/stripe/webhook/ stripe webhook lib/ rbac.ts plans.ts billing.ts slug.ts business logic (unit tested) auth.ts tenant.ts session.ts auth + tenancy db.ts stripe.ts env.ts infra ``` ## Scripts ```bash npm run dev npm run build # prisma generate + next build npm test # rbac, plans, billing, slug npm run typecheck npm run prisma:migrate npm run db:seed ``` Secrets are read lazily, so `next build` runs without real credentials. ## Custom work Building a SaaS and need the multi-tenant/billing foundation done right? Get in touch at [rovidev.com](https://rovidev.com). ## License MIT
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

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