--- 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 wildcard(posimai-*.vercel.app)対応 → デプロイ済み - Gemini モデル: gemini-3.1-flash-lite → gemini-2.0-flash-lite(Journal AI tag 修正) ### posimai-daily 改修(2026-03-15) - Feed 欄を Brain API → `posimai-feed.vercel.app/api/feed` に変更(常に最新) - VOICEVOX TTS 実装(AudioContext エンジン、AbortController、fallback) - 話者選択 UI(設定パネルに 6 話者ボタン) - SW v3(skipWaiting + 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 Capture(Web Share Target API、GET method) - インライン Reader Sheet(Jina Reader + marked.js) - AI 要約スケルトン(archive_status: pending/done/failed) - Bubble Board(Canvas アニメーション) - 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 #6EE7B7(Teal) - Light: bg #F9FAFB / surface #FFFFFF / accent #059669(Emerald-600) - アプリ別例外: journal/site = #80CAEE(Sky Blue) - フォント: Inter 300/400/500/600 / アイコン: Lucide / 絵文字禁止 - radius: 12px ### Synology インフラ - NAS IP(Tailscale): 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