209 lines
10 KiB
Markdown
209 lines
10 KiB
Markdown
---
|
||
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 → 同上
|
||
|
||
### Step 2 完了済み(2026-03-17)
|
||
- `posimai-root` リポジトリ: gitea/github 両方に push 済み
|
||
- 内容: CLAUDE.md, AGENTS.md, _template/, deploy-server.sh, scripts/, server.js, .gitignore
|
||
- Gitea: http://100.76.7.3:3000/mai/posimai-root
|
||
- GitHub: https://github.com/posimai/posimai-root (private)
|
||
- `claude-memory` リポジトリ: gitea/github 両方に push 済み
|
||
- 内容: memory/ 以下の全 .md ファイル(8ファイル)
|
||
- Gitea: http://100.76.7.3:3000/mai/claude-memory
|
||
- GitHub: https://github.com/posimai/claude-memory (private)
|
||
|
||
### Step 2 追加対応完了(2026-03-17)
|
||
- `claude-settings.json` を `posimai-root` に追加(`~/.claude/settings.json` のバックアップ)
|
||
- CLAUDE.md にディザスタリカバリセクション追記(新マシン復元手順 + 各リポジトリ更新コマンド)
|
||
- `posimai-root` に commit & push 済み(gitea + github)
|
||
|
||
### バックアップ後の残リスク
|
||
- memory 変更時は手動で push が必要(自動化なし)
|
||
```bash
|
||
cd ~/.claude/projects/c--Users-maita-posimai-project/memory
|
||
git add . && git commit -m "chore: update memory"
|
||
git push gitea main && git push github main
|
||
```
|
||
- `claude-settings.json` は手動コピー更新(settings.json 変更時は posimai-root にも反映する)
|
||
|
||
### 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] 即対応必須(2026-03-17 全対応済み)
|
||
- [x] **C-1** posimai-pulse/sw.js — origin チェック追加済み
|
||
- [x] **C-2** posimai-lens/sw.js — 同上
|
||
- [x] **C-3** posimai-tech-events/sw.js — origin チェック追加済み
|
||
- [x] **C-4** server.js /together/share — URL プロトコル検証追加済み(http/https のみ許可)
|
||
- [x] **H-1** posimai-ambient/index.html — theme-color media query 追加済み
|
||
- [x] **H-3** posimai-together/index.html — marked@9.1.6 + DOMPurify@3.1.6 追加・sanitize 実装済み
|
||
- [x] **M-3** server.js /together/react — type バリデーション追加済み(like/star/fire のみ)
|
||
|
||
### [MEDIUM] 設計不整合(2026-03-17 対応済み)
|
||
- [x] **M-1** #6EE7B7 ハードコード → pulse/diff/habit/lens の brand-logo gradient + heatmap を var(--accent) に置換
|
||
- [x] **M-2** border-radius: 8px 精査完了(2026-03-17)。変更すべきカード系3箇所のみ修正(hotels/.site-row / together/.group-info-box / feed/.pack-card)。残りはフォーム/ボタン/バッジで意図的8px。
|
||
- [x] **M-4** posimai-diff/sw.js, posimai-timer/sw.js — origin チェック追加済み
|
||
|
||
### [LOW] Tech debt(2026-03-17 全対応済み)
|
||
- [x] **L-1** posimai-brain/sw.js — 重複 fetch リスナー削除、v23 に更新・デプロイ済み
|
||
- [x] **L-4** Dashboard Timeline に 2026-03-17 セキュリティ監査エントリ追加・デプロイ済み
|
||
- [x] **L-5** server.js コメント・起動ログの絵文字削除済み(deploy-server.sh 要実行)
|
||
|
||
### [NEW CRITICAL] 2026-03-17 発見・対応済み
|
||
- [x] **posimai-daily/sw.js** — クロスオリジン API レスポンスキャッシュバグ(Habit と同パターン)→ origin チェック追加、v11 に更新・デプロイ済み
|
||
|
||
### 確認済み(対応不要)
|
||
- Lucide バージョン: 全アプリ @0.344.0 固定済み
|
||
- manifest.json / sw.js: 全PWAアプリで存在確認済み
|
||
- 絵文字: HTML ファイルでは検出なし
|
||
|
||
---
|
||
|
||
## 残タスク(手動・未対応)
|
||
- [x] ai_proxy コンテナ削除済み(Container Manager + ai-proxy/ ai-proxy-data/ ディレクトリも削除)
|
||
- [ ] posimai_widget APK 実機インストール・ウィジェット動作テスト
|
||
- [ ] Magic Link 動作確認(ブラウザで手動テスト)
|
||
- [x] Lucide アイコン — 全アプリ既に @0.344.0 固定済みと確認(残タスクは誤記)
|
||
|
||
## 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 キー管理(2026-03-17 完了)
|
||
- `GEMINI_TOGETHER_API_KEY` を `/volume1/docker/posimai_lab/.env` に追加(`GEMINI_API_KEY` と同値)
|
||
- `docker-compose.yml` の `posimai-api` サービスに `GEMINI_TOGETHER_API_KEY` 環境変数追加
|
||
- `docker compose up -d --no-deps posimai-api` で再起動・動作確認済み(health: ok, gemini: true)
|
||
|
||
### 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
|