|
|
|
@ -1,409 +1,222 @@
|
|
|
|
# Posimai Project — マスターアーキテクチャドキュメント
|
|
|
|
# Posimai Project — マスターアーキテクチャドキュメント
|
|
|
|
|
|
|
|
|
|
|
|
最終更新: 2026-03-11
|
|
|
|
最終更新: 2026-03-28
|
|
|
|
対象: Claude Code / Cursor / Antigravity / Gemini / 全 AI エージェント
|
|
|
|
対象: Claude Code / Cursor / Antigravity / Gemini / 全 AI エージェント
|
|
|
|
|
|
|
|
|
|
|
|
このドキュメントはプロジェクトの現状・課題・ロードマップを一元管理します。
|
|
|
|
**このドキュメントはプロジェクトの現状を一元管理します。実装の前に必ず読んでください。**
|
|
|
|
実装の前に必ずこのファイルを読んでください。
|
|
|
|
|
|
|
|
|
|
|
|
> メモ: このファイルは変更が発生するたびに更新する(CLAUDE.md のルールに明記済み)。
|
|
|
|
|
|
|
|
> 「最終更新」日付と内容を常に一致させること。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 0. Gemini 最新回答への批判的レビュー(2026-03-11)
|
|
|
|
## 1. 全体構成図(2026-03-28 確定)
|
|
|
|
|
|
|
|
|
|
|
|
Gemini が「Gemini 3.1 Flash-Lite(2026-03-03リリース)」「Gemini 3.1 Pro(2026-02-19リリース)」
|
|
|
|
|
|
|
|
と具体的な日付を断言しているが、**AI が自身のバージョンに関してハルシネーションを起こす
|
|
|
|
|
|
|
|
典型的なパターン** であり、鵜呑みにしてはならない。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Gemini の主張 | 判定 | 理由 |
|
|
|
|
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
| "Gemini 3.1 Flash-Lite を 2026-03-03 に正式リリース" | 要検証 | Claude の知識カットオフ(2025年8月)以降の情報。公式確認必須 |
|
|
|
|
|
|
|
|
| "DeepSeek V3.2 は推測だったと認める" | 評価する | 自己訂正は誠実 |
|
|
|
|
|
|
|
|
| Docker Compose 設計案を提示 | 方向性は正しい | ただし不完全(後述) |
|
|
|
|
|
|
|
|
| Ollama の導入 | 有効な提案 | RAM 要件の言及が不足 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**AI モデルのバージョン情報は必ず公式で確認すること:**
|
|
|
|
|
|
|
|
- Google AI Studio (aistudio.google.com) でモデル一覧を確認
|
|
|
|
|
|
|
|
- DeepSeek 公式 API ドキュメントで最新版を確認
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Gemini の docker-compose.yml の問題点:**
|
|
|
|
|
|
|
|
- nginx(リバースプロキシ)がない → ポートが直接露出する
|
|
|
|
|
|
|
|
- Gitea がない → すでに動いているなら Compose で管理すべき
|
|
|
|
|
|
|
|
- ネットワーク定義がない
|
|
|
|
|
|
|
|
- restart ポリシーがない(NAS 再起動後にコンテナが自動起動しない)
|
|
|
|
|
|
|
|
- Ollama の GPU/メモリ設定がない
|
|
|
|
|
|
|
|
- secrets 管理が平文環境変数のみ(DB パスワード等)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 1. プロジェクト全体像
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1.1 所有者プロフィール
|
|
|
|
|
|
|
|
- 非エンジニア(コードを読める、書けない)
|
|
|
|
|
|
|
|
- AI エージェントへのプロンプト設計が得意
|
|
|
|
|
|
|
|
- クラウド依存なし・Synology ファーストが絶対条件
|
|
|
|
|
|
|
|
- コスト最小化・利用回数の上限を気にしたくない
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1.2 現在のアプリ一覧(全 9 本)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| アプリ | ディレクトリ | 種別 | Synology 依存 | 状態 |
|
|
|
|
|
|
|
|
|--------|-------------|------|--------------|------|
|
|
|
|
|
|
|
|
| posimai-brain | `posimai-brain/` | SPA (Vanilla JS) | Yes(記事 API) | 稼働中 |
|
|
|
|
|
|
|
|
| posimai-feed | `posimai-feed/` | SPA (Vanilla JS) | Yes(フィード API) | 稼働中 |
|
|
|
|
|
|
|
|
| posimai-events | `posimai-events/` | 静的 (Vanilla JS) | 部分的 | 稼働中 |
|
|
|
|
|
|
|
|
| posimai-hotels | `posimai-hotels/` | 静的 (Vanilla JS) | 部分的 | 稼働中 |
|
|
|
|
|
|
|
|
| posimai-maps | `posimai-maps/` | 静的 (Vanilla JS) | 部分的 | 稼働中 |
|
|
|
|
|
|
|
|
| posimai-reader | `posimai-reader/` | 静的 (Vanilla JS) | No | 稼働中 |
|
|
|
|
|
|
|
|
| posimai-together | `posimai-together/` | 静的 (Vanilla JS) | No | 稼働中 |
|
|
|
|
|
|
|
|
| posimai-dashboard | `posimai-dashboard/` | Next.js (App Router) | 不明 | 稼働中 |
|
|
|
|
|
|
|
|
| posimai-analytics | `posimai-analytics/` | Next.js (App Router) | 不明 | 稼働中 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1.3 アプリ種別の正確な分類
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
純粋な静的アプリ(Synologyなしでも全機能動作)
|
|
|
|
╔══════════════════════════════════════════════════════════╗
|
|
|
|
→ reader, together
|
|
|
|
║ maita の開発環境(Windows 11 PC) ║
|
|
|
|
→ データはコード内 or 不要
|
|
|
|
║ VS Code / Cursor / Claude Code CLI / Termius ║
|
|
|
|
|
|
|
|
╚══════════════════════════════════════════════════════════╝
|
|
|
|
|
|
|
|
│ git push(gitea + github の2リモート同時)
|
|
|
|
|
|
|
|
▼
|
|
|
|
|
|
|
|
╔══════════════════════════════════════════════════════════╗
|
|
|
|
|
|
|
|
║ コード管理(2リモート並行) ║
|
|
|
|
|
|
|
|
║ Gitea(Synology 内) ←→ GitHub(posimai/ 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.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-api(Node.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 ║
|
|
|
|
|
|
|
|
║ ※ auth テーブルは Supabase Auth 採用確定につき将来削除 ║
|
|
|
|
|
|
|
|
╚══════════════════════════════════════════════════════════╝
|
|
|
|
|
|
|
|
|
|
|
|
データ参照型(Synologyが落ちてもUIは動く・データだけ取れない)
|
|
|
|
╔══════════════════════════════════════════════════════════╗
|
|
|
|
→ events, hotels, maps
|
|
|
|
║ バックアップ(Synology NAS・停止しない) ║
|
|
|
|
→ Synology から定期取得、localStorage キャッシュあり
|
|
|
|
║ 100.76.7.3 / posimai-lab.tail72e846.ts.net ║
|
|
|
|
|
|
|
|
║ Tailscale VPN 経由のみアクセス可 ║
|
|
|
|
|
|
|
|
║ ║
|
|
|
|
|
|
|
|
║ ・Gitea(git バックアップサーバー) ║
|
|
|
|
|
|
|
|
║ ・posimai_api(旧 API・待機中) ║
|
|
|
|
|
|
|
|
║ ・PostgreSQL 15(旧 DB・待機中) ║
|
|
|
|
|
|
|
|
║ ・Uptime Kuma(死活監視) ║
|
|
|
|
|
|
|
|
║ ・Ubuntu PC バックアップ受け先(毎日 3:00 rsync) ║
|
|
|
|
|
|
|
|
╚══════════════════════════════════════════════════════════╝
|
|
|
|
|
|
|
|
|
|
|
|
SPA + バックエンド依存(Synologyが必須)
|
|
|
|
╔══════════════════════════════════════════════════════════╗
|
|
|
|
→ brain, feed
|
|
|
|
║ 外部サービス ║
|
|
|
|
→ Synology FastAPI が主データソース
|
|
|
|
║ ║
|
|
|
|
|
|
|
|
║ 【認証・確定】Supabase Auth ║
|
|
|
|
Next.js(サーバーサイド処理あり)
|
|
|
|
║ Magic Link(メール)+ Passkey(指紋・顔) ║
|
|
|
|
→ dashboard(Basic Auth あり), analytics
|
|
|
|
║ → Resend をカスタム SMTP として設定 ║
|
|
|
|
→ Vercel Edge で動作、Synology 依存は設計次第
|
|
|
|
║ → 各アプリは Supabase JWT で認証 ║
|
|
|
|
|
|
|
|
║ → VPS は JWT を検証するだけ(認証ロジックは Supabase) ║
|
|
|
|
|
|
|
|
║ ║
|
|
|
|
|
|
|
|
║ 【稼働中】Supabase DB ║
|
|
|
|
|
|
|
|
║ together(リアルタイム同期・稼働中) ║
|
|
|
|
|
|
|
|
║ habit / pulse(将来移行予定・現在は localStorage) ║
|
|
|
|
|
|
|
|
║ ║
|
|
|
|
|
|
|
|
║ Gemini API → VPS 経由(journal/pulse 等) ║
|
|
|
|
|
|
|
|
║ Gemini API → フロント直接(think アプリのみ) ║
|
|
|
|
|
|
|
|
║ Resend(メール)→ noreply@soar-enrich.com ║
|
|
|
|
|
|
|
|
║ Google Fonts(Inter)/ unpkg(Lucide @0.344.0 固定) ║
|
|
|
|
|
|
|
|
║ ║
|
|
|
|
|
|
|
|
║ 【将来】 ║
|
|
|
|
|
|
|
|
║ Stripe(課金・アカウント済み・Eiji と共有済み) ║
|
|
|
|
|
|
|
|
║ Google Play Console(Android 配信) ║
|
|
|
|
|
|
|
|
╚══════════════════════════════════════════════════════════╝
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 現在のインフラ構成(確認済み・2026-03-11)
|
|
|
|
## 2. アプリ一覧(全 23 本・2026-03-28 時点)
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
| アプリ | URL | 種別 | バックエンド | 備考 |
|
|
|
|
[開発者PC(Windows 11)]
|
|
|
|
|--------|-----|------|-------------|------|
|
|
|
|
├ VS Code + Claude Code / Cursor
|
|
|
|
| posimai-dashboard | posimai.soar-enrich.com | Next.js | — | メインダッシュボード |
|
|
|
|
├ c:/Users/maita/posimai-project/ (ローカル作業)
|
|
|
|
| posimai-analytics | analytics.vercel.app | Next.js | — | RFM 分析 |
|
|
|
|
└ git push → Gitea(primary) + GitHub(mirror)
|
|
|
|
| posimai-brain | brain.vercel.app | 静的 | VPS API | 記事管理 |
|
|
|
|
|
|
|
|
| posimai-feed | feed.vercel.app | 静的 | VPS API | RSS フィード |
|
|
|
|
[Synology NAS「Mai_SVR」(自宅・常時稼働)]
|
|
|
|
| posimai-reader | reader.vercel.app | 静的 | VPS API | 記事リーダー |
|
|
|
|
├ 物理 RAM: 16 GB(現在 4.11 GB 使用中)
|
|
|
|
| posimai-journal | journal.vercel.app | 静的 | VPS API | CMS エディタ |
|
|
|
|
├ DSM: 7.3.2-86009 Update 1
|
|
|
|
| posimai-site | site.vercel.app | 静的 | VPS API | 公開ホームページ |
|
|
|
|
├ Virtual Machine Manager
|
|
|
|
| posimai-together | together.vercel.app | 静的 | Supabase | リアルタイム共有 |
|
|
|
|
│ └ Posimai_lab(VM): CPU 2コア、RAM 4GB、ディスク 100GB
|
|
|
|
| posimai-daily | daily.vercel.app | 静的 | VPS API | ブリーフィング |
|
|
|
|
│ ※ VM 内の詳細は未確認(OS 不明)
|
|
|
|
| posimai-brief | brief.vercel.app | 静的 | VPS TTS | 音声ブリーフィング |
|
|
|
|
└ Container Manager(Docker Compose)
|
|
|
|
| posimai-habit | habit.vercel.app | 静的 | localStorage | 習慣管理(Supabase 移行予定) |
|
|
|
|
└── プロジェクト: posimai_lab(/volume1/docker/posimai_lab)
|
|
|
|
| posimai-pulse | pulse.vercel.app | 静的 | localStorage | 気分記録(Supabase 移行予定) |
|
|
|
|
├── gitea (gitea/gitea:1.21) ← 稼働中 ✓
|
|
|
|
| posimai-think | think.vercel.app | 静的 | Gemini 直接 | AI 思考整理 |
|
|
|
|
├── gitea_db (postgres:15) ← 稼働中 ✓ ※Gitea + API 共用
|
|
|
|
| posimai-digest | digest.vercel.app | 静的 | Gemini 直接 | テキスト要約 |
|
|
|
|
├── mcp_server (node:20-slim) ← 稼働中 ✓ AI エージェント連携
|
|
|
|
| posimai-ambient | ambient.vercel.app | 静的 | open-meteo | 常時表示 |
|
|
|
|
├── posimai_api (node:20-slim) ← 稼働中 ✓ 記事API・Geminiプロキシ
|
|
|
|
| posimai-veil | veil.vercel.app | 静的 | — | アプリランチャー |
|
|
|
|
└── ai_proxy (python:3.11-slim) ← 停止中 → 削除可
|
|
|
|
| posimai-roadmap | roadmap.vercel.app | 静的 | — | ロードマップ管理 |
|
|
|
|
|
|
|
|
| posimai-timer | timer.vercel.app | 静的 | — | タイマー |
|
|
|
|
外部アクセス: Tailscale(posimai-lab.tail72e846.ts.net)
|
|
|
|
| posimai-lens | lens.vercel.app | 静的 | — | EXIF 表示 |
|
|
|
|
内部ポート: Gitea:3000, API:8090
|
|
|
|
| posimai-diff | diff.vercel.app | 静的 | — | テキスト差分 |
|
|
|
|
|
|
|
|
| posimai-clean | clean.vercel.app | 静的 | — | テキストクリーナー |
|
|
|
|
[GitHub(クラウド)]
|
|
|
|
| posimai-events | events.vercel.app | 静的 | — | イベント情報 |
|
|
|
|
└ private mirror(Vercel webhook用)
|
|
|
|
| posimai-maps | maps.vercel.app | 静的 | — | マップ |
|
|
|
|
|
|
|
|
| posimai-hotels | hotels.vercel.app | 静的 | — | ホテル価格 |
|
|
|
|
[Vercel(クラウド)]
|
|
|
|
| posimai-tech-events | tech-events.vercel.app | 静的 | RSS | IT イベント |
|
|
|
|
└ 全9アプリをホスト(静的ファイル配信 / Next.js SSR)
|
|
|
|
| posimai-ui | ui.vercel.app | 静的 | — | 共有デザインシステム |
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 2.1 posimai_api の詳細(確認済み)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **言語**: Node.js(Python/FastAPI ではなかった)
|
|
|
|
|
|
|
|
- **役割**: 記事保存・要約・Gemini API プロキシ
|
|
|
|
|
|
|
|
- **DB**: PostgreSQL(gitea_db と同一インスタンス、同一ユーザー共用)
|
|
|
|
|
|
|
|
- **認証**: API キー方式(pk_maita_ / pk_partner_ / pk_musume_)
|
|
|
|
|
|
|
|
- **CORS 許可**: posimai-brain, posimai-reader, posimai-feed
|
|
|
|
|
|
|
|
- **アクセス方法**: Tailscale 経由 HTTPS または 内部 HTTP:8090
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 2.2 現状の問題点(優先度順)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**問題1: シークレット管理 — 高優先**
|
|
|
|
|
|
|
|
- docker-compose.yml に DB パスワード・API キーが平文記載
|
|
|
|
|
|
|
|
- git commit するとパスワードが Gitea/GitHub に残る
|
|
|
|
|
|
|
|
- 対策: `.env` ファイルに分離、docker-compose.yml から変数参照に変更
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**問題2: DB ユーザーの共用 — 中優先**
|
|
|
|
|
|
|
|
- Gitea と posimai_api が同一 postgres ユーザー(gitea)を使用
|
|
|
|
|
|
|
|
- 対策: posimai_api 専用ユーザー/DB を作成する
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**問題3: posimai_api が HTTP のみ — 中優先**
|
|
|
|
|
|
|
|
- nginx がないため HTTPS 化されていない(Tailscale 経由なら許容範囲)
|
|
|
|
|
|
|
|
- 対策: nginx コンテナ追加(必要と判断したとき)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**問題4: アクセントカラーの不統一 — 低優先**
|
|
|
|
|
|
|
|
- Brain/Feed/Reader: `#818CF8`(Indigo)
|
|
|
|
|
|
|
|
- その他・テンプレート: `#6EE7B7`(Teal)
|
|
|
|
|
|
|
|
- 対策: 新規アプリは Teal 固定。既存は次回大改修時に統一。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 3. デプロイパイプライン(確立済み)
|
|
|
|
## 3. 認証フロー(確定・未実装)
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
コード変更
|
|
|
|
現行(稼働中):
|
|
|
|
↓
|
|
|
|
フロント → X-API-Key: pk_maita_xxx → VPS が検証
|
|
|
|
git add . && git commit -m "feat: ..."
|
|
|
|
?init_key= URL → localStorage に保存
|
|
|
|
↓
|
|
|
|
3ユーザー(maita / partner / musume)のみ対応
|
|
|
|
npm run deploy
|
|
|
|
|
|
|
|
= git push gitea main && git push github main
|
|
|
|
移行先(確定・実装待ち):
|
|
|
|
↓ ↓
|
|
|
|
フロント → Supabase Auth → Magic Link or Passkey
|
|
|
|
Gitea(自宅Synology) GitHub(private mirror)
|
|
|
|
→ Supabase JWT 発行
|
|
|
|
(プライマリ・ソースof真実) ↓
|
|
|
|
→ VPS が JWT を検証
|
|
|
|
Vercel webhook
|
|
|
|
メール送信: Resend(noreply@soar-enrich.com)
|
|
|
|
↓
|
|
|
|
|
|
|
|
https://[app-id].vercel.app
|
|
|
|
課題: Passkey は登録ドメイン固有
|
|
|
|
|
|
|
|
→ *.posimai.soar-enrich.com ワイルドカード DNS が必要
|
|
|
|
|
|
|
|
→ Eiji への依頼待ち
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**絶対に守るルール:**
|
|
|
|
**実装完了まで `X-API-Key`・`?init_key=`・localStorage 認証ロジックは変更禁止。**
|
|
|
|
- `vercel --prod` 直接実行 → 禁止(GitHub push で自動デプロイ)
|
|
|
|
|
|
|
|
- `git push origin` → 禁止(gitea と github の2リモートを使う)
|
|
|
|
|
|
|
|
- デプロイは `npm run deploy` のみ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 4. 新アプリ作成の自動化(確立済み)
|
|
|
|
## 4. データ保存先まとめ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 保存先 | アプリ | 状態 |
|
|
|
|
|
|
|
|
|--------|--------|------|
|
|
|
|
|
|
|
|
| VPS PostgreSQL | brain・journal・site・reading_history | 稼働中 |
|
|
|
|
|
|
|
|
| Supabase DB | together | 稼働中 |
|
|
|
|
|
|
|
|
| Supabase DB | habit・pulse | 将来移行予定(商用化フェーズ3) |
|
|
|
|
|
|
|
|
| localStorage(永続・移行しない) | veil 設定・timer 設定 | 確定 |
|
|
|
|
|
|
|
|
| データなし(都度処理) | diff・clean・lens・digest・think・timer 本体 | — |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 5. デプロイパイプライン(確立済み)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
|
bash scripts/new-app.sh <app-id> "<表示名>" "<説明>"
|
|
|
|
git add .
|
|
|
|
|
|
|
|
git commit -m "feat/fix/chore: 変更内容"
|
|
|
|
|
|
|
|
npm run deploy # = git push gitea main && git push github main
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
1. `_template/` をコピー(プレースホルダー置換)
|
|
|
|
- `gitea` → `http://100.76.7.3:3000/mai/[app-name].git`(ローカルバックアップ)
|
|
|
|
2. Git 初期化 + 初回コミット
|
|
|
|
- `github` → `https://github.com/posimai/[app-name].git`(Vercel 自動デプロイトリガー)
|
|
|
|
3. Gitea API でリポジトリ作成 → push
|
|
|
|
- `vercel --prod` 直接実行: **禁止**
|
|
|
|
4. GitHub CLI でリポジトリ作成 → push
|
|
|
|
- VPS バックエンド: `bash deploy-server.sh`(SSH 鍵認証・完全無人)
|
|
|
|
5. Vercel で GitHub 連携
|
|
|
|
|
|
|
|
6. git post-commit フック設置
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 5. テンプレート仕様(`_template/`)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 5.1 デザインシステム(変更禁止トークン)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```css
|
|
|
|
|
|
|
|
--bg: #0D0D0D /* ページ背景 */
|
|
|
|
|
|
|
|
--surface: #1A1A1A /* カード */
|
|
|
|
|
|
|
|
--surface2: #252525 /* ネスト要素 */
|
|
|
|
|
|
|
|
--border: #2D2D2D /* ボーダー */
|
|
|
|
|
|
|
|
--text: #F3F4F6 /* 主テキスト */
|
|
|
|
|
|
|
|
--text2: #9CA3AF /* 副テキスト */
|
|
|
|
|
|
|
|
--text3: #6B7280 /* 弱テキスト */
|
|
|
|
|
|
|
|
--accent: #6EE7B7 /* Posimai Teal(アプリごとに1行変更可) */
|
|
|
|
|
|
|
|
--radius: 12px
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- フォント: Inter (300/400/500/600)
|
|
|
|
|
|
|
|
- アイコン: Lucide のみ(stroke 1.5〜2.0)
|
|
|
|
|
|
|
|
- 絵文字: **絶対禁止**
|
|
|
|
|
|
|
|
- カラフルな配色: **禁止**
|
|
|
|
|
|
|
|
- バッジ: emerald(完了)/ amber(進行中)/ zinc(予定)の3色のみ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 5.2 テンプレートの現在の機能(Phase 1 実装済み)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
_template/index.html に含まれるもの:
|
|
|
|
|
|
|
|
├ header(52px glassmorphism)
|
|
|
|
|
|
|
|
│ ├ PC展開時: ページタイトルのみ(アプリ名はサイドバーに)
|
|
|
|
|
|
|
|
│ └ モバイル/折りたたみ時: アプリ名 + ハンバーガー
|
|
|
|
|
|
|
|
├ sidebar
|
|
|
|
|
|
|
|
│ ├ accordion ナビセクション(折りたたみ対応)
|
|
|
|
|
|
|
|
│ ├ nav-count バッジ(数値表示)
|
|
|
|
|
|
|
|
│ └ フッター(アバター + ユーザー名 + 設定歯車)
|
|
|
|
|
|
|
|
├ settings-panel(右スライドアウト)
|
|
|
|
|
|
|
|
│ ├ トグルスイッチ
|
|
|
|
|
|
|
|
│ ├ API キー入力
|
|
|
|
|
|
|
|
│ └ データ削除ボタン
|
|
|
|
|
|
|
|
├ main content
|
|
|
|
|
|
|
|
│ ├ card / list-item / empty-state
|
|
|
|
|
|
|
|
│ ├ btn-primary / btn-ghost / btn-danger
|
|
|
|
|
|
|
|
│ └ badge-stable / badge-progress / badge-planned
|
|
|
|
|
|
|
|
└ toast 通知
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 5.3 テンプレート Phase 2 候補(優先度付き)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 優先度 | 機能 | 判断根拠 |
|
|
|
|
|
|
|
|
|--------|------|---------|
|
|
|
|
|
|
|
|
| 中 | SWR API クライアント(オプションファイル) | API ありアプリ専用。デフォルト OFF |
|
|
|
|
|
|
|
|
| 中 | Pull to Refresh(モバイル) | PWA の基本 UX |
|
|
|
|
|
|
|
|
| 低 | コマンドパレット(Cmd+K) | パワーユーザー向け |
|
|
|
|
|
|
|
|
| 低 | BroadcastChannel(タブ同期) | 必要なアプリで個別実装 |
|
|
|
|
|
|
|
|
| 低 | PWA Share Target | manifest.json のコメントサンプルとして |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 6. AI エージェント役割分担
|
|
|
|
## 6. AI エージェント役割分担
|
|
|
|
|
|
|
|
|
|
|
|
| エージェント | 主な用途 | 得意なこと |
|
|
|
|
| 担当 | 内容 |
|
|
|
|
|---|---|---|
|
|
|
|
|------|------|
|
|
|
|
| **Claude Code** | 設計・実装・アーキテクチャ判断 | CLAUDE.md / LEARNINGS.md の遵守 |
|
|
|
|
| インフラ担当チャット | 認証実装・VPS デプロイ・DNS・server.js 変更 |
|
|
|
|
| **Cursor** | 日常的な小改修・インライン編集 | IDE 内での素早い修正 |
|
|
|
|
| UI 担当チャット | UX・デザイン・CLAUDE.md 適合・プライバシー表記・バグ修正 |
|
|
|
|
| **Antigravity** | 自律エージェント実験 | 複数ファイル横断変更 |
|
|
|
|
|
|
|
|
| **Gemini** | レビュー・大コンテキスト分析 | プロジェクト全体の俯瞰 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**注意**: Gemini はモデルバージョン・リリース日・具体的な数値を
|
|
|
|
**UI 担当が触ってはいけないもの:**
|
|
|
|
ハルシネーションする傾向がある。重要な技術情報は公式で確認すること。
|
|
|
|
`api.soar-enrich.com` URL / `X-API-Key` ヘッダー / `?init_key=` パラメータ / localStorage 認証ロジック / server.js・VPS・Docker 関連
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 7. AI モデル戦略(コストゼロ・上限なし優先)
|
|
|
|
## 7. 直近の確定事項(設計判断ログ)
|
|
|
|
|
|
|
|
|
|
|
|
### 7.1 基本方針
|
|
|
|
| 日付 | 決定事項 |
|
|
|
|
|
|
|
|
|------|---------|
|
|
|
|
「最新モデルを追いかけず、無料枠を確実に使い切る」
|
|
|
|
| 2026-03-25 | バックエンドを Synology → VPS(Eiji 提供)に移行完了 |
|
|
|
|
|
|
|
|
| 2026-03-26 | API URL を `posimai.soar-enrich.com` → `api.soar-enrich.com` に分離完了 |
|
|
|
|
### 7.2 推奨スタック(2026年3月時点での合理的な選択)
|
|
|
|
| 2026-03-27 | 認証方式を Supabase Auth(Magic Link + Passkey)に確定 |
|
|
|
|
|
|
|
|
| 2026-03-28 | 現行 auth テーブル(magic_link_tokens 等)は将来削除予定・今は放置 |
|
|
|
|
| 役割 | モデル | 費用 | 上限 |
|
|
|
|
| 保留中 | *.posimai.soar-enrich.com ワイルドカード DNS(Eiji 依頼待ち) |
|
|
|
|
|------|--------|------|------|
|
|
|
|
| 保留中 | VPS に VOICEVOX コンテナ追加(Eiji 作業中) |
|
|
|
|
| メイン(解析・生成) | Gemini Flash 最新版 | 無料枠 | 1分あたり RPM あり |
|
|
|
|
|
|
|
|
| コード論理検証 | DeepSeek V3 最新版 | 有料(格安) | 実質無制限 |
|
|
|
|
|
|
|
|
| 完全ローカル(上限なし) | Ollama on Synology | 0円 | なし(RAM 依存) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**重要**: モデル名・料金は Google AI Studio および DeepSeek 公式で必ず確認すること。
|
|
|
|
|
|
|
|
本ドキュメントに特定バージョンを記載しない理由は、AI によるハルシネーションを防ぐため。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 7.3 Ollama on Synology の実現可能性
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Synology モデル | RAM | 動作可能なモデル |
|
|
|
|
|
|
|
|
|----------------|-----|----------------|
|
|
|
|
|
|
|
|
| 4GB | Llama 3.2 3B(要確認) | 簡単な要約・コード補完 |
|
|
|
|
|
|
|
|
| 8GB+ | Llama 3.1 8B, Gemma 3 9B | 記事分析・コード生成 |
|
|
|
|
|
|
|
|
| 16GB+ | Mistral Nemo 12B 等 | ほぼ全用途をカバー |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
→ Synology の RAM 容量を確認してから検討
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 8. Synology Docker 目標アーキテクチャ
|
|
|
|
## 8. 絶対に守るルール(全 AI 共通)
|
|
|
|
|
|
|
|
|
|
|
|
### 8.1 現状(確認済み)
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
Container Manager / posimai_lab プロジェクト(稼働中)
|
|
|
|
|
|
|
|
├ gitea ✓ Docker 化済み
|
|
|
|
|
|
|
|
├ gitea_db ✓ PostgreSQL 稼働中(Gitea + API 共用)
|
|
|
|
|
|
|
|
├ mcp_server ✓ MCP サーバー稼働中
|
|
|
|
|
|
|
|
├ posimai_api ✓ Node.js API 稼働中(記事・Gemini プロキシ)
|
|
|
|
|
|
|
|
└ ai_proxy × 停止中 → 削除可
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
主な改善余地: シークレット管理 / nginx / DB 分離
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 8.2 目標構成(Container Manager / docker-compose)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
|
|
# posimai-synology/docker-compose.yml(設計案)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nginx:
|
|
|
|
|
|
|
|
image: nginx:alpine
|
|
|
|
|
|
|
|
ports:
|
|
|
|
|
|
|
|
- "80:80"
|
|
|
|
|
|
|
|
- "443:443"
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
|
|
- ./nginx/conf.d:/etc/nginx/conf.d:ro
|
|
|
|
|
|
|
|
- ./nginx/certs:/etc/nginx/certs:ro
|
|
|
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
depends_on:
|
|
|
|
|
|
|
|
- posimai-api
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
posimai-api:
|
|
|
|
|
|
|
|
build: ./api
|
|
|
|
|
|
|
|
environment:
|
|
|
|
|
|
|
|
- DATABASE_URL=postgresql://posimai:${DB_PASS}@postgres:5432/posimai
|
|
|
|
|
|
|
|
- GEMINI_API_KEY=${GEMINI_API_KEY}
|
|
|
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
depends_on:
|
|
|
|
|
|
|
|
postgres:
|
|
|
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
postgres:
|
|
|
|
|
|
|
|
image: postgres:16-alpine
|
|
|
|
|
|
|
|
environment:
|
|
|
|
|
|
|
|
- POSTGRES_USER=posimai
|
|
|
|
|
|
|
|
- POSTGRES_PASSWORD=${DB_PASS}
|
|
|
|
|
|
|
|
- POSTGRES_DB=posimai
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
|
|
- postgres_data:/var/lib/postgresql/data
|
|
|
|
|
|
|
|
healthcheck:
|
|
|
|
|
|
|
|
test: ["CMD-SHELL", "pg_isready -U posimai"]
|
|
|
|
|
|
|
|
interval: 10s
|
|
|
|
|
|
|
|
timeout: 5s
|
|
|
|
|
|
|
|
retries: 5
|
|
|
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Gitea(既にDockerなら統合、直インストールなら後回し)
|
|
|
|
|
|
|
|
# gitea:
|
|
|
|
|
|
|
|
# image: gitea/gitea:latest
|
|
|
|
|
|
|
|
# ...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# オプション: ローカル LLM(RAM 8GB以上推奨)
|
|
|
|
|
|
|
|
# ollama:
|
|
|
|
|
|
|
|
# image: ollama/ollama
|
|
|
|
|
|
|
|
# volumes:
|
|
|
|
|
|
|
|
# - ollama_data:/root/.ollama
|
|
|
|
|
|
|
|
# restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
|
|
postgres_data:
|
|
|
|
|
|
|
|
# ollama_data:
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**env ファイル(`.env`、gitignore 必須):**
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
DB_PASS=xxxxxxxxxx
|
|
|
|
|
|
|
|
GEMINI_API_KEY=xxxxxxxxxx
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 8.3 nginx ルーティング設計(案)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
|
|
|
|
# /api → posimai-api:8000
|
|
|
|
|
|
|
|
# /git → gitea:3000(任意)
|
|
|
|
|
|
|
|
# Tailscale IP または特定ポートでのみ公開
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 8.4 実装ステップ(優先度順)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 優先度 | タスク | 前提条件 |
|
|
|
|
|
|
|
|
|--------|--------|---------|
|
|
|
|
|
|
|
|
| 1 (高) | ai_proxy コンテナ削除 | すぐ実施可 |
|
|
|
|
|
|
|
|
| 2 (高) | docker-compose.yml の `.env` 分離 | シークレット管理改善 |
|
|
|
|
|
|
|
|
| 3 (中) | nginx 追加(HTTPS / リバースプロキシ) | Tailscale 運用継続なら低優先でも可 |
|
|
|
|
|
|
|
|
| 4 (中) | posimai_api 専用 DB ユーザー作成 | Gitea との DB ユーザー分離 |
|
|
|
|
|
|
|
|
| 5 (低) | Ollama 追加 | VM RAM を 8GB に増やしてから |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 9. 未解決事項(要確認)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 確認項目 | 判明状況 |
|
|
|
|
|
|
|
|
|---------|---------|
|
|
|
|
|
|
|
|
| Synology の RAM 容量 | ✓ 物理 16GB(VM に 4GB 割当)|
|
|
|
|
|
|
|
|
| FastAPI / Python | ✓ 不使用。Node.js (posimai_api) が担当 |
|
|
|
|
|
|
|
|
| データの保存形式 | ✓ PostgreSQL(gitea_db コンテナ)|
|
|
|
|
|
|
|
|
| Synology への外部アクセス | ✓ Tailscale(posimai-lab.tail72e846.ts.net)|
|
|
|
|
|
|
|
|
| Gitea は Docker か | ✓ Docker 化済み |
|
|
|
|
|
|
|
|
| VM(Posimai_lab)の OS・用途 | 未確認(SSH / VNC で確認要)|
|
|
|
|
|
|
|
|
| mcp_server の具体的な動作 | 未確認(どの AI エージェントが使っているか)|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 10. 絶対に守るルール(全 AI 共通)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. **デプロイは `npm run deploy` のみ**(`vercel --prod` 禁止)
|
|
|
|
1. **デプロイは `npm run deploy` のみ**(`vercel --prod` 禁止)
|
|
|
|
2. **絵文字禁止**(コード・UI・コメントすべて)
|
|
|
|
2. **絵文字禁止**(コード・UI・コメントすべて)
|
|
|
|
3. **アイコンは Lucide のみ**
|
|
|
|
3. **アイコンは Lucide のみ**(`@0.344.0` 固定)
|
|
|
|
4. **デザイントークン変更禁止**(--accent 1行のみ例外)
|
|
|
|
4. **デザイントークン変更禁止**(`--accent` 1行のみ例外)
|
|
|
|
5. **`git push origin` 禁止**(gitea と github の2リモートのみ)
|
|
|
|
5. **`git push origin` 禁止**(gitea と github の2リモートのみ)
|
|
|
|
6. **AI のバージョン断言は鵜呑みにしない**(公式確認必須)
|
|
|
|
6. **`api.soar-enrich.com` / 認証ロジックは UI 担当チャットが触らない**
|
|
|
|
7. **Synology への直接インストール禁止**(今後は全て Docker 経由)
|
|
|
|
7. **このファイルを変更したらすぐ「最終更新」日付を更新する**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
@ -413,9 +226,7 @@ GEMINI_API_KEY=xxxxxxxxxx
|
|
|
|
|---------|------|
|
|
|
|
|---------|------|
|
|
|
|
| `CLAUDE.md` | AI 向けプロジェクトルール(最優先) |
|
|
|
|
| `CLAUDE.md` | AI 向けプロジェクトルール(最優先) |
|
|
|
|
| `AGENTS.md` | CLAUDE.md の Cursor/Windsurf 向けコピー |
|
|
|
|
| `AGENTS.md` | CLAUDE.md の Cursor/Windsurf 向けコピー |
|
|
|
|
| `LEARNINGS.md` | 過去のトラブル・解決策・設計判断ログ |
|
|
|
|
| `docs/master-architecture.md` | **このファイル**(インフラ・確定事項の一元管理) |
|
|
|
|
| `docs/master-architecture.md` | **このファイル** |
|
|
|
|
| `posimai-dashboard/src/data/projects.json` | 全アプリの一覧・ステータス・技術スタック |
|
|
|
|
| `docs/template-features-analysis.md` | テンプレート機能優先度分析 |
|
|
|
|
| `_template/` | フル機能テンプレート |
|
|
|
|
| `docs/gemini-review-prompt.md` | Gemini へのレビュー依頼プロンプト |
|
|
|
|
| `_template-minimal/` | 単機能ツール用テンプレート |
|
|
|
|
| `_template/index.html` | PWA テンプレート(Phase 1 実装済み) |
|
|
|
|
|
|
|
|
| `scripts/new-app.sh` | 新アプリ作成自動化スクリプト |
|
|
|
|
|
|
|
|
|