claude-memory/project_architecture_decisi...

4.4 KiB
Raw Blame History

name description type
アーキテクチャ決定事項 技術選定・設計方針の決定理由。なぜその選択をしたかの根拠。将来の AI が同じ議論を繰り返さないために保存。 project

認証方式: Supabase Auth に決定2026-03-27

決定: Supabase Auth を採用する。

  • Magic Link メール送信: Resend をカスタム SMTP として Supabase に接続noreply@soar-enrich.com
  • Passkey指紋・顔: Supabase Auth が標準提供
  • VPS server.js は Supabase JWT を受け取って検証するだけ(発行は Supabase
  • VPS に作成済みの auth テーブルmagic_link_tokens 等)は将来削除予定(今は放置)

Why: 実装量が大幅に少ない・habit/pulse を Supabase に移行するときの RLS と自動連携・Resend DNS は Supabase のカスタム SMTP として引き続き活用できる。

Passkey ドメイン課題: ワイルドカード DNS *.posimai.soar-enrich.com → 76.76.21.21 を Eiji さんに依頼予定。設定後に rpID=posimai.soar-enrich.com で全アプリ共有可能。

How to apply: X-API-Key・?init_key=・localStorage 認証ロジックは実装完了まで変更禁止。


データ保存先: VPS PostgreSQL と Supabase の分担

決定: 用途によって使い分ける。

保存先 対象データ 理由
VPS PostgreSQL brain 記事・journal 日記・認証・セッション サーバー側 AI 処理・全文検索が必要。すでに存在する
Supabase togetherリアルタイム同期・将来: habit/pulse リアルタイム購読・RLS によるユーザーデータ分離が自然
localStorage timer 設定・veil 設定 端末ごとに持つのが自然な設定値

Why:

  • VPS: サーバー側で Gemini 呼び出し・検索・集計が必要なデータは API サーバーと同じ場所に置く
  • Supabase: 「ユーザーが書いて読むだけ」のシンプルなデータは RLS で安全に管理できる Supabase が適切
  • ユーザーデータhabit/pulseを VPS に置く場合は自前で WHERE user_id = :me を全エンドポイントに実装する必要があり、バグ時のデータ漏洩リスクがある

How to apply: habit/pulse のクラウド移行は Supabase を推奨。brain/journal は VPS から動かさない。


CDN バージョン: Lucide @0.344.0 固定

決定: unpkg.com/lucide@0.344.0 に固定。@latest は使用禁止。

Why:

  • @latest を使うと Lucide がバージョンアップしたとき Service Worker が古いバージョンをキャッシュしたままになりアイコンが消える
  • アイコン名・API の breaking change が起きたとき気づかずにアプリが壊れる
  • バージョンを固定すれば自分のタイミングで確認して更新できる

How to apply: CDN 経由で読み込むすべてのライブラリはバージョン番号を明記する。@latest は CLAUDE.md 違反。


ドメイン構成: A案API を別サブドメインに分離)を採用

決定・完了2026-03-26:

  • posimai.soar-enrich.com → Vercel76.76.21.21)→ posimai-dashboard
  • api.soar-enrich.com → VPS85.131.245.239)→ バックエンド API :8090

完了済み:

  • DNS 切り替え完了A レコード設定済み)
  • Resend DNSDKIM/SPF設定済み・稼働中
  • 全フロントアプリの API URL を api.soar-enrich.com/brain/api に更新済み

次期計画: ワイルドカード DNS *.posimai.soar-enrich.com

  • 全アプリを brain.posimai.soar-enrich.com 等に統一することで Passkey の rpID 問題を解決
  • DNS レコード 1 件で 23 アプリ対応(個別 CNAME 不要)
  • 実施時期未定(認証方式決定後)

How to apply: フロントの API URL は api.soar-enrich.com/brain/api が正。posimai.soar-enrich.com は今や Dashboard URL なので API 参照に使ってはいけない。


localStorage 廃止方針

決定: habit・pulse・reader 既読履歴は将来的に Supabase へ移行する。ただし現時点では対応しない(商用化フェーズ 3

Why: localStorage はブラウザキャッシュ削除でデータ消失する。有料ユーザーに提供できない。

How to apply: 現状の localStorage ロジックには手を付けない。移行は認証実装完了後に着手。