二次开发
把模板变成你的产品——品牌化、营销页、博客与文档内容、新 provider、新 App。
zmlkit 为二次开发而设计:内容即数据、provider 即注册表,下面每个配方都是纯增量修改。
品牌与文案
营销文案在 i18n 词典(web/src/i18n/),落地页是 JSON 驱动的:web/src/marketing/content/home/<locale>.json 用一组强类型 block(hero、features、pricing、testimonials、FAQ、CTA 等)描述整个页面。改文案、调段落顺序只需要改 JSON——不写 React。
如果你用 Claude Code 开发,仓库自带 zmlkit-quick-start skill:给一段项目简介(名字、域名、产品描述),自动完成首轮品牌化。
SEO 落地页(不写 React)
新增一个关键词落地页 = 一条注册 + 一份 JSON:
- 在
web/src/marketing/registry.ts的LANDING_SLUGS里加 slug。 - 创建
web/src/marketing/content/<slug>/en.json(可选加各语言文件)。
路由、locale 前缀、hreflang、sitemap 与中间件 rewrite 全部自动生效。
博客与文档内容
- 博客文章是 CMS 行(
content_post,type='blog'),在管理后台「内容」里编辑——分类、封面、Markdown 正文、多语言变体。 - 文档(即本站)是
web/content/docs/下的 Markdown 文件。新增<slug>.md并带title/description/orderfrontmatter;翻译加<slug>.<locale>.md。构建期生成器会把内容打进 bundle,所有部署目标通用。 - 更新日志(
/updates)自动渲染仓库根的CHANGELOG.md。
加一个 AI provider
在 web/src/server/ai/manager.ts 的 AI_PROVIDERS 里加一条:实现 generateTextStream 和/或 generateMedia(异步厂商再加 getMediaTask),声明 capabilities。积分、排队、重试与退款由共享管线处理。
加一个支付 provider
在 web/src/server/billing/providers.ts 的 PAYMENT_PROVIDERS 里加一条:实现 createCheckout + parseWebhook。注册表驱动 webhook 路由、默认 provider 选择与签名校验。所有 provider 归一化为同一种事件,积分/订阅/退款逻辑与厂商无关。
加一个新 App(多 App)
一套部署可以承载多个产品:
- 插入 app 行(seed 或管理后台),并把 slug 加进
ENABLED_APPS。 - 补它的按 App 密钥:
APP_<SLUG>_STRIPE_SECRET_KEY、OAuth key 等。 - 在
packages/core-domain/src/plans.ts里给它一份套餐目录。
所有业务行都带 app_id;客户端请求带 X-App-Id。同一邮箱在不同 App 是不同用户,令牌与 App 绑定。
更进一步
完整的二开教程(加表、加端点、加页面、加语言)在仓库的 docs/build-new-app.md,并配套 Claude Code skill(build-on-zmlkit)。