--- 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クリーン + 履歴 | なし |