chore: initial backup of Claude Code project memory

Backs up all memory files (MEMORY.md, user_profile, feedback_style,
project_status, project_infrastructure, project_api_keys, reference_deploy,
project_ponshu_cleanup) for disaster recovery.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
posimai 2026-03-17 17:20:02 +09:00
commit 6f0c2ccbed
8 changed files with 460 additions and 0 deletions

18
MEMORY.md Normal file
View File

@ -0,0 +1,18 @@
# Posimai Project Memory Index
## User
- [user_profile.md](user_profile.md) — 開発者プロフィール・スキルレベル
## Feedback
- [feedback_style.md](feedback_style.md) — 応答スタイル・コーディング方針
## Project
- [project_infrastructure.md](project_infrastructure.md) — Synology インフラ・Docker 構成
- [project_api_keys.md](project_api_keys.md) — APIキー体系・認証設計
- [project_status.md](project_status.md) — 現在の状態・残タスク・次ステップ
## Reference
- [reference_deploy.md](reference_deploy.md) — デプロイ手順・リモート設定
## 要判断・保留事項
- [project_ponshu_cleanup.md](project_ponshu_cleanup.md) — ponshu-room環境整理の未解決事項Vercel命名・git remote・posimai-projectの謎

28
feedback_style.md Normal file
View File

@ -0,0 +1,28 @@
---
name: フィードバック・スタイル方針
description: コーディングや応答スタイルに関するユーザーからの指示・好み
type: feedback
---
- 実装前に批判的コードレビューを行い問題を整理してから修正する
- 絵文字禁止CLAUDE.md に明記)
- npm run deploy = git push gitea main && git push github main必ず両方
- デプロイは複数アプリを並行バックグラウンド実行してよい
- 過度な説明不要。修正内容は表形式でコンパクトにまとめる
- `vercel --prod` は直接実行しない
## 新アプリ作成時のフルデプロイ(ユーザーに言われなくても必ずやる)
**Why:** ユーザーは毎回「デプロイまでやって」と言わなくていいようにしたい。
**How to apply:** 新アプリのコード実装が終わったら、ユーザーの確認を待たずに以下を全部実行する:
1. Gitea APIでリポジトリ作成`curl POST http://100.76.7.3:3000/api/v1/user/repos`、tokenはgit credentialから取得
2. GitHub CLIでリポジトリ作成`gh repo create posimai/[app-name] --private`
3. `git init && git add . && git commit -m "feat: 初回コミット"`
4. `git remote add gitea ... && git remote add github ...`
5. `npm run deploy`
6. `vercel git connect "https://github.com/posimai/[app-name].git" --yes`複数リモート選択肢が出たらgithubを選ぶ
7. `git commit --allow-empty -m "ci: trigger initial Vercel deployment" && npm run deploy`
8. Vercelデプロイ完了URLをユーザーに報告
Giteaトークンは `git credential fill`protocol=http, host=100.76.7.3:3000で取得できる。

41
project_api_keys.md Normal file
View File

@ -0,0 +1,41 @@
---
name: APIキー体系・認証設計
description: Posimai プロジェクト全体のAPIキー構造と各アプリでの使われ方
type: project
---
## posimai_api 認証キーpk_ キー)
フロントエンドアプリ → posimai_api への認証に使用
| ユーザー | キー | localStorage キー名 |
|---------|------|-------------------|
| maita | pk_maita_a2be09f6eaaba0db65b72f085ea352d3 | posimai_api_key |
| partner | pk_partner_fcfcbdf7d4a2ee23abf3ad046830af44 | posimai_api_key |
| musume | pk_musume_76488f7ee2a4e6cd9d4b3ad6284d4cc7 | posimai_api_key |
## Gemini API キー
- サーバーサイドposimai_apiが Gemini に接続するためのキー
- .env の GEMINI_API_KEY に設定
- フロントエンドアプリは直接使わない
## Magic Link 仕組み
- Dashboard → `?init_key=pk_maita_...` 付き URL でアプリを開く
- アプリ側: `localStorage.setItem('posimai_api_key', initKey)` で保存
- 対象: Brain / Reader / FeedMaps は別途 Google Maps 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 KeyAIza... | Gemini 2.5 Flash 直接呼び出し |
## AI API方針
- フロントエンドからAIを直接呼ぶ場合は **Gemini API**AIza...)を使う
- Claude APIsk-ant-...)は持っていないため使わない
- posimai_api バックエンドに chatエンドポイントはまだない将来追加予定

