跳到主要內容
Manyi Life — M Monogram
/

Architecture Decisions · 集團架構決策

我們在岔路上選擇的那一邊

公開七個關鍵架構決策——為什麼這樣選、放棄了什麼、什麼時候會重新評估。

「我們用 Logto」是一句答案;「為什麼不用 Auth0」才是有用的內容。下方每個 ADR(Architecture Decision Record)是我們真的踩過、衡量過、寫下來的決策。完整版住在 GitHub 的 docs/adr/,這頁是給準備做類似決策的團隊看的簡版索引。

  1. ADR-001

    2026-05-03

    選 Logto 做跨品牌 SSO

    需求是四個域名一套讀者身份、單人團隊預算有限、需要 embedded 登入。比較了 NextAuth / Auth0 / Clerk 後選 Logto Cloud:價格曲線在 10× 成長前不會炸、Experience SDK 是 first-class、有 OSS 逃生口。

  2. ADR-002

    2026-04-01

    OpenNext on Cloudflare Workers(不用 Vercel)

    多站點集團部署的單一供應商策略:Workers + D1 + KV + R2 + Queues 全在 Cloudflare 一張帳單。代價是 ISR 等少數 Next.js 功能要繞路(見 ADR-006)。Vercel DX 更好,但跑 4 個站時月費差距明顯。

  3. ADR-003

    2026-05-06

    單一 Resend audience,用 tag 區分品牌

    每品牌一個 audience 看起來乾淨,但你永遠回答不了「同時訂閱 ≥2 品牌的活躍讀者有多少」。我們選共用 audience + brand tag,跨品牌查詢一個 JOIN 解決,代價是廣播時必須嚴格 scope。

  4. ADR-004

    2026-05-06

    D1 做跨品牌分析(不用 KV、不用外部 warehouse)

    SQL 才能做 ad-hoc 分析;KV 不行、外部 warehouse 太貴、Workers Analytics Engine 查詢面太窄。D1 flat table + JSON metadata 是甜蜜點,付出的代價是沒有 multi-region 副本。

  5. ADR-005

    2026-05-03

    Cookie 走 per-brand top-level,不做跨品牌共用 cookie

    不同 TLD 本來就無法共用 cookie;用 OIDC redirect 達成「登入一次跨品牌通行」。第一次跨品牌跳轉有 ~300ms 延遲,換來品牌獨立性與安全性隔離。

  6. ADR-006

    2026-05-08

    OpenNext 上不要用 ISR,先用 Suspense island

    PR #60 踩過坑:next.revalidate 在 Workers 上需要 Queue 才能正常運作,否則 production 500。在 Queue 接好前一律用 Suspense island + worker-local cache。

  7. ADR-007

    2026-04-15

    每個子品牌獨立 repo,集團 repo 放共用 admin

    拒絕 monorepo:一個品牌壞掉不應該擋住其他品牌。代價是程式碼重複,但 6 個月觀察下來重複量還可以接受。等團隊規模到 3+ 人再評估 monorepo。

想看完整版(含被拒絕的選項與重新評估觸發點),整套 ADR 在 docs/adr/ 公開。

看 Advisory 服務