项目结构
了解 LaunchSaaS 的文件夹组织和架构
LaunchSaaS 是一个 pnpm workspace monorepo,包含一个 Next.js 应用和多个共享包。
根目录
.
├── apps/
│ └── launchsaas/ # 主 Next.js 应用
├── packages/
│ ├── auth/ # 认证工具 & safe-action 客户端
│ ├── cache/ # 缓存提供商(Redis、Upstash、Cloudflare KV)
│ ├── config/ # 功能配置 & 产品配置
│ ├── cron/ # 定时任务(QStash)
│ ├── db/ # 数据库客户端 & 表定义
│ ├── 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/
├── ui/ # shadcn/ui 组件(请勿直接编辑)
├── layout/ # 布局组件
│ ├── site-header.tsx
│ ├── site-footer.tsx
│ ├── app-sidebar.tsx
│ └── ...
├── landing/ # 着陆页部分
├── blog/ # 博客组件
├── shared/ # 共享组件
└── email/ # 邮件模板服务器操作 (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 # 用户下拉菜单(基于角色)
├── fotoer.ts # 页脚链接和徽章
└── social-links.ts # 社交媒体链接功能标志和产品/定价配置位于
packages/config/src/— 见下文。
库 (src/lib/)
应用特定工具:
src/lib/
├── auth/ # Better Auth 实例配置
├── env/
│ ├── server.ts # 仅服务器环境变量
│ └── client.ts # 客户端安全环境变量
├── session.ts # 会话助手
└── safe-action.ts # 从 @launchsaas/auth 重新导出模式 (src/schemas/)
应用特定的 Zod 验证模式。
共享包
配置 (packages/config/src/)
packages/config/src/
├── features/ # 功能标志 & 提供商选择
│ ├── index.ts # 选择生产或开发配置
│ ├── development.ts # 开发环境功能配置
│ └── production.ts # 生产环境功能配置
└── product/ # 定价计划和产品(按支付提供商)
├── index.ts
├── development.ts
└── production.ts数据库 (packages/db/src/)
packages/db/src/
├── tables/ # Drizzle 表定义
│ ├── auth.ts # 认证表(自动生成,请勿编辑)
│ ├── order.ts # 不可变支付记录
│ ├── entitlement.ts # 可变用户访问/订阅状态
│ └── index.ts
├── db.ts # 数据库客户端
└── index.ts # 公共导出提供商包
每个提供商包(email、payment、storage、newsletter、cache、cron)遵循相同结构:
packages/{name}/src/
├── provider.ts # 接口定义
├── factory.ts # 提供商工厂
├── index.ts # 公共导出
└── providers/
└── {provider-name}.ts内容目录 (apps/launchsaas/content/)
content/
├── blog/ # 博客文章(MDX)
├── docs/ # 文档(MDX)
└── changelog/ # 更新日志条目(MDX)关键文件
| 文件 | 描述 |
|---|---|
apps/launchsaas/src/configuration/metadata.ts | 网站名称、标题、描述、logo |
apps/launchsaas/src/configuration/navbar.ts | 带嵌套菜单的导航 |
apps/launchsaas/src/configuration/sidebar.ts | 仪表板/管理的基于角色侧边栏 |
packages/config/src/features/ | 功能标志和提供商选择 |
packages/config/src/product/ | 定价计划和产品 |
apps/launchsaas/src/lib/auth/auth.ts | Better Auth 配置 |
apps/launchsaas/src/app/globals.css | 主题颜色和全局样式 |
apps/launchsaas/content/docs/meta.json | 文档侧边栏顺序 |