Explorer: export event artifacts #142

Closed
opened 2026-07-27 20:08:39 +00:00 by claude-bot · 1 comment
Contributor

Parent: #22. Answers the "which artifacts should be exportable?" open question.

Tasks

  • Decide the artifact set: event summary, full official product text, delivered notifications, AI summaries, radar loop/stills.
  • Decide formats. JSON is the natural fit — app/services/feeds.py already builds RSS and ICS, and /p/{location_id}.json already exists, so the conventions are established.
  • Respect visibility. An export must not leak locations the requester cannot see; reuse visible_location_filter rather than filtering after the fact.
  • Decide authenticated-only vs available on public pages. (Recommendation: authenticated-only. The public pages deliberately coarsen location data — v1.7.0 shows public radar at ~11 km with no pinpoint marker — and a full event export would undo that.)
Parent: #22. Answers the "which artifacts should be exportable?" open question. ## Tasks - [ ] Decide the artifact set: event summary, full official product text, delivered notifications, AI summaries, radar loop/stills. - [ ] Decide formats. JSON is the natural fit — `app/services/feeds.py` already builds RSS and ICS, and `/p/{location_id}.json` already exists, so the conventions are established. - [ ] Respect visibility. An export must not leak locations the requester cannot see; reuse `visible_location_filter` rather than filtering after the fact. - [ ] Decide authenticated-only vs available on public pages. *(Recommendation: authenticated-only. The public pages deliberately coarsen location data — v1.7.0 shows public radar at ~11 km with no pinpoint marker — and a full event export would undo that.)*
Author
Contributor

Picking this up, stacked on the radar loops (#140, PR #173). Answering the issue's open decisions:

  • Artifact set: everything the event page reconstructs — event metadata + members, the full timeline including official product text, the delivered-notification record (including failures), AI summaries, and radar artifacts as URL references (loop + stills + frames) rather than embedded bytes, so the JSON stays a document and media stays media (the GIF endpoint already exists and is auth-gated).
  • Format: JSON only, schema_version'd, per the established /p/{location_id}.json + config-export conventions.
  • Authenticated-only, per the issue's own recommendation — a full export would undo the deliberate coarsening of the public pages. Same visibility gate and non-leaking 404 as the event page.

Shape: GET /explorer/event/{event_id}/export.json with a Content-Disposition attachment filename, plus an Export button on the event page. Reuses the event_detail service — the export is the page's data, serialized, so the two can't drift.

Picking this up, stacked on the radar loops (#140, PR #173). Answering the issue's open decisions: - **Artifact set**: everything the event page reconstructs — event metadata + members, the full timeline including official product text, the delivered-notification record (including failures), AI summaries, and radar artifacts as **URL references** (loop + stills + frames) rather than embedded bytes, so the JSON stays a document and media stays media (the GIF endpoint already exists and is auth-gated). - **Format**: JSON only, `schema_version`'d, per the established `/p/{location_id}.json` + config-export conventions. - **Authenticated-only**, per the issue's own recommendation — a full export would undo the deliberate coarsening of the public pages. Same visibility gate and non-leaking 404 as the event page. Shape: `GET /explorer/event/{event_id}/export.json` with a `Content-Disposition` attachment filename, plus an Export button on the event page. Reuses the `event_detail` service — the export is the page's data, serialized, so the two can't drift.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/WeatherBot#142
No description provided.