feat: Phase 4 grouping with entry-break dividers

Add group.py route, phase4.html template, and supporting state changes.
Photos are shown as a flat stream; clicking divider zones inserts
entry-break boundaries that split photos into labelled groups. Labels
persist via group_labels dict. Done materialises groups into state.groups
and advances to write phase.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-21 16:44:54 +02:00
parent 23b68d845b
commit b5c90a1e81
10 changed files with 286 additions and 10 deletions
+3
View File
@@ -21,6 +21,7 @@ class Group:
id: str
photo_ids: list = field(default_factory=list)
entry_type: str = "journal" # journal | story
label: str = ""
title: str = ""
body: str = ""
location_city: str = ""
@@ -42,6 +43,8 @@ class TripState:
photos: list = field(default_factory=list)
groups: list = field(default_factory=list)
notes: str = ""
dividers: list = field(default_factory=list) # [{"id": str, "after_order": int}]
group_labels: dict = field(default_factory=dict) # {divider_id: label}
def _state_path(album_id: str, app) -> Path: