登录

二次开发

把模板变成你的产品——品牌化、营销页、博客与文档内容、新 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:

  1. 在 web/src/marketing/registry.ts 的 LANDING_SLUGS 里加 slug。
  2. 创建 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/order frontmatter;翻译加 <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)

一套部署可以承载多个产品:

  1. 插入 app 行(seed 或管理后台),并把 slug 加进 ENABLED_APPS。
  2. 补它的按 App 密钥:APP_<SLUG>_STRIPE_SECRET_KEY、OAuth key 等。
  3. 在 packages/core-domain/src/plans.ts 里给它一份套餐目录。

所有业务行都带 app_id;客户端请求带 X-App-Id。同一邮箱在不同 App 是不同用户,令牌与 App 绑定。

更进一步

完整的二开教程(加表、加端点、加页面、加语言)在仓库的 docs/build-new-app.md,并配套 Claude Code skill(build-on-zmlkit)。