项目结构
了解 LaunchSaaS 的文件夹组织和架构
LaunchSaaS 是一个 pnpm workspace monorepo,包含一个 Next.js 应用和多个共享包。
根目录
.
├── apps/
│ └── launchsaas/ # 主 Next.js 应用
├── packages/
│ ├── auth/ # 认证 server/client factory 与 auth env keys
│ ├── cache/ # 缓存提供商(Redis、Upstash、Cloudflare KV)
│ ├── cron/ # 定时任务(QStash)
│ ├── db-pg/ # PostgreSQL DB provider 与 Drizzle 表定义
│ ├── email/ # 邮件提供商(Resend、Nodemailer)
│ ├── errors/ # 共享错误定义
│ ├── newsletter/ # 新闻通讯提供商(Resend)
│ ├── payment/ # 支付提供商(Stripe、Creem)
│ ├── storage/ # 存储提供商(S3)
│ └── utils/ # 共享工具
├── drizzle/ # 数据库迁移(提交到 git)
├── biome.json # Lint + 格式化配置
├── pnpm-workspace.yaml # Workspace 配置
└── package.json # 根 workspace 脚本应用目录 (apps/launchsaas/)
apps/launchsaas/
├── src/ # 应用源代码
├── content/ # MDX 内容(博客、文档、更新日志)
├── public/ # 静态资源
├── scripts/ # 实用脚本
├── .env # 环境变量(不在 git 中)
├── package.json # 应用依赖
└── next.config.mjs # Next.js 配置源代码目录 (apps/launchsaas/src/)
App Router (src/app/)
src/app/
└── [locale]/
├── layout.tsx # 根 locale 布局
│
├── (marketing)/ # 带头部/页脚的公共页面
│ ├── layout.tsx
│ ├── blog/
│ ├── pricing/
│ └── ...
│
├── (protected)/ # 需要登录的受保护页面
│ ├── (common)/ # 用户可访问功能
│ │ ├── billing/
│ │ └── settings/
│ └── admin/ # 仅管理员功能
│ ├── users/
│ ├── orders/
│ └── entitlements/
│
├── auth/[path]/ # Better Auth 动态路由
├── docs/[[...slug]]/ # Fumadocs 文档
└── api/ # API 路由路由组
(marketing)/- 带营销布局的公共页面(头部、页脚)(protected)/(common)/- 用户可访问的需认证页面(protected)/admin/- 仅管理员页面
组件 (src/components/)
src/components/
├── layout/ # 布局组件
│ ├── site-header.tsx
│ ├── site-footer.tsx
│ ├── app-sidebar.tsx
│ └── ...
├── landing/ # 着陆页部分
├── blog/ # 博客组件
└── shared/ # 共享组件共享 UI 包 (packages/design-system/ui/)
packages/design-system/ui/
├── src/components/ # 共享的 source-vendor UI 组件
│ ├── auth/ # Better Auth UI 源码组件
│ ├── settings/ # Better Auth 设置源码组件
│ ├── ui/ # registry 直接安装的 canonical shadcn primitive 源码
│ └── user/ # Better Auth 用户菜单/头像源码组件
├── src/lib/utils.ts # 共享包里的 `cn()` 工具源码
└── src/hooks/ # 共享组件依赖的 hooks共享邮件模板 (packages/design-system/email-templates/)
packages/design-system/email-templates/
├── src/transactional-email.tsx # 事务邮件共享布局
├── src/email-styles.tsx # 邮件专用样式与颜色
└── src/index.ts # `@launchsaas/email-templates` 导出入口运行时的全局 CSS 由 apps/launchsaas/src/app/globals.css 持有。共享 UI 组件不会再提供或导入自己的 globals.css。
这个文件还必须包含 @source "../../../../packages/design-system/ui/src";,这样 Tailwind 才会扫描共享 UI 包,并生成这些组件用到的 utility class。
服务器操作 (src/actions/)
按领域组织的类型安全服务器操作:
src/actions/
├── billing.ts # 支付和订阅操作
├── newsletter.ts # 新闻通讯订阅操作
├── storage.ts # 文件存储操作
└── user.ts # 用户管理操作应用级配置 (src/configuration/)
UI 和品牌配置:
src/configuration/
├── metadata.ts # 网站名称、标题、描述、SEO
├── navbar.ts # 导航栏项目和操作
├── sidebar.ts # 仪表板/管理侧边栏(基于角色)
├── user-button.tsx # 用户下拉菜单(基于角色)
├── footer.ts # 页脚链接和徽章
└── social-links.ts # 社交媒体链接app-owned runtime 配置位于
apps/launchsaas/src/configuration/,provider 实例则在apps/launchsaas/src/capabilities.ts中组装。
库 (src/lib/)
应用特定工具:
src/lib/
├── auth/ # Better Auth 的 server/client 接线
├── env/
│ ├── server.ts # 仅服务器环境变量
│ └── client.ts # 客户端安全环境变量
├── session.ts # app 自己的 session 策略与 helper
└── safe-action.ts # app 自己的 action client wiring模式 (src/schemas/)
应用特定的 Zod 验证模式。
共享包
App 配置 (apps/launchsaas/src/configuration/)
apps/launchsaas/src/configuration/
├── metadata.ts # SEO / 品牌元信息
├── navbar.ts # 营销站导航
├── sidebar.ts # 受保护区域侧边栏
├── social-links.ts # 社交链接
├── user-button.tsx # 用户菜单配置
├── footer.ts # 页脚配置
├── types.ts # app-owned 配置类型
└── product/ # app-owned 支付产品目录和 helper
├── index.ts
├── products.ts
└── types.ts数据库
核心 provider package:
packages/databases/db-pg/src/
├── tables/ # Drizzle 表定义
│ ├── auth.ts # 认证表(自动生成,请勿编辑)
│ ├── order.ts # 不可变支付记录
│ ├── entitlement.ts # 可变用户访问/订阅状态
│ └── index.ts
├── db.ts # 数据库客户端
└── index.ts # 公共导出app-owned 绑定与迁移配置:
apps/launchsaas/
├── src/db/index.ts # app 绑定到选中的 provider package
├── drizzle.config.ts # app-owned Drizzle 配置
└── src/db/tables/ # app-specific 额外表提供商包
每个提供商包(email、payment、storage、newsletter、cache、cron)遵循相同结构:
packages/capabilities/{name}/src/
├── provider.ts # 接口定义
└── index.ts # 公共导出
packages/capabilities/{name}-{provider}/src/
├── provider.ts # 具体 provider 实现
├── keys.ts # 当前 provider 的环境变量校验
└── index.ts # 公共导出内容目录 (apps/launchsaas/content/)
content/
├── blog/ # 博客文章(MDX)
├── docs/ # 文档(MDX)
├── changelog/ # 更新日志条目(MDX)
└── pages/ # 静态页面(条款、隐私政策、许可证等)关键文件
| 文件 | 描述 |
|---|---|
apps/launchsaas/src/configuration/metadata.ts | 网站名称、标题、描述、logo |
apps/launchsaas/src/configuration/navbar.ts | 带嵌套菜单的导航 |
apps/launchsaas/src/configuration/sidebar.ts | 仪表板/管理的基于角色侧边栏 |
apps/launchsaas/src/configuration/product/ | 定价计划和产品 |
apps/launchsaas/src/capabilities.ts | provider 实例组装 |
apps/launchsaas/src/lib/auth/auth.ts | app 持有的 Better Auth server 接线 |
apps/launchsaas/src/app/globals.css | 主题颜色和全局样式 |
apps/launchsaas/content/docs/meta.json | 文档侧边栏顺序 |