28
project_infrastructure.md Normal file
View File

@ -0,0 +1,28 @@
---
name: Synology インフラ・Docker 構成
description: Synology NAS 上の Docker Compose 環境と各コンテナの役割
type: project
---
## Synology NAS
- 本体: Mai_SVR物理NAS
- VM: Posimai_labSynology Virtual Machine Manager 上の Linux VM
- Tailscale ドメイン: posimai-lab.tail72e846.ts.net
## Docker Compose/volume1/docker/posimai_lab/
- **gitea**: Gitea git サーバー(プライマリリモート)
- **gitea_db**: PostgreSQL 15Gitea 用 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 プロキシ)
## 独立コンテナ(プロジェクト外)
- 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, API_KEYS, ALLOWED_ORIGINS

71
project_ponshu_cleanup.md Normal file
View File

@ -0,0 +1,71 @@
---
name: ponshu_room 環境整理 — 要判断事項
description: ponshu-room関連のVercel/GitHub残骸整理で「後で判断が必要」な未解決事項
type: project
---
2026-03-16 に Step A 削除を実施。以下は慎重な判断が必要なため保留した。
## 実施済み削除Step A / 2026-03-16 確認済み)
- GitHub `posimai/mai-ponshu-room` → 削除済み
- Vercel `mai-ponshu-room` (`mai-ponshu-room-posimais-projects.vercel.app`) → 削除済み
- Vercel `web` (`mai-ponshu-room-app.vercel.app`) → 削除済み
- Vercel `download` (`download-tan-ten.vercel.app`) → 削除済み
---
## 1. Vercel `ponshu-room-download` の扱い
**現状:** `ponshu-room-download.vercel.app` が APK ダウンロードページとして現役稼働中
**接続元:** `ponshu_room_lite/web/` フォルダ(`.vercel/project.json` で確認済み)
**問題点:**
- プロジェクト名 `ponshu-room-download` は意味は通じるが `posimai-` 接頭辞がない(他アプリと統一されていない)
- URL が `ponshu-room-download.vercel.app` で長い
- eiji さんや maita さんに配布している APK URL が Tailscale 経由(`posimai-lab.tail72e846.ts.net`なので、このVercel URLが実際に使われているか不明
**判断が必要なこと:**
- このページは誰かに共有しているか? URL が変わると困るか?
- `posimai-widget-dl` のように `posimai-` 接頭辞に揃えてリネームするか?
- 将来の新 PWAponshu-roomのランディングページと統合するか
**Why:** APK 配布 URL が変わると既存ユーザーeiji さん等)がダウンロードできなくなるリスクがある。
---
## 2. `ponshu_room_lite` の git remote 命名問題
**現状:**
```
giteaリモート名 → http://100.76.7.3:3000/mai/ponshu-room-lite.git (fetch/push)
giteaリモート名 → https://github.com/posimai/ponshu_room_lite.git (push のみ、追加URL)
```
**問題点:**
- CLAUDE.md の標準は `gitea``github` の2リモートだが、このアプリは `gitea` 1つに GitHub push URL が追加されている変則設定
- GitHub リポジトリ名が `ponshu_room_lite`(アンダースコア)で他アプリのハイフン命名と不統一
- ただし**現状は動作している**`git push gitea main` で両方に push される)
**判断が必要なこと:**
- この変則設定を CLAUDE.md 標準2リモート分離に揃えるか → Flutter アプリは触りたくないならそのままでもOK
- GitHub リポジトリ名をアンダースコア→ハイフンに変更するか? → リネームすると既存の clone やリンクが全部切れる
**Why:** Flutter の package name はアンダースコアが標準なので `ponshu_room_lite` はむしろ正しい。変更は混乱を招く可能性あり。
---
## 3. Vercel `posimai-project` プロジェクトURL なし)
**現状:** `vercel project ls``posimai-project` というプロジェクトが存在するが Latest Production URL が `--`(なし)
**判断が必要なこと:** これが何に使われていたか不明。空のまま放置か削除か。
---
## 実施済み削除2026-03-16
- GitHub: `posimai/mai-ponshu-room` → 削除済み(旧 Flutter プロジェクト、lib/ 空)
- Vercel: `mai-ponshu-room` → 削除済み(上記に接続した残骸)
- Vercel: `web` → 削除済みmai-ponshu-room の web/ フォルダ接続残骸)
- Vercel: `download` → 削除済みponshu_room_lite/web/download/ の二重デプロイ残骸)

208
project_status.md Normal file
View File

@ -0,0 +1,208 @@
---
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

34
reference_deploy.md Normal file
View File

@ -0,0 +1,34 @@
---
name: デプロイ手順・リモート設定
description: 全アプリ共通のデプロイコマンドとリモートリポジトリ設定
type: reference
---
## デプロイコマンド
```bash
git add .
git commit -m "feat/fix/chore: 変更内容"
npm run deploy
# = git push gitea main && git push github main
```
## リモート構成
- gitea → http://100.76.7.3:3000/mai/[app-name].gitローカルバックアップ
- github → https://github.com/posimai/[app-name].gitVercel 自動デプロイトリガー)
## 各アプリの URL
| アプリ | Vercel URL |
|--------|-----------|
| posimai-dashboard | https://posimai-dashboard.vercel.app |
| posimai-brain | https://posimai-brain.vercel.app |
| posimai-feed | https://posimai-feed.vercel.app |
| posimai-reader | https://posimai-reader.vercel.app |
| posimai-maps | https://posimai-maps.vercel.app |
| posimai-digest | https://posimai-digest.vercel.app |
| posimai-clean | https://posimai-clean.vercel.app |
| posimai-think | https://posimai-think.vercel.app |
| posimai-templatepreview | https://posimai-template.vercel.app |
## API エンドポイント
- ベース: https://posimai-lab.tail72e846.ts.net/brain/api
- 認証: Authorization: Bearer pk_xxxx_...

32
user_profile.md Normal file
View File

@ -0,0 +1,32 @@
---
name: ユーザープロフィール
description: 開発者 maita のスキル・背景・好みのコミュニケーションスタイル
type: user
---
- 個人開発者。Synology NAS ファーストのセルフホスト志向
- Claude に対して「世界的ベテランエンジニア兼UI/UXデザイナー」として批判的レビューを求める傾向
- 実装の判断は Claude に委ねることが多い(「推奨内容で進めてください」)
- スクリーンショットを多用してUI問題を報告する
- 日本語でやり取り。技術用語は英語混じり
- ユーザー名: maita、パートナー・娘musumeと3ユーザー体制
- 将来的な商用利用を視野に入れてアプリを量産中
## 開発環境・課金状況2026-03-17 現在)
### 契約中サービス
- **Claude Pro** ($20/月): Claude Code CLI のメイン作業環境。超過時に $50 上限キャップを設定(これまで超過なし)
- **Cursor Pro** ($20/月): AI Chat で Claude Opus 目当てに使用。リミットが早く来るため Claude Code に切り替える運用
- **Gemini AI Pro** ($20/月): Antigravity アプリ経由で Gemini/Claude 最新モデルを利用 + ブラウザ版 Gemini 思考モードでの長時間相談
### 作業フロー実態
- Cursor ターミナルで `claude` コマンド起動 = Claude Code CLI がメイン
- Cursor AI Chat は Opus が欲しいときのみ(設計・アーキテクチャ相談)→ リミット後は Claude Code に移行
- Cursor の Tab 補完・Composer はほぼ未使用
- Antigravity 経由で Gemini/Claude Opus を補完的に使用
### コスト最適化の検討事項(共同開発者と協議中)
- 円安のため新規 $ 契約は避ける方針(為替リスク)
- Cursor Pro 解約 → VS Code 無料化で $20 節約が有力案
- Claude Max ($100) は Cursor Pro 解約 + 円相場改善後に検討
- Claude Code 超過 $50 は「これまで発生なし」→ Pro プランで現状問題なし