Files

1.7 KiB

CLAUDE.md

What this is

A monorepo (M1) of an Immich photo-flow foundation + the trip-cluster app. See docs/ROADMAP.md for milestones and docs/superpowers/specs/2026-06-27-immich-photo-flow-design.md for the M1 design.

Architecture map

  • shared/photoflow/immichthe only Immich client (client.py) + _pipeline/ tag conventions (pipeline.py).
  • shared/photoflow/corethe only SQLite owner: store.py (data-access) + models.py.
  • shared/photoflow/uibase.html, shared Jinja macros, shared.js grid+lightbox.
  • apps/trip-cluster/appconfig.py, cli.py (ingest|cluster|serve|apply), ingest.py, clustering.py (pure), coverage.py (pure), cluster_run.py, review.py, writeback.py, routes/, templates/, static/app.js.

Key invariants

  • Immich is the source of truth; SQLite is rebuildable. Only applied decisions survive loss of SQLite (via _pipeline/processed + writeback_log).
  • Content/trip tags are never namespaced; pipeline meta-tags nest under _pipeline/.
  • Trip detection is timestamp-first, density-adaptive, anchored by existing trip tags, refined by GPS. Existing trip tags are authoritative seeds.
  • Write-back is idempotent (writeback_log) and needs explicit confirmation.
  • Ingest is scopeable (--from/--to, --tag, --subset) and incremental (updatedAfter).
  • trip-cluster serves on 8084.

Dev commands

.venv/bin/python -m pytest                     # unit + route (Immich mocked)
.venv/bin/python -m pytest apps/trip-cluster/tests/ui   # Playwright
docker compose up                              # UI on :8084

Write a failing test first (TDD). Mirrors the sibling apps in /home/mischa/Projects/.