b5c90a1e81
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>
34 lines
1.2 KiB
JSON
34 lines
1.2 KiB
JSON
{
|
|
"album_id": "album-1",
|
|
"album_name": "Central Asia 2023",
|
|
"grav_trip_slug": "central-asia-2023",
|
|
"phase": "export",
|
|
"phases_completed": ["triage", "curate", "group", "write"],
|
|
"phase_stale": [],
|
|
"photos": [
|
|
{"id": "asset-1", "original_filename": "IMG_001.jpg",
|
|
"local_datetime": "2023-09-05T09:03:00", "tag": "journal", "order": 0},
|
|
{"id": "asset-2", "original_filename": "IMG_002.jpg",
|
|
"local_datetime": "2023-09-05T14:30:00", "tag": "story", "order": 1}
|
|
],
|
|
"groups": [
|
|
{
|
|
"id": "g1", "photo_ids": ["asset-1"], "entry_type": "journal",
|
|
"label": "", "title": "Arrival in Almaty", "body": "Chaos at the airport.",
|
|
"location_city": "Almaty", "location_country": "Kazakhstan",
|
|
"date": "2023-09-05", "hero_photo_id": "asset-1", "shortcode_hints": "",
|
|
"status": "written"
|
|
},
|
|
{
|
|
"id": "g2", "photo_ids": ["asset-2"], "entry_type": "story",
|
|
"label": "", "title": "The Market", "body": "Colours everywhere.",
|
|
"location_city": "Almaty", "location_country": "Kazakhstan",
|
|
"date": "2023-09-05", "hero_photo_id": "asset-2", "shortcode_hints": "gallery block",
|
|
"status": "skipped"
|
|
}
|
|
],
|
|
"notes": "",
|
|
"dividers": [],
|
|
"group_labels": {}
|
|
}
|