- 設計書: plan.md を参照
- ADR: docs/adr/ — 設計判断の記録
- 技術スタック: Bun + Hono + React + Vite + SQLite(FTS5) + sharp + exifr
bun run dev— 開発サーバー起動bun run build— プロダクションビルドbun run lint— ESLint実行bun run typecheck— 型チェックbun run format— Prettier実行
- モジュール境界の厳守(server/ と client/ を跨ぐimportは shared/ 経由のみ)
- DBスキーマ変更時はマイグレーションスクリプトを作成
- 新しいAPIエンドポイント追加時はplan.mdのAPI設計セクションも更新
- サムネイルは data/thumbnails/ に格納、元画像は絶対に触らない
- EXIFフィールドマッピングは config.ts に集約、ハードコードしない
- 画像の削除は物理DELETE。ON DELETE CASCADEでタグ関連も消える
- 同期処理(sync.ts)はingest.ts(単一ファイル処理)を呼ぶ形にする
asキャスト禁止。型変換は必ず zod の.parse()を通す- 新しいデータ型を追加する際は shared/brands.ts に Branded Type を定義
any型禁止。unknown+ zodバリデーションで対応- コミット前に
bun run lintとbun run typecheckが通ることを確認 - ESLintエラーを
eslint-disableで黙らせない。型設計で解決 - パスをハードコードしない。必ず
env.IMAGE_DIR,env.DB_PATH,env.THUMB_DIRを参照 - Dockerfileを変更した場合は
docker compose buildで動作確認