posimai-root/docs/master-architecture.md

245 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Posimai Project — マスターアーキテクチャドキュメント
最終更新: 2026-03-31
対象: Claude Code / Cursor / Antigravity / Gemini / 全 AI エージェント
**このドキュメントはプロジェクトの現状を一元管理します。実装の前に必ず読んでください。**
> メモ: このファイルは変更が発生するたびに更新するCLAUDE.md のルールに明記済み)。
> 「最終更新」日付と内容を常に一致させること。
---
## 1. 全体構成図2026-03-31 確定)
```
╔══════════════════════════════════════════════════════════╗
║ mai の開発環境Windows 11 PC
║ VS Code / Cursor / Claude Code CLI / Termius ║
╚══════════════════════════════════════════════════════════╝
│ git pushgitea + github の2リモート同時
╔══════════════════════════════════════════════════════════╗
║ コード管理2リモート並行
║ GiteaSynology 内) ←→ GitHubposimai/ org
║ ローカルバックアップ Vercel 自動デプロイトリガー ║
╚══════════════════════════════════════════════════════════╝
│ GitHub push → Vercel 自動デプロイ
╔══════════════════════════════════════════════════════════╗
║ フロントエンドVercel / CDN
║ ║
║ posimai.soar-enrich.com → posimai-dashboard確定
║ ║
║ 全アプリ URL*.vercel.app で稼働中・全 23 本 PWA: ║
║ brain / habit / pulse / feed / reader / journal ║
║ brief / daily / ambient / veil / together / lens ║
║ diff / clean / timer / digest / think / site ║
║ events / maps / tech-events / analytics / roadmap ║
║ ║
║ 【セルフホスト】posimai-devUbuntu PC / Tailscale
║ https://ubuntu-pc-pc-mkm21cz79ys4.tail72e846.ts.net:3333║
║ ║
║ 【計画中】*.posimai.soar-enrich.com ワイルドカード DNS ║
║ → Passkey の rpID 問題を解決・Eiji に依頼予定 ║
╚══════════════════════════════════════════════════════════╝
│ https://api.soar-enrich.com/brain/api/...
2026-03-26 移行完了)
╔══════════════════════════════════════════════════════════╗
║ バックエンド本番VPS— 2026-03-25 移行完了 ║
║ Ubuntu 25.04 / AMD EPYC 4コア / 5.8GB / 85.131.245.239 ║
║ 共同開発者 Eiji 提供 ║
║ ║
║ Nginx: api.soar-enrich.com → :8090 ║
║ ║
║ posimai-apiNode.js / Express / :8090
║ 稼働中のエンドポイント: ║
║ ・記事 /articles /save ・Journal /journal/* ║
║ ・RSS /feeds ・Gemini AI /gemini/* ║
║ ・TTS /tts/* ← VOICEVOX 連携(コンテナ追加で即有効) ║
║ ║
║ PostgreSQL 16 ║
║ articles / journal_posts / users ║
║ site_config / reading_history ║
║ ※ users/magic_link_tokens 等で VPS 自前認証を完全ホスト ║
╚══════════════════════════════════════════════════════════╝
╔══════════════════════════════════════════════════════════╗
║ Ubuntu PC — 開発 OS常時稼働
║ 100.77.11.43 / ubuntu-pc-pc-mkm21cz79ys4.tail*.ts.net ║
║ ║
║ ・posimai-dev:3333 HTTPS / Tailscale
║ → ブラウザ内ターミナル + Claude Code 統合 PWA ║
║ ・posimai-station/station
║ → HDMI モニター全画面キオスク監視盤 ║
║ ・Syncthing → Windows PC と双方向同期 ║
║ ・GNOME 削除済み / Openbox + Chromium kiosk ║
╚══════════════════════════════════════════════════════════╝
╔══════════════════════════════════════════════════════════╗
║ Synology NAS — バックアップ & 開発支援 ║
║ 100.76.7.3 / posimai-lab.tail72e846.ts.net ║
║ Tailscale VPN 経由のみアクセス可 ║
║ ║
║ ・Giteagit バックアップサーバー) ║
║ ・posimai_api旧 API・待機中・フォールバック候補
║ ・PostgreSQL 15旧 DB・待機中
║ ・Uptime Kuma死活監視
║ ・VOICEVOXTTS / VPS 移設予定) ║
╚══════════════════════════════════════════════════════════╝
╔══════════════════════════════════════════════════════════╗
║ 外部サービス ║
║ ║
║ 【認証】VPS 自前システム (Magic Link + WebAuthn) ║
║ → Supabase Auth 構築を中止し、完全セルフホスト化 ║
║ → 各アプリは VPS JWT で全APIと通信 ║
║ → Magic Link メール送信のみ Resend (noreply) を利用 ║
║ ║
║ 【稼働中】Supabase DB ║
║ togetherリアルタイム同期・稼働中
║ habit / pulse将来移行予定・現在は localStorage
║ ║
║ Gemini API → VPS 経由journal/pulse 等) ║
║ Gemini API → フロント直接think アプリのみ) ║
║ Resendメール→ noreply@soar-enrich.com ║
║ Google FontsInter/ unpkgLucide @0.344.0 固定) ║
║ ║
║ 【将来】 ║
║ Stripe課金・アカウント済み・Eiji と共有済み) ║
║ Google Play ConsoleAndroid 配信) ║
╚══════════════════════════════════════════════════════════╝
```
---
## 2. アプリ一覧(全 23 本・2026-03-28 時点)
| アプリ | URL | 種別 | バックエンド | 備考 |
|--------|-----|------|-------------|------|
| posimai-dashboard | posimai.soar-enrich.com | Next.js | — | メインダッシュボード |
| posimai-analytics | analytics.vercel.app | Next.js | — | RFM 分析 |
| posimai-brain | brain.vercel.app | 静的 | VPS API | 記事管理 |
| posimai-feed | feed.vercel.app | 静的 | VPS API | RSS フィード |
| posimai-reader | reader.vercel.app | 静的 | VPS API | 記事リーダー |
| posimai-journal | journal.vercel.app | 静的 | VPS API | CMS エディタ |
| posimai-site | site.vercel.app | 静的 | VPS API | 公開ホームページ |
| posimai-together | together.vercel.app | 静的 | Supabase | リアルタイム共有 |
| posimai-daily | daily.vercel.app | 静的 | VPS API | ブリーフィング |
| posimai-brief | brief.vercel.app | 静的 | VPS TTS | 音声ブリーフィング |
| posimai-habit | habit.vercel.app | 静的 | localStorage | 習慣管理Supabase 移行予定) |
| posimai-pulse | pulse.vercel.app | 静的 | localStorage | 気分記録Supabase 移行予定) |
| posimai-think | think.vercel.app | 静的 | Gemini 直接 | AI 思考整理 |
| posimai-digest | digest.vercel.app | 静的 | Gemini 直接 | テキスト要約 |
| posimai-ambient | ambient.vercel.app | 静的 | open-meteo | 常時表示 |
| posimai-veil | veil.vercel.app | 静的 | — | アプリランチャー |
| posimai-roadmap | roadmap.vercel.app | 静的 | — | ロードマップ管理 |
| posimai-timer | timer.vercel.app | 静的 | — | タイマー |
| posimai-lens | lens.vercel.app | 静的 | — | EXIF 表示 |
| posimai-diff | diff.vercel.app | 静的 | — | テキスト差分 |
| posimai-clean | clean.vercel.app | 静的 | — | テキストクリーナー |
| posimai-events | events.vercel.app | 静的 | — | イベント情報 |
| posimai-maps | maps.vercel.app | 静的 | — | マップ |
| posimai-hotels | hotels.vercel.app | 静的 | — | ホテル価格 |
| posimai-tech-events | tech-events.vercel.app | 静的 | RSS | IT イベント |
| posimai-atlas | atlas.vercel.app | 静的 | VPS API | インフラ構成図・監視 |
| posimai-ui | ui.vercel.app | 静的 | — | 共有デザインシステム |
---
## 3. 認証フロー(確定)
```
方針(本番としてそのまま進化させる):
フロント → API Key or JWT (Magic Link) → VPS が検証
?init_key= URL → localStorage に保存・JWT 保有
3ユーザーmai / partner / musumeのみ対応
メール送信: Resend API (noreply@soar-enrich.com)
※ Supabase Auth への移行計画は中止(完全自己ホスト化)
課題: WebAuthn (Passkey) には共通の rpID が必要
→ *.posimai.soar-enrich.com ワイルドカード DNS が必須
→ Eiji への依頼待ち
```
**自前認証化のため `X-API-Key`・`?init_key=`・localStorage ロジックは維持される。**
---
## 4. データ保存先まとめ
| 保存先 | アプリ | 状態 |
|--------|--------|------|
| VPS PostgreSQL | brain・journal・site・reading_history | 稼働中 |
| Supabase DB | together | 稼働中 |
| localStorage + VPS バックグラウンド同期 | habit・pulse | ローカルファースト(同期のみ) |
| localStorage永続・移行しない | veil 設定・timer 設定 | 確定 |
| データなし(都度処理) | diff・clean・lens・digest・think・timer 本体 | — |
---
## 5. デプロイパイプライン(確立済み)
```bash
git add .
git commit -m "feat/fix/chore: 変更内容"
npm run deploy # = git push gitea main && git push github main
```
- `gitea``http://100.76.7.3:3000/mai/[app-name].git`(ローカルバックアップ)
- `github``https://github.com/posimai/[app-name].git`Vercel 自動デプロイトリガー)
- `vercel --prod` 直接実行: **禁止**
- VPS バックエンド: `bash deploy-server.sh`SSH 鍵認証・完全無人)
---
## 6. AI エージェント役割分担
| 担当 | 内容 |
|------|------|
| インフラ担当チャット | 認証実装・VPS デプロイ・DNS・server.js 変更 |
| UI 担当チャット | UX・デザイン・CLAUDE.md 適合・プライバシー表記・バグ修正 |
**UI 担当が触ってはいけないもの:**
`api.soar-enrich.com` URL / `X-API-Key` ヘッダー / `?init_key=` パラメータ / localStorage 認証ロジック / server.js・VPS・Docker 関連
---
## 7. 直近の確定事項(設計判断ログ)
| 日付 | 決定事項 |
|------|---------|
| 2026-03-25 | バックエンドを Synology → VPSEiji 提供)に移行完了 |
| 2026-03-26 | API URL を `posimai.soar-enrich.com``api.soar-enrich.com` に分離完了 |
| 2026-03-27 | 認証方式を Supabase AuthMagic Link + Passkeyに確定 |
| 2026-03-28 | 現行 auth テーブルmagic_link_tokens 等)は将来削除予定・今は放置 |
| 2026-03-29 | ベンダーロックイン回避のため Supabase 完全移行を中止。VPS 独自認証Magic Link+Passkeyを正規方針として続行 |
| 保留中 | *.posimai.soar-enrich.com ワイルドカード DNSEiji 依頼待ち) |
| 保留中 | VPS に VOICEVOX コンテナ追加Eiji 作業中) |
---
## 8. 絶対に守るルール(全 AI 共通)
1. **デプロイは `npm run deploy` のみ**`vercel --prod` 禁止)
2. **絵文字禁止**コード・UI・コメントすべて
3. **アイコンは Lucide のみ**`@0.344.0` 固定)
4. **デザイントークン変更禁止**`--accent` 1行のみ例外
5. **`git push origin` 禁止**gitea と github の2リモートのみ
6. **`api.soar-enrich.com` / 認証ロジックは UI 担当チャットが触らない**
7. **このファイルを変更したらすぐ「最終更新」日付を更新する**
---
## 参照ファイル一覧
| ファイル | 内容 |
|---------|------|
| `CLAUDE.md` | AI 向けプロジェクトルール(最優先) |
| `AGENTS.md` | CLAUDE.md の Cursor/Windsurf 向けコピー |
| `docs/master-architecture.md` | **このファイル**(インフラ・確定事項の一元管理) |
| `posimai-dashboard/src/data/projects.json` | 全アプリの一覧・ステータス・技術スタック |
| `_template/` | フル機能テンプレート |
| `_template-minimal/` | 単機能ツール用テンプレート |