二次開發
把模板變成你的產品——品牌化、營銷頁、部落格與文件內容、新 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)。