chore: update MEMORY.md description for project_infrastructure
This commit is contained in:
parent
b043e5ca57
commit
4c8a4b74ce
|
|
@ -7,7 +7,7 @@
|
|||
- [feedback_style.md](feedback_style.md) — 応答スタイル・コーディング方針
|
||||
|
||||
## Project
|
||||
- [project_infrastructure.md](project_infrastructure.md) — Synology インフラ・Docker 構成
|
||||
- [project_infrastructure.md](project_infrastructure.md) — VPS 本番インフラ・Synology バックアップ・認証方式・データ保存先
|
||||
- [project_api_keys.md](project_api_keys.md) — APIキー体系・認証設計
|
||||
- [project_status.md](project_status.md) — 現在の状態・残タスク・次ステップ
|
||||
|
||||
|
|
@ -15,5 +15,12 @@
|
|||
- [reference_deploy.md](reference_deploy.md) — デプロイ手順・リモート設定
|
||||
- [reference_gitea_auth.md](reference_gitea_auth.md) — Giteaリポジトリ自動作成手順(git credential storeを使用、手動案内禁止)
|
||||
|
||||
## 実装計画
|
||||
- [project_tools_enhancement.md](project_tools_enhancement.md) — ツールアプリ差別化実装計画(Timer/Diff/Lens/Digest、優先順位・具体的実装内容・CLAUDEルール抜粋)
|
||||
- [project_architecture_decisions.md](project_architecture_decisions.md) — 技術選定の決定理由(Supabase Auth 不採用・VPS vs Supabase 分担・Lucide 固定・ドメイン A 案採用)
|
||||
|
||||
## 外部サービス
|
||||
- [project_stripe.md](project_stripe.md) — Stripe アカウント済み・共同開発者共有済み・Kintone で決済テスト実績あり
|
||||
|
||||
## 要判断・保留事項
|
||||
- [project_ponshu_cleanup.md](project_ponshu_cleanup.md) — ponshu-room環境整理の未解決事項(Vercel命名・git remote・posimai-projectの謎)
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
---
|
||||
name: APIキー体系・認証設計
|
||||
description: Posimai プロジェクト全体のAPIキー構造と各アプリでの使われ方
|
||||
name: APIキー体系・認証設計(移行中)
|
||||
description: 現行の pk_ キー体系と、移行予定の Magic Link + Passkey 認証の状態
|
||||
type: project
|
||||
---
|
||||
|
||||
## posimai_api 認証キー(pk_ キー)
|
||||
フロントエンドアプリ → posimai_api への認証に使用
|
||||
## 現行認証(pk_ キー体系)— 移行中・触らない
|
||||
|
||||
| ユーザー | キー | localStorage キー名 |
|
||||
|---------|------|-------------------|
|
||||
|
|
@ -13,29 +12,45 @@ type: project
|
|||
| partner | pk_partner_fcfcbdf7d4a2ee23abf3ad046830af44 | posimai_api_key |
|
||||
| musume | pk_musume_76488f7ee2a4e6cd9d4b3ad6284d4cc7 | posimai_api_key |
|
||||
|
||||
## Gemini API キー
|
||||
- サーバーサイド(posimai_api)が Gemini に接続するためのキー
|
||||
- .env の GEMINI_API_KEY に設定
|
||||
- フロントエンドアプリは直接使わない
|
||||
**注意:** `X-API-Key` ヘッダー・`?init_key=` パラメータ・localStorage のキー保存ロジックは変更禁止。インフラ担当 AI が新認証完成後に移行する。
|
||||
|
||||
## Magic Link 仕組み
|
||||
- Dashboard → `?init_key=pk_maita_...` 付き URL でアプリを開く
|
||||
- アプリ側: `localStorage.setItem('posimai_api_key', initKey)` で保存
|
||||
- 対象: Brain / Reader / Feed(Maps は別途 Google Maps API キーが必要)
|
||||
## 新認証(実装中・2026-03-26 時点)
|
||||
|
||||
**方式:** Magic Link(メール)+ Passkey(WebAuthn/FIDO2)
|
||||
**実装場所:** VPS server.js(`@simplewebauthn/server@13.3.0` + `jsonwebtoken@9.0.3`)
|
||||
**Supabase Auth は不採用**(認証を2箇所に持つことになるため)
|
||||
|
||||
### VPS 環境変数(設定済み)
|
||||
- `JWT_SECRET`: 設定済み
|
||||
- `WEBAUTHN_RP_ID`: `posimai.soar-enrich.com`
|
||||
- `WEBAUTHN_ORIGINS`: `https://posimai.soar-enrich.com,http://localhost:3000`
|
||||
- `MAGIC_LINK_BASE_URL`: `https://posimai.soar-enrich.com`
|
||||
- `RESEND_API_KEY`: 設定済み(DNS 検証待ち)
|
||||
|
||||
### VPS DB テーブル(作成済み)
|
||||
- `magic_link_tokens` — Magic Link トークン管理
|
||||
- `passkey_credentials` — WebAuthn 公開鍵保存
|
||||
- `auth_sessions` — JWT セッション管理
|
||||
- `magic_link_rate_limit` — レート制限
|
||||
- `users.email` / `users.email_verified` — カラム追加済み
|
||||
|
||||
### server.js 実装状況
|
||||
- エンドポイント実装: **未完了(次のセッションで実施予定)**
|
||||
- 実装予定エンドポイント:
|
||||
- `POST /api/auth/magic-link/send`
|
||||
- `GET /api/auth/magic-link/verify`
|
||||
- `POST /api/auth/passkey/register/begin`
|
||||
- `POST /api/auth/passkey/register/finish`
|
||||
- `POST /api/auth/passkey/login/begin`
|
||||
- `POST /api/auth/passkey/login/finish`
|
||||
- `GET /api/auth/session/verify`
|
||||
- `DELETE /api/auth/session`
|
||||
|
||||
## Gemini API キー
|
||||
- サーバーサイド(server.js)が Gemini に接続するためのキー
|
||||
- docker-compose.yml の `GEMINI_API_KEY` に設定済み
|
||||
- think アプリはフロントから直接 Gemini API を呼び出す(ユーザーが自分の API キーを入力)
|
||||
|
||||
## Dashboard 環境変数
|
||||
- Vercel: POSIMAI_API_KEY = pk_maita_... (2026-03-12 追加済み)
|
||||
|
||||
## 各アプリのキー要否
|
||||
| アプリ | 必要なキー | 用途 |
|
||||
|--------|-----------|------|
|
||||
| Brain | posimai_api_key | 記事保存・取得 |
|
||||
| Reader | posimai_api_key | Brain への保存(記事取得は Jina AI 無料) |
|
||||
| Feed | posimai_api_key | Brain への保存 |
|
||||
| Maps | Google Maps API Key | 地図検索(posimai_api キー不要) |
|
||||
| Think | Gemini API Key(AIza...) | Gemini 2.5 Flash 直接呼び出し |
|
||||
|
||||
## AI API方針
|
||||
- フロントエンドからAIを直接呼ぶ場合は **Gemini API**(AIza...)を使う
|
||||
- Claude API(sk-ant-...)は持っていないため使わない
|
||||
- posimai_api バックエンドに chatエンドポイントはまだない(将来追加予定)
|
||||
- Vercel: `POSIMAI_API_KEY` = pk_maita_...(設定済み)
|
||||
- Vercel: `BASIC_AUTH_USER` / `BASIC_AUTH_PASSWORD`(設定済み)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,82 @@
|
|||
---
|
||||
name: アーキテクチャ決定事項
|
||||
description: 技術選定・設計方針の決定理由。なぜその選択をしたかの根拠。将来の AI が同じ議論を繰り返さないために保存。
|
||||
type: 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-dashboard
|
||||
- `api.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 ロジックには手を付けない。移行は認証実装完了後に着手。
|
||||
|
|
@ -1,28 +1,77 @@
|
|||
---
|
||||
name: Synology インフラ・Docker 構成
|
||||
description: Synology NAS 上の Docker Compose 環境と各コンテナの役割
|
||||
name: インフラ構成・デプロイ構成・AI ロール分担
|
||||
description: VPS 移行完了(2026-03-25)。ドメイン分離完了(2026-03-26)。認証: Supabase Auth に確定(2026-03-27)。
|
||||
type: project
|
||||
---
|
||||
|
||||
## Synology NAS
|
||||
- 本体: Mai_SVR(物理NAS)
|
||||
- VM: Posimai_lab(Synology Virtual Machine Manager 上の Linux VM)
|
||||
- Tailscale ドメイン: posimai-lab.tail72e846.ts.net
|
||||
## 本番インフラ(2026-03-26 時点・確定済み)
|
||||
|
||||
## Docker Compose(/volume1/docker/posimai_lab/)
|
||||
- **gitea**: Gitea git サーバー(プライマリリモート)
|
||||
- **gitea_db**: PostgreSQL 15(Gitea 用 DB)
|
||||
- **posimai_api**: Node.js API サーバー(Brain/Feed/Reader のバックエンド)
|
||||
- server-current.js がメインファイル
|
||||
- エンドポイント: /brain/api/articles, /brain/api/save, /brain/api/feed/media 等
|
||||
- **mcp_server**: MCP サーバー(AI エージェント連携)
|
||||
- **ai_proxy**: 停止中・削除予定(旧 Ponshu Room Python プロキシ)
|
||||
| 項目 | 状態 |
|
||||
|------|------|
|
||||
| バックエンド本番 | VPS(Ubuntu 25.04 / AMD EPYC 4コア / 5.8GB RAM / 85.131.245.239) |
|
||||
| **現行 API URL** | `https://api.soar-enrich.com/brain/api`(2026-03-26 移行完了) |
|
||||
| フロント入口 | `https://posimai.soar-enrich.com` → Vercel → posimai-dashboard |
|
||||
| Synology NAS | 並行稼働継続(バックアップ扱い・停止しない) |
|
||||
| Resend DNS | 設定済み・稼働中(DKIM/SPF 認証完了) |
|
||||
| WebAuthn rpID | `posimai.soar-enrich.com`(VPS 設定済み・認証実装待ち) |
|
||||
|
||||
## 独立コンテナ(プロジェクト外)
|
||||
- uptime-kuma: 死活監視
|
||||
- ponshu-proxy-server: Ponshu Room Node.js プロキシ
|
||||
- ponshu-redis: Ponshu Room Redis
|
||||
## ドメイン構成(確定)
|
||||
|
||||
## .env ファイル
|
||||
- 場所: /volume1/docker/posimai_lab/.env
|
||||
- 変数: DB_PASS, GITEA_DOMAIN, GEMINI_API_KEY, GEMINI_TOGETHER_API_KEY, API_KEYS, ALLOWED_ORIGINS
|
||||
| ドメイン | 向き先 | 用途 |
|
||||
|---------|--------|------|
|
||||
| `posimai.soar-enrich.com` | Vercel(76.76.21.21) | posimai-dashboard 表示 |
|
||||
| `api.soar-enrich.com` | VPS(85.131.245.239) | バックエンド API |
|
||||
| `posimai-xxx.vercel.app` | Vercel | 各アプリ(全 23 本) |
|
||||
|
||||
## 認証方式(確定: Supabase Auth)
|
||||
|
||||
- **現行**: API_KEYS(pk_maita_xxx 等)+ `?init_key=` Magic Link → localStorage
|
||||
- **移行先(確定)**: Supabase Auth(Magic Link + Passkey)
|
||||
- メール送信: Resend をカスタム SMTP として設定(noreply@soar-enrich.com)
|
||||
- VPS は Supabase JWT を検証するだけ
|
||||
- **Passkey ドメイン課題**: `*.posimai.soar-enrich.com` ワイルドカード DNS を Eiji に依頼予定
|
||||
|
||||
**How to apply:** 実装完了まで `X-API-Key`・`?init_key=`・localStorage 認証ロジックは変更禁止。
|
||||
|
||||
## データ保存先
|
||||
|
||||
| 保存先 | 対象アプリ・データ |
|
||||
|--------|-----------------|
|
||||
| VPS PostgreSQL | brain・journal・site・reading_history・認証情報 |
|
||||
| Supabase | together(リアルタイム同期・稼働中) |
|
||||
| localStorage | veil設定・timer設定(**永続・Supabase 移行しない**)/ habit・pulse・reader既読(将来 Supabase 移行予定・商用化フェーズ3) |
|
||||
| データなし | diff・clean・lens・digest・think・timer(都度処理) |
|
||||
|
||||
## VPS Docker 構成
|
||||
|
||||
- posimai-api(Node.js / Express / :8090)
|
||||
- PostgreSQL 16(posimai_brain DB)
|
||||
- Nginx(api.soar-enrich.com SSL + リバースプロキシ)
|
||||
- VOICEVOX(:50021)【追加予定・Eiji 作業中】— docker-compose に voicevox コンテナ追加で有効化、server.js は設定済み
|
||||
- deploy: `bash deploy-server.sh`(SSH鍵認証・完全無人)
|
||||
|
||||
## Synology Docker 構成(バックアップ)
|
||||
|
||||
- NAS IP(Tailscale): 100.76.7.3 / posimai-lab.tail72e846.ts.net
|
||||
- posimai_api(旧 API・待機中)・PostgreSQL 15・Gitea・Uptime Kuma
|
||||
|
||||
## Ubuntu PC → Synology NAS バックアップ(別チャットで設定済み)
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| バックアップ元 | Ubuntu PC `/home/ubuntu-pc/` |
|
||||
| バックアップ先 | NAS `/volume1/homes/mai/backup/ubuntu-pc/home/` |
|
||||
| 実行タイミング | 毎日午前3時(cron) |
|
||||
| 転送経路 | Tailscale VPN 経由(約 1.1 MB/s) |
|
||||
| 除外ディレクトリ | `.cache` / `Downloads` / `Trash` |
|
||||
|
||||
※ Ubuntu PC は Synology NAS・開発用 Windows PC とは別の物理マシン(要確認)
|
||||
|
||||
## AI のロール分担
|
||||
|
||||
| 担当 | 内容 |
|
||||
|------|------|
|
||||
| **インフラ担当チャット** | 認証実装・VPS デプロイ・DNS 管理・server.js 変更 |
|
||||
| **UI 担当チャット** | UX ブラッシュアップ・デザイン修正・CLAUDE.md 適合・プライバシー表記 |
|
||||
|
||||
UI 担当が触ってはいけないもの: `api.soar-enrich.com` URL・X-API-Key・?init_key=・localStorage 認証ロジック・認証実装全般
|
||||
|
|
|
|||
|
|
@ -1,102 +1,73 @@
|
|||
---
|
||||
name: プロジェクト現状・残タスク・次ステップ
|
||||
description: 2026-03-21 全アプリコードレビュー完了。残タスク・新アプリ候補を整理。
|
||||
description: 2026-03-26 時点の状態。VPS 移行完了・認証実装中・ドメイン分離待ち。
|
||||
type: project
|
||||
---
|
||||
|
||||
## 残タスク(2026-03-21 時点)
|
||||
## 現状(2026-03-26)
|
||||
|
||||
### AI が対応できる未着手タスク
|
||||
### 完了済み
|
||||
- VPS 移行(2026-03-25): Synology → Ubuntu VPS(85.131.245.239)
|
||||
- 全フロントアプリ(23本)の API URL を Synology → `posimai.soar-enrich.com` に更新・デプロイ済み
|
||||
- VPS: PostgreSQL 16・Nginx・Let's Encrypt・Docker Compose 構築済み
|
||||
- VPS: 新認証テーブル(magic_link_tokens / passkey_credentials / auth_sessions)作成済み
|
||||
- VPS: WebAuthn 環境変数・JWT_SECRET 設定済み
|
||||
- Resend アカウント作成・API キー設定済み
|
||||
- Vercel: `posimai-brain` に `posimai.soar-enrich.com` を事前登録済み
|
||||
|
||||
| タスク | 詳細 |
|
||||
|--------|------|
|
||||
| posimai-events 実データ連携 | MOCK_EVENTS 除去済み。現在は空配列を返す。n8n webhook → POST /api/events → Vercel KV(または Synology DB)に書き込む実装が必要 |
|
||||
| 既存アプリへの posimai-ui 適用 | together は適用済み。他アプリ(brain, reader, feed, maps 等)へ順次適用予定。1アプリずつ着手時に対応 |
|
||||
| habit / pulse データを Brief ブリーフィングに組み込む | Brief は現在 Feed API のみ参照。habit の完了率・pulse の気分/エネルギーを冒頭サマリーに読み上げさせる設計が必要 |
|
||||
| Reader デバイス間同期 | 「近日公開」テキストが残存。Synology history API 経由での既読履歴クロスデバイス共有の実装 |
|
||||
| Pulse AI インサイト | 相関分析(habit との関係)・Gemini を使った週次振り返りコメント機能 |
|
||||
| Ambient Ponshu Room ゾーン | zone-placeholder のまま。Ponshu Room が保留解除されたら連携実装 |
|
||||
### 進行中
|
||||
- **server.js への認証エンドポイント実装**(Magic Link + Passkey)— 次セッションで着手
|
||||
- **共同開発者待ち**: `api.soar-enrich.com` DNS レコード作成・Resend DNS 検証
|
||||
|
||||
### 手動テスト(人間が必要)
|
||||
|
||||
| タスク | 詳細 |
|
||||
|--------|------|
|
||||
| posimai_widget APK 実機テスト | v1.5.0 / v1.6.0(Pulse ウィジェット追加)の実機動作確認 |
|
||||
| Magic Link 動作確認 | ?init_key= パラメータでブラウザ手動テスト(habit/pulse/daily/ambient/clean/brain) |
|
||||
| Brief VOICEVOX テスト | Synology Docker に VOICEVOX コンテナ追加後、ずんだもん音声の動作確認 |
|
||||
|
||||
### 新アプリ候補(確定)
|
||||
|
||||
| アプリ | 内容 | 優先度 |
|
||||
|--------|------|--------|
|
||||
| posimai-rewind | habit / pulse / brain / journal 横断の振り返りアプリ。pulse の相関分析ギャップも解決 | 高 |
|
||||
| posimai-shelf | 本・映画・アニメ記録。brain(Web記事)と補完、journal に感想転送 | 中 |
|
||||
|
||||
### 新アプリ候補(却下済み)
|
||||
|
||||
| アプリ | 理由 |
|
||||
|--------|------|
|
||||
| posimai-weather | ambient に統合推奨(すでに open-meteo で実装済み)。単独アプリ不要 |
|
||||
| posimai-budget | 代替ツールで代替しやすい |
|
||||
| posimai-voice | clean・digest と薄くかぶる、thin すぎ |
|
||||
### 共同開発者の作業完了後に実施すること(AI が実行)
|
||||
1. VPS で `certbot certonly --nginx -d api.soar-enrich.com`
|
||||
2. Nginx `api.soar-enrich.com` config を有効化
|
||||
3. 全フロント 23 アプリの API URL を `posimai.soar-enrich.com` → `api.soar-enrich.com` に一括置換・デプロイ
|
||||
4. 動作確認後、共同開発者に `posimai.soar-enrich.com` A レコードを Vercel(76.76.21.21)に変更依頼
|
||||
|
||||
---
|
||||
|
||||
## 完了済み(2026-03-21 このセッション)
|
||||
## AI ロール分担
|
||||
|
||||
### 全アプリ批判的コードレビュー
|
||||
- 重大な CLAUDE.md 違反: なし
|
||||
- 別チャット誤検知の訂正: ambient 天気は open-meteo で実装済み(fetchWeather 関数)、daily skip ボタンも skipArticle() で実装済み
|
||||
- sw.js console.log / console.warn 削除: brain / reader / feed(各2箇所)
|
||||
| 担当 | 内容 |
|
||||
|------|------|
|
||||
| **インフラ担当チャット(このメモを読んでいる AI)** | server.js 認証実装・API URL 一括置換・DNS 切り替え・VPS デプロイ |
|
||||
| **UI 担当チャット(別チャット)** | UX ブラッシュアップ・デザイン修正・プライバシー表記追加 |
|
||||
|
||||
### posimai-brief 新規作成・デプロイ
|
||||
- Feed 記事読み上げ PWA(VOICEVOX / ずんだもん 対応、Canvas 波形、MediaSession API)
|
||||
- GitHub リポジトリ作成・Vercel 連携・初回デプロイトリガー完了
|
||||
- Dashboard カード・Ecosystem・Timeline・Access Guide 追加済み
|
||||
|
||||
### posimai-veil 改善(2026-03-21)
|
||||
- カスタムアプリ登録機能(63 Lucide アイコンピッカー、イニシャルバッジ)
|
||||
- PWA インストール対応(logo.png 追加)
|
||||
- ツールバー統合(カテゴリタブ + 虫眼鏡 + square-pen 編集アイコン = 1行)
|
||||
- 検索バーを折りたたみ式に変更
|
||||
- SW キャッシュを v3 にバンプ(旧キャッシュ強制削除)
|
||||
- base.css の main padding 上書き(没入型レイアウト対応)
|
||||
|
||||
### posimai-dashboard 改善(2026-03-21)
|
||||
- /keys ページに Gemini API 消費状況(サーバー側 / クライアント側)を詳細追記
|
||||
- Brief 追加に伴うカード・Ecosystem・Timeline・Access Guide 更新
|
||||
UI 担当チャットへの指示:
|
||||
- API URL・認証ロジック(X-API-Key / ?init_key=)は触らない
|
||||
- Supabase Auth の採用提案は禁止(不採用確定)
|
||||
- Phase 1(プライバシー表記追加)から着手
|
||||
|
||||
---
|
||||
|
||||
## 確定済み「対応不要」(CLAUDE.md にも記載済み)
|
||||
- Lucide CDN に defer 付与: 体感効果なし・不要
|
||||
- モノレポ化: 個人規模では不要
|
||||
- Firebase / Supabase SSO: 現行 Magic Link で十分
|
||||
- `?init_key=` URL 廃止: 意図的設計
|
||||
## 商用化ブロッカー現状
|
||||
|
||||
## 重要なシステム情報
|
||||
| ブロッカー | 状態 |
|
||||
|-----------|------|
|
||||
| 個人インフラ依存(Synology) | **解決済み**(VPS 移行 2026-03-25) |
|
||||
| 認証モデルが一人用 | **対応中**(Magic Link + Passkey 実装中) |
|
||||
| localStorage のみ(データ消失リスク) | **将来フェーズ**(認証完了後に habit/pulse を Supabase 移行) |
|
||||
|
||||
### Dashboard 認証
|
||||
- Basic 認証: middleware.ts で実装
|
||||
- デフォルト: mai / posimai
|
||||
- Vercel 環境変数: BASIC_AUTH_USER / BASIC_AUTH_PASSWORD
|
||||
---
|
||||
|
||||
### デザインシステム v2
|
||||
- Dark: bg #0D0D0D / surface #1A1A1A / accent #6EE7B7(Teal)
|
||||
- Light: bg #F9FAFB / surface #FFFFFF / accent #059669(Emerald-600)
|
||||
- アプリ別例外: journal/site = #80CAEE(Sky Blue)
|
||||
- radius: 12px / フォント: Inter / アイコン: Lucide / 絵文字禁止
|
||||
## 残タスク(アプリ機能)
|
||||
|
||||
### Synology インフラ
|
||||
- NAS IP(Tailscale): 100.76.7.3
|
||||
- Brain API: http://127.0.0.1:8090/brain/api、コンテナ名 posimai-api
|
||||
- Tailscale Funnel: /brain → http://127.0.0.1:8090, / → http://127.0.0.1:3000
|
||||
| タスク | 詳細 |
|
||||
|--------|------|
|
||||
| posimai-events 実データ連携 | 空配列のまま。n8n webhook → POST /api/events → DB の実装が必要 |
|
||||
| habit / pulse を Supabase に移行 | 将来フェーズ。認証完了後 |
|
||||
| Reader デバイス間同期 | 「近日公開」テキスト残存。history API 経由での既読履歴同期 |
|
||||
| Pulse AI インサイト | habit との相関分析・Gemini 週次コメント |
|
||||
| Brief VOICEVOX テスト | VPS に VOICEVOX コンテナ追加後の動作確認 |
|
||||
|
||||
### VOICEVOX(Brief 用)
|
||||
- server.js に TTS エンドポイント実装済み(/tts, /tts/warmup, /tts/ready)
|
||||
- VOICEVOX_URL = process.env.VOICEVOX_URL || 'http://voicevox:50021'
|
||||
- Synology の docker-compose に voicevox コンテナを追加するだけで自動有効化
|
||||
## 新アプリ候補
|
||||
|
||||
### ponshu-room 保留中
|
||||
- 状態: Flutter版との UI/UX 乖離・Sakenowa 連携・Washi テーマ対応が必要で保留
|
||||
- 再開時: `ponshu-room/ROADMAP.md` を参照
|
||||
| アプリ | 優先度 |
|
||||
|--------|--------|
|
||||
| posimai-rewind | 高(habit/pulse/brain/journal 横断振り返り) |
|
||||
| posimai-shelf | 中(本・映画・アニメ記録) |
|
||||
|
||||
## ponshu-room 保留中
|
||||
- 状態: Flutter 版との UI 乖離・Sakenowa 連携・Washi テーマ対応が必要で保留
|
||||
- 再開時: `ponshu-room/ROADMAP.md` 参照
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
name: Stripe アカウント・決済実績
|
||||
description: Stripe は既存アカウントあり・共同開発者と共有済み・Kintone 販売フローで決済テスト実績あり
|
||||
type: project
|
||||
---
|
||||
|
||||
## Stripe の現状
|
||||
|
||||
- アカウント: 既に作成済み
|
||||
- 共同開発者: 既に共有設定済み
|
||||
- 決済テスト: Kintone 販売フロー・プラグイン開発時に実施済み(本番フロー通し確認あり)
|
||||
|
||||
**Why:** 別プロダクト(Kintone 系)の開発時に整備された。
|
||||
|
||||
**How to apply:** Posimai に課金機能を追加する際、Stripe アカウント新規作成・共有設定・テストは不要。「どのエンドポイントに Stripe Checkout を繋ぐか」の実装だけに集中できる。Webhook や Price ID の設定手順も経験済みのはず。
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
---
|
||||
name: ツールアプリ差別化実装計画
|
||||
description: Posimai ツールカテゴリ各アプリへのエコシステム連携・差別化機能の実装計画(優先順位付き)
|
||||
type: project
|
||||
---
|
||||
|
||||
## 背景・目的
|
||||
|
||||
ツールカテゴリ(digest/clean/timer/lens/diff/roadmap)は現状「汎用ツール + Posimaiデザイン」止まりで、
|
||||
エコシステムとの連携がゼロ。Posimaiらしさを出すために以下の実装を優先順位順に進める。
|
||||
|
||||
**Why:** 各ツールが Pulse/Brain/Journal/Maps 等の他アプリと連携することで、
|
||||
「使って終わり」から「記録・蓄積・振り返り」のループが完成する。
|
||||
|
||||
**How to apply:** 実装前に必ず現在のアプリコードを全文読んでから着手する。
|
||||
|
||||
---
|
||||
|
||||
## 実装優先順位と内容
|
||||
|
||||
### 1位: posimai-timer — Pulse連携 + セッションログ
|
||||
|
||||
**実装内容:**
|
||||
- タイマー終了時(カウントダウン)に「集中セッション終了モーダル」を表示
|
||||
- 何をやったか(テキストメモ、任意)
|
||||
- エネルギーレベル(1-5 スライダー or タップ選択)
|
||||
- 気分(1-5)
|
||||
→ これを Pulse と同じ localStorage スキーマで保存する
|
||||
- セッション履歴ビューを追加(サイドバーに「履歴」ナビ追加)
|
||||
- 日付ごとのセッション一覧(時刻・時間・メモ・エネルギー)
|
||||
- 今週の合計集中時間を冒頭に表示
|
||||
- Habit と同じ週ヒートマップで可視化(日別集中時間)
|
||||
|
||||
**Pulse との連携方式:**
|
||||
- Pulse の localStorage キー: `posimai-pulse-entries`(data-app-id="posimai-pulse" 配下)
|
||||
- Timer が直接同じキーに書き込むのではなく、Timer 独自キー `posimai-timer-sessions` に保存
|
||||
→ Pulse アプリ側で Timer セッション連携を将来追加する方が正しい設計
|
||||
→ 今回は Timer 内にセッション記録・閲覧機能を完結させる
|
||||
|
||||
**UI ルール:**
|
||||
- 終了モーダルは既存のデザインシステム(--surface, --border, --accent)を使う
|
||||
- モーダルはシンプル。テキスト入力 + エネルギー選択(5段階)のみ。送信 or スキップ
|
||||
- ヒートマップは Habit アプリと同じロジックで実装(7列 × N行グリッド、今週ハイライト)
|
||||
|
||||
---
|
||||
|
||||
### 2位: posimai-diff — 履歴保存 + Journalへ送信
|
||||
|
||||
**実装内容:**
|
||||
- 比較履歴の永続化
|
||||
- 「保存」ボタンでタイトル付き保存(localStorage: `posimai-diff-history`)
|
||||
- 履歴ビュー(サイドバー「履歴」)で過去の比較を再読み込み
|
||||
- 最大20件保存(古いものから削除)
|
||||
- Journalへ送信ボタン
|
||||
- 差分結果エリアの右上に「Journal へ送る」ボタン
|
||||
- クリックで Posimai Journal(`https://posimai-journal.vercel.app`)を
|
||||
`?body=` パラメータ付きで別タブで開く
|
||||
(差分テキスト + 比較元タイトルを body に含める)
|
||||
|
||||
---
|
||||
|
||||
### 3位: posimai-lens — Maps連携ボタン
|
||||
|
||||
**実装内容:**
|
||||
- EXIF に GPS 座標が含まれる場合、「Mapsで開く」ボタンを表示
|
||||
- クリックで `https://posimai-maps.vercel.app/?lat=XX&lng=YY&label=ファイル名` を別タブで開く
|
||||
- Maps 側が `?lat=&lng=&label=` を受け取ってピン表示できるか事前確認が必要
|
||||
(Maps の現コードを読んで対応の有無を確認してから実装する)
|
||||
- 撮影設定メモのお気に入り登録
|
||||
- 「この設定をお気に入りに追加」ボタン(localStorage: `posimai-lens-favorites`)
|
||||
- お気に入りビューで設定名 + F値/SS/ISO 一覧
|
||||
|
||||
---
|
||||
|
||||
### 4位: posimai-digest — Brainへ保存
|
||||
|
||||
**実装内容:**
|
||||
- 要約結果エリアの右下に「Brain に保存」ボタン
|
||||
- クリックで Synology Brain API に POST
|
||||
- エンドポイント: `POST /brain/api/articles`
|
||||
- body: `{ title: (元URLのタイトルor先頭40文字), content: 要約テキスト, url: 元URL, source: "digest" }`
|
||||
- API キーは既存の `posimai_api_key` を使用(localStorage から取得)
|
||||
- 保存成功時はトースト表示「Brain に保存しました」
|
||||
|
||||
---
|
||||
|
||||
### 5位: posimai-clean — 現状維持
|
||||
|
||||
現時点では追加機能の優先度が低いため対応しない。
|
||||
|
||||
---
|
||||
|
||||
## 実装前に必ず確認すること(CLAUDE.md ルール抜粋・特に重要なもの)
|
||||
|
||||
1. **絵文字は一切使わない**(コード・HTML・コメント・トースト文言すべて)
|
||||
2. **lucide@latest を使わない** → `@0.344.0` 固定
|
||||
3. **アクセントカラーは `var(--accent)` を使う**。`#6EE7B7` のハードコード禁止
|
||||
4. **SW でクロスオリジン GET をキャッシュしない**(Brain API 等の外部 API は必ずネットワーク経由)
|
||||
5. **底面固定要素には `env(safe-area-inset-bottom)` を付ける**
|
||||
6. **外部リンクには `rel="noopener"` を付ける**(`target="_blank"` とセット)
|
||||
7. **デプロイは `npm run deploy`**(= `git push gitea main && git push github main`)
|
||||
`vercel --prod` は直接実行しない
|
||||
8. **デプロイ後は Dashboard Timeline に追記して Dashboard もデプロイする**(規模問わず必須)
|
||||
9. **`lucide.createIcons()` は早期 return の後に呼ばない**(アイコンが空になるバグ防止)
|
||||
|
||||
## デプロイ手順(毎回)
|
||||
|
||||
```bash
|
||||
cd posimai-[app]
|
||||
git add .
|
||||
git commit -m "feat: ..."
|
||||
npm run deploy # git push gitea main && git push github main
|
||||
|
||||
# その後必ず Dashboard Timeline 更新
|
||||
cd ../posimai-dashboard
|
||||
# src/app/timeline/page.tsx の EVENTS 配列に追記
|
||||
git add src/app/timeline/page.tsx
|
||||
git commit -m "chore: update timeline"
|
||||
npm run deploy
|
||||
```
|
||||
|
||||
## 各アプリの現状(2026-03-23 確認)
|
||||
|
||||
| アプリ | 現状 | Pulse/Brain API連携 |
|
||||
|--------|------|---------------------|
|
||||
| posimai-timer | ストップウォッチ + カウントダウン。履歴なし | なし |
|
||||
| posimai-diff | テキスト差分のみ。保存機能なし | なし |
|
||||
| posimai-lens | EXIF読み取り + 履歴。GPS表示あり(テキスト)| なし |
|
||||
| posimai-digest | Gemini API 要約 + 履歴。APIキー設定あり | なし |
|
||||
| posimai-clean | URLクリーン + 履歴 | なし |
|
||||
Loading…
Reference in New Issue