Context
ADR 0006 (Accepted), Phase 4. Lets the diary capture the whole festival — non-drink moments (food, a band, "arrived") and entries the user forgot to log at the time. Depends on #461 (the LogEntry model + migration).
What
- A "+" on the My Festival timeline creates a check-in:
- pick a drink (catalogue search) → a tasting (rate / recommend / note / photo), or
- type a free-text
title → an other entry (a title + optional note/photo, no rating/recommend).
- Time defaults to now but is freely set, so backfilling a forgotten entry is the same flow with an earlier time — no special path.
- Entries are editable after the fact (any field incl. the timestamp; setting/clearing
drinkId flips a tasting ↔ other) and deletable.
UX to resolve here (deliberately left out of the ADR)
- Drink-picker / search component for the tasting path.
- Datetime setting: a raw picker is fiddly one-handed — provide relative quick-picks ("just now / 1h ago / earlier today") alongside it.
- Titleless
other: require a title or derive it from the note's first line — the timeline must never show a blank entry.
- Heterogeneous timeline: a visual-consistency rule for rich drink rows next to plain freeform notes.
- Delete affordance: reconsider confirm-dialog vs. an undo snackbar (the log is private and fully reversible).
- Accessibility:
Semantics on the "+", the picker, and every new row.
Acceptance
Deep widget tests (add a drink tasting and a non-drink other via the "+", assert both render in the timeline; backfill sets an earlier time; edit + delete flows), semantic tests for new interactive elements, ./bin/mise run check clean.
Relates to #315. Implements ADR 0006 Phase 4. Depends on #461.
Context
ADR 0006 (Accepted), Phase 4. Lets the diary capture the whole festival — non-drink moments (food, a band, "arrived") and entries the user forgot to log at the time. Depends on #461 (the
LogEntrymodel + migration).What
title→ anotherentry (atitle+ optional note/photo, no rating/recommend).drinkIdflips a tasting ↔other) and deletable.UX to resolve here (deliberately left out of the ADR)
other: require a title or derive it from the note's first line — the timeline must never show a blank entry.Semanticson the "+", the picker, and every new row.Acceptance
Deep widget tests (add a drink tasting and a non-drink
othervia the "+", assert both render in the timeline; backfill sets an earlier time; edit + delete flows), semantic tests for new interactive elements,./bin/mise run checkclean.Relates to #315. Implements ADR 0006 Phase 4. Depends on #461.