Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 KiB
5 KiB
event-detail.screen
Single event from event-scrapers aggregator. Implements brief R §R2c. Reached from tour-leg-detail.screen.md anchor row, from the touring drawer's Events tab, or from a discovery card. Voice: working with hearth on rich event content.
Layout (full-screen drawer)
┌─────────────────────────────────────────────────┐
│ ◄ Touring ⋯ │ 56pt
├─────────────────────────────────────────────────┤
│ Anime-Berlin │ event title
│ Oct 4–6 · Berlin · convention center │ date / city / venue
│ Source: animecons · last scouted 2h ago │ provenance + freshness
│ │
│ ─── Audience overlap ─── │
│ High · matches "anime-adjacent kink" │ strategist inference
│ Prior leg: Anime-LA (Apr) booked $11.8k │ historical anchor
│ │
│ ─── Anchored legs ─── │
│ ▢ Berlin Oct 3–7 · in planning (this leg) │ tap → tour-leg-detail
│ ✓ Anime-LA (Apr 2026) · closed · $11.8k │ past leg shortcut
│ │
│ ─── Event signal ─── │
│ Tags: anime · convention · trans-friendly │
│ Expected attendance: 18,000 │
│ [ Open source page ↗ ] │
│ │
│ ─── Actions ─── │
│ [ Anchor a new leg to this event ] │
│ [ Add to watchlist ] │ doesn't commit a leg yet
│ [ Hide this event ] │ suppresses future suggestions
│ │
└─────────────────────────────────────────────────┘
Components
| Component | Notes |
|---|---|
| Top bar | Back + overflow (share, copy URL, report-stale). |
| Title block | Event name + date + city + venue. |
| Provenance | Which event-scrapers source + last scout time. |
| Audience overlap | strategist's inference + historical anchor data when available. |
| Anchored legs | Tour legs currently or historically anchored to this event. |
| Event signal | Tags + expected attendance + source-page link. |
| Actions | 3 buttons: anchor leg / watchlist / hide. |
States
- Default — full layout.
- Stale (last scouted >24h) — provenance chip pulses; "Re-scout" button appears.
- No anchored legs — Anchored section empty: "No leg yet. Anchor one to start planning."
- Conflict (event date overlaps with another active leg) — top inline pill: "⚠ Overlaps Berlin Oct 3–7 leg already." Tap → resolve.
- Hidden — sheet shows muted; banner: "You hid this event. Unhide?"
- Watchlisted — small chip "On your watchlist."
- Source unreachable (per brief M §M2) — provenance chip red; "Couldn't reach {source} for refresh."
- VoiceOver — title → provenance → overlap → legs → signal → actions.
Interactions
- Tap "Open source page ↗" → in-app browser (or external Safari, per user preference).
- Tap anchored leg row → tour-leg-detail.screen.md.
- Tap "Anchor a new leg" → starts ai-copilot conversation with this event as context; produces a draft leg.
- Tap "Add to watchlist" → recorded in
events_watchlist; future scouts surface changes. - Tap "Hide this event" → suppresses + records
agent_actionsrow; reversible via watchlist screen.
Edge cases
- Event canceled by source — banner: "Source marked this event canceled on {date}. Your leg may need re-planning."
- Date changed in source — banner: "Date shifted from Oct 4–6 to Oct 11–13. Update your leg?"
- Event scraped from multiple sources, sources disagree — Provenance shows primary + "(conflicts with N other sources)"; tap to see disagreement.
- Coop intel on the event's neighborhood — chip per brief N: "🛡 1 coop report flagged this venue area."
Related
- Brief R §R2c, §R1a discovery — parent.
- tour-leg-detail.screen.md — sibling.
- strategist contract — audience overlap inference source.
- Brief J — v2
event-scrapersport.
Out of scope
- The watchlist root view (a list of watchlisted events; defer to its own screen).
- Event-discovery feed (proactive surfacing by ai-copilot; brief R §R1a covers conceptually).