LogoLaunchSaaS

项目结构

了解 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 额外表

提供商包

每个提供商包(emailpaymentstoragenewslettercachecron)遵循相同结构:

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.tsprovider 实例组装
apps/launchsaas/src/lib/auth/auth.tsapp 持有的 Better Auth server 接线
apps/launchsaas/src/app/globals.css主题颜色和全局样式
apps/launchsaas/content/docs/meta.json文档侧边栏顺序

下一步