项目结构
了解 MuseMVP 的 pnpm 工作区、应用边界、共享包与修改入口。
MuseMVP 是一个 pnpm workspace:两个可独立部署的 Next.js 应用,共享领域包。这里描述的是购买后获得的 MuseMVP 模板仓库,不是官网仓库;目录为主要结构节选,而非完整文件清单。
工作区总览
musemvp/
|-- .agents/skills/ # AI workflows
|-- .github/
|-- .vscode/
|-- apps/
| |-- web/ # Next.js + Node (Vercel / Docker)
| | |-- AGENTS.md # Node-specific agent rules
| |-- web-cloudflare/ # Next.js + Workers (D1 / R2)
| |-- AGENTS.md # Workers-specific agent rules
|-- packages/
| |-- api/
| |-- auth/
| |-- billing/
| |-- cli/
| |-- config/
| |-- db/
| |-- i18n/
| |-- mail/
| |-- shared/
| |-- storage/
| |-- testing/
| |-- tsconfig/
| |-- ui/
| |-- vitest-config/
|-- patches/
|-- scripts/
|-- tests/
|-- AGENTS.md
|-- biome.json
|-- CLAUDE.md
|-- docker-compose.yml
|-- package.json
|-- pnpm-workspace.yaml
|-- tsconfig.json
|-- turbo.jsonapps:两个平台,明确边界
| 目录 | 职责 |
|---|---|
apps/web | Next.js + Node.js,部署至 Vercel / Docker;使用 PostgreSQL、S3 兼容存储和 Resend。 |
apps/web-cloudflare | Next.js + Workers,经 OpenNext 部署;使用 D1(DB)、R2(R2_BUCKET)和 Cloudflare Email Sending。 |
两个应用保留各自完整的页面代码,不抽成共享页面包。公共页面变更后运行 pnpm apps:parity 检查一致性;平台适配代码保持独立。
应用内部的主要修改入口(两个应用均使用对应路径):
| 路径(相对于应用目录) | 用途 |
|---|---|
src/app/(landing-page)/[locale]/ | 落地页、定价、博客、文档与法律页面的路由及区块编排。 |
src/app/(saas-page)/ | 登录后的产品路由。 |
src/modules/ | 业务界面与功能编排。 |
src/backend/api/ | 组装 Hono 中间件与业务路由。 |
src/backend/auth/ | 将平台依赖注入 Better Auth。 |
src/backend/database/ | 为共享查询绑定应用数据库驱动。 |
src/server/ | 邮件、存储等平台适配与依赖组装。 |
src/env/ | 应用环境变量 schema。 |
content/ | docs、posts、legal 等 MDX 原始内容。 |
source.config.ts | Fumadocs 内容集合与 schema。 |
packages:共享领域逻辑与工程配置
| 目录 | 用途 |
|---|---|
packages/api | 共享 Hono 错误处理;业务路由仍由各应用自行组装。 |
packages/auth | Better Auth 工厂及客户端入口,由应用注入各自的平台依赖。 |
packages/billing | 统一配置 Stripe、Creem、Dodo Payments 和 Waffo 四个支付网关。 |
packages/cli | 负责本地开发的环境初始化与 doctor 诊断。 |
packages/config | 集中管理产品、认证、支付与国际化配置。 |
packages/db | 包含 PostgreSQL 与 D1 的 Drizzle schema、迁移和共享查询。 |
packages/i18n | 共享中英文消息、语言类型与路由辅助函数。 |
packages/mail | 邮件模板、发送工具与环境配置就绪检查。 |
packages/shared | 不依赖具体业务模块的纯函数、辅助工具和类型。 |
packages/storage | Node 使用兼容 S3 的工具;Worker 使用应用内的原生 R2 适配器。 |
packages/testing | 维护领域包共用的测试约定与覆盖率下限。 |
packages/tsconfig | 为工作区内的应用与包提供共享编译配置。 |
packages/ui | 共享类名与 UI 工具;应用页面仍由各应用负责。 |
packages/vitest-config | 复用 Vitest 预设,让各包的测试配置保持一致。 |
包通过 @musemvp/* 导入其他包,不使用应用的 @/ 别名。业务能力通过工厂、纯函数和类型共享;数据库查询放在 packages/db,应用负责提供具体驱动。
工程与协作目录
.agents/skills/:可复用的 AI 工作流;AGENTS.md定义仓库边界和验证约定。AGENTS.md:统一架构、任务路由、应用与包边界及验收标准。CLAUDE.md:引用统一规则,并补充 Claude Code 的工具与工作流偏好,不重复维护另一套架构规则。apps/web/AGENTS.md与apps/web-cloudflare/AGENTS.md:分别定义 Node / Workers 平台边界与共享页面同步约定。- 8 个真实技能工作流覆盖任务分流、公共页面定制、SaaS 布局、SaaS 页面路由、产品行为、测试、风险评审和更新日志,详见 AI 协作。
scripts/:环境初始化、迁移、发布和应用一致性等自动化工具。tests/:unit/、api/、e2e/及共用测试辅助代码;包自己的测试放在包内tests/。patches/:pnpm 管理的依赖补丁。pnpm-workspace.yaml:工作区范围与依赖 catalogs;turbo.json:任务图配置;biome.json:格式化与 lint;package.json:根脚本;docker-compose.yml:Node 应用的本地 Postgres。packages/testing、packages/tsconfig、packages/vitest-config:工程约定位于实际的包目录,不另设tooling/。
我应该改哪里?
| 需求 | 修改入口 |
|---|---|
| 替换首页区块 | 对应应用的 src/app/(landing-page)/[locale]/ 路由与 landing 模块。 |
| 调整产品、认证与套餐配置 | packages/config。 |
| 修改文案 | packages/i18n/src/translations/{en,zh}/default.json;衍生产品覆盖写入同目录 mvp.json。 |
| 修改数据与查询 | packages/db 的 schema、迁移与查询;平台绑定留在应用中。 |
| 接入支付 | packages/billing 的网关与配置;业务路由由应用组装。 |
| 编辑文档或博客 | 对应应用的 content/,不要编辑生成的 .source/。 |
.source/ 与 Cloudflare 应用的 cloudflare-env.d.ts 是生成产物,不手动修改。分别通过 Fumadocs 构建与 pnpm cf:typegen 更新。