claude-memory/project_status.md

209 lines
10 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.

---
name: プロジェクト現状・残タスク・次ステップ
description: 2026-03-16 全アプリ品質監査完了。ponshu-room は Flutter との乖離解消まで保留。
type: project
---
## 完了済み〜2026-03-15 全セッション)
### インフラ・設定
- Docker Compose の .env 分離Synology
- Magic Link キー保存先を全アプリで posimai_api_key に統一
- theme-color を全アプリで Teal (#6EE7B7) に統一
- server.js CORS wildcardposimai-*.vercel.app対応 → デプロイ済み
- Gemini モデル: gemini-3.1-flash-lite → gemini-2.0-flash-liteJournal AI tag 修正)
### posimai-daily 改修2026-03-15
- Feed 欄を Brain API → `posimai-feed.vercel.app/api/feed` に変更(常に最新)
- VOICEVOX TTS 実装AudioContext エンジン、AbortController、fallback
- 話者選択 UI設定パネルに 6 話者ボタン)
- SW v3skipWaiting + clients.claim
- API キー移行スクリプトposimai_api_key → posimai-daily-apikey
- NAS Infrastructure ページposimai-dashboard追加
- Sidebar に NAS Infrastructure リンク追加
### Dashboard 機能追加
- Ecosystem Map / Timeline / Boilerplates / Access Guide / NAS Infrastructure
- Sidebar 各ページへのリンク追加
### 新アプリ実装
- posimai-digest, posimai-clean, posimai-ambient, posimai_widget, posimai-widget-dl
---
## posimai-daily VOICEVOX TTS 問題2026-03-15 解決済み)
### 根本原因(確定)
VOICEVOX の合成速度が遅すぎたNAS の CPU が弱い):
- 短文 "テスト": 13 秒
- ニュース記事30 文字): 67 秒
- キャッシュ HIT: 0.005 秒
Tailscale Funnel が数秒のタイムアウトで接続を切断 → browser に response が届かず pending のまま。
### 解決策2026-03-15 実装・デプロイ済み)
**バックグラウンドウォームアップ方式**:
1. server.js に `POST /brain/api/tts/warmup` エンドポイント追加
- 即座に 202 を返すFunnel タイムアウトなし)
- VOICEVOX をバックグラウンドでシリアル合成してキャッシュに入れる
2. index.html で Feed 読み込み後に warmup を fire-and-forget で呼ぶ
3. `#tts-status` に「音声準備中...」→「音声準備完了」を表示
### ウォームアップ時間の目安
- 記事ごとに 13〜70 秒(テキスト長による)
- 全 6 テキスト5 記事 + 締め): 2〜5 分
- ユーザーが記事を読んでいる間に完了するケースが多い
- 未完了でも Web Speech API フォールバックが動く
### 現在のコード状態
- `server.js`: `ttsSynthesize()` ヘルパー + `/tts/warmup` エンドポイント追加済み
- `posimai-daily/index.html`: warmup 呼び出し + `#tts-status` 表示ロジック追加済み
- `posimai-daily/api/tts.js`: Vercel プロキシ(未使用、残置)
---
## バックアップ現状2026-03-17 調査)
### 安全Gitea + GitHub 二重保存済み)
- 全 posimai-* アプリ 22個 → gitea / github リモート両方あり確認済み
- ponshu-room → 同上
### PC 消失で消えるものgit 管理外・PC のみ)
- `server.js` — Synology API サーバー本体ソースCRITICAL
- `CLAUDE.md` — AI ルール設定CRITICAL
- `.claude/memory/` — 全引き継ぎ記憶CRITICAL
- `_template/` — アプリ雛形HIGH
- `deploy-server.sh` — デプロイスクリプトHIGH
- `scripts/` — 各種スクリプトMEDIUM
### 次セッション: Step 2 バックアップ整備(未完了)
**手順**:
1. Gitea Web UI で `posimai-root` リポジトリを新規作成http://100.76.7.3:3000/mai/
2. GitHub で `posimai/posimai-root` を private リポジトリとして作成
3. `c:/Users/maita/posimai-project/` で git init → remote 設定
4. `.gitignore` 作成node_modules, .vercel, *.bak, m-ai-dashboard*, mai_quick*, _conoha/
5. `git add CLAUDE.md _template/ deploy-server.sh scripts/ server.js`
6. push to both remotes
7. `.claude/` ディレクトリも別途 `claude-memory` リポジトリでバックアップ
### Step 1 完了済み2026-03-17
- posimai-dashboard: Header.tsx 末尾改行コミット・push 済み
- posimai-tech-events: theme-color media query 修正・gas-proxy-setup.md コミット・push 済み
- posimai-hotels: 改行コード差分のみ → git restore で戻した(変更なし)
---
## 全プロジェクト精査結果2026-03-17
### [CRITICAL] 即対応必須
- [ ] **C-1** posimai-pulse/sw.js — クロスオリジン API キャッシュバグoriginチェックなし→ 修正1行
- [ ] **C-2** posimai-lens/sw.js — 同上
- [ ] **C-3** posimai-tech-events/sw.js — /brain/api パスが /api/ で始まらず staticブランチにキャッシュされる
- [ ] **C-4** server.js archiveShare — URL プロトコルバリデーションなしSSRF類似リスク
- [ ] **H-1** posimai-ambient/index.html — theme-color media query なし(ライトモードで黒ステータスバー)
- [ ] **H-3** posimai-together/index.html:2005 — marked.parse に DOMPurify なし外部コンテンツXSSリスク
- [ ] **M-3** server.js /together/react — type フィールドバリデーションなしlike/star/fire以外が保存される
### [MEDIUM] 設計不整合
- [ ] **M-1** #6EE7B7 のハードコードbrand-logo gradient— pulse/diff/habit/lens に残存、var(--accent)に置換
- [ ] **M-2** border-radius: 8px が97箇所残存カード・モーダルに混在
- [ ] **M-4** posimai-diff/sw.js, posimai-timer/sw.js — originチェックなし現在実害なし、将来リスク
### [LOW] Tech debt
- [ ] **L-1** posimai-brain/sw.js — 重複 fetch リスナーWeb Share Target 用 no-op
- [ ] **L-4** Dashboard Timeline 最終エントリが 2026-03-15 で止まっている
- [ ] **L-5** server.js コメントに絵文字CLAUDE.md違反、実害なし
### 確認済み(対応不要)
- Lucide バージョン: 全アプリ @0.344.0 固定済み
- manifest.json / sw.js: 全PWAアプリで存在確認済み
- 絵文字: HTML ファイルでは検出なし
---
## 残タスク(手動・未対応)
- [ ] ai_proxy コンテナ削除Synology Container Manager
- [ ] posimai_widget APK 実機インストール・ウィジェット動作テスト
- [ ] Magic Link 動作確認(ブラウザで手動テスト)
- [ ] Lucide アイコン @latest → バージョン固定14アプリ横断、低優先度
## ponshu-room PWA — 保留中2026-03-16
**状態**: Flutter ネイティブアプリとの UI/UX 乖離が大きく、再設計が必要なため保留。
**問題点3つ**:
1. テーマが根本的に違うPosimai Teal → Washi 琥珀に要変更)
2. Sakenowa 自動マッチング6軸フレーバーが未実装
3. MBTI・ゲーミフィケーションが未実装
**再開時の参照先**: `ponshu-room/ROADMAP.md`(全詳細・優先度・実装チェックリスト記載)
**再開時の作業順**:
1. CSS を Washi テーマへ書き換え(最速で効果大)
2. データモデル拡張Sakenowa フィールド追加)
3. Sakenowa API 連携(公開 API、認証不要
4. グリッド/リスト切替
5. MBTI・ゲーミフィケーション後回し可
**触ってはいけないもの**: `ponshu_room_lite/`Flutter 版本体、読み取り専用参照のみ)
## posimai-together 実装状況2026-03-17 完了)
### 完了済み
- DB テーブルtogether_groups/members/shares/reactions/commentsクリーンリセット migration 追加
- 設定モーダル統合3モーダル → 1モーダル、タブ切替
- Quick CaptureWeb Share Target API、GET method
- インライン Reader SheetJina Reader + marked.js
- AI 要約スケルトンarchive_status: pending/done/failed
- Bubble BoardCanvas アニメーション)
- 30秒ポーリング + 新着バナー
### Gemini API キー管理(未完了)
- server.js に `genAITogether``GEMINI_TOGETHER_API_KEY` 専用インスタンス)追加済み・デプロイ済み
- **Container Manager での `GEMINI_TOGETHER_API_KEY` 環境変数設定が未完了**
- 「複製」で同名コンテナを作れない問題に直面
- 根本解決策docker-compose.yml + .env ファイルへの移行が必要
- 次セッションで SSH 経由で Synology の現状確認 → docker-compose 移行を実施する
### 次セッションでやること(優先順)
1. SSH で Synology の現在のコンテナ設定を確認docker inspect posimai_api
2. docker-compose.yml + .env ファイルを作成(/volume1/docker/posimai/ 等)
3. GEMINI_TOGETHER_API_KEY を .env に追加
4. docker-compose で再デプロイ(コンテナ名は posimai_api のまま維持)
5. Together アプリで AI 要約が動作することを確認
### Gemini サーバー側管理の中長期計画
- posimai-think → server.js の `/think/chat` エンドポイント経由に移行GEMINI_THINK_API_KEY
- posimai-digest → server.js の `/digest/summarize` 経由に移行GEMINI_DIGEST_API_KEY
- ponshu-room → server.js の `/ponshu/analyze` 経由に移行GEMINI_PONSHU_API_KEY
- 各アプリのキー入力 UI は廃止
---
## 確定済み「対応不要」
- `?init_key=` URL: **廃止しない**。Magic Link 方式は意図的設計
- Jina Reader SPOF: **対応済み**。AbortSignal.timeout(15000) + OGP フォールバック実装済み
-レポ化・Firebase SSO: 個人利用規模では不要
## 重要なシステム情報
### Dashboard 認証
- Basic 認証: middleware.ts で実装
- デフォルト: mai / posimai
- Vercel 環境変数: BASIC_AUTH_USER / BASIC_AUTH_PASSWORD
### デザインシステム v2
- Dark: bg #0D0D0D / surface #1A1A1A / accent #6EE7B7Teal
- Light: bg #F9FAFB / surface #FFFFFF / accent #059669Emerald-600
- アプリ別例外: journal/site = #80CAEESky Blue
- フォント: Inter 300/400/500/600 / アイコン: Lucide / 絵文字禁止
- radius: 12px
### Synology インフラ
- NAS IPTailscale: 100.76.7.3
- Docker binary: /var/packages/ContainerManager/target/usr/bin/docker
- Tailscale binary: /var/packages/Tailscale/target/bin/tailscale
- Brain API: http://127.0.0.1:8090/brain/api (ホスト上), posimai_api コンテナ
- VOICEVOX: http://127.0.0.1:50021 (ホスト上), コンテナ名 voicevox:50021
- Tailscale Funnel: /brain → http://127.0.0.1:8090, / → http://127.0.0.1:3000