4.4 KiB
| 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→ Vercel(76.76.21.21)→ posimai-dashboardapi.soar-enrich.com→ VPS(85.131.245.239)→ バックエンド API :8090
完了済み:
- DNS 切り替え完了(A レコード設定済み)
- Resend DNS(DKIM/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 ロジックには手を付けない。移行は認証実装完了後に着手。