Files
Jean-Luc Makiola edce11dd78 chore: complete v1.1 milestone
Archive v1.1 Calendar & Polish milestone artifacts (roadmap,
requirements, phase directories) to milestones/. Evolve PROJECT.md
with validated requirements and new key decisions. Update
RETROSPECTIVE.md with v1.1 section and cross-milestone trends.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 23:32:04 +01:00

5.4 KiB

Phase 5: Calendar Strip - Context

Gathered: 2026-03-16 Status: Ready for planning

## Phase Boundary

Replace the stacked daily plan home screen (overdue/today/tomorrow sections) with a horizontal scrollable date-strip and day-task list. Users navigate by tapping day cards to view that day's tasks below the strip. Requirements: CAL-01 through CAL-05.

## Implementation Decisions

Day card appearance

  • Each card shows: German day abbreviation (Mo, Di, Mi...) and date number only
  • No task-count badges, dots, or indicators on the cards
  • All cards have a light sage/green tint
  • Selected card has a noticeably stronger green and is always centered in the strip
  • Today's card uses bold text with an accent underline
  • When today is selected, both treatments combine (bold + underline + stronger green + centered)

Month boundary treatment (CAL-03)

  • A slightly wider gap between the last day of one month and the first of the next
  • A small month name label (e.g., "Apr") inserted in the gap between months

Scroll range & navigation

  • Strip scrolls both into the past and into the future (Claude picks a reasonable range balancing performance and usefulness)
  • On app launch, the strip auto-scrolls to center on today with a quick slide animation (~200ms)
  • A floating "Today" button appears when the user has scrolled away from today; tap to snap back. Hidden when today is already visible.

Task list below the strip

  • No ProgressCard — task list appears directly under the strip
  • Overdue tasks (CAL-05) appear in a separate section with coral accent header above the day's own tasks, same pattern as current "Überfällig" section
  • Task rows show: task name, tappable room tag, and checkbox — no relative date (strip already communicates which day)
  • Checkboxes are interactive — tapping completes the task with the existing slide-out animation

Empty and celebration states

  • If a selected day had tasks that were all completed: show celebration state (icon + message, same spirit as current AllClear)
  • If a selected day never had any tasks: simple centered "Keine Aufgaben" message with subtle icon
  • First-run empty state (no rooms/tasks at all): keep the current pattern pointing user to create rooms

Overdue carry-over behavior (CAL-05)

  • Overdue tasks (due before today, not yet completed) appear in a separate "Überfällig" section when viewing today
  • When viewing past days: show what was due that day (tasks whose nextDueDate matches that day)
  • When viewing future days: show only tasks due that day, no overdue carry-over
  • Overdue tasks use the existing warm coral/terracotta accent (#E07A5F)

Claude's Discretion

  • Exact scroll range (past and future day count)
  • Day card dimensions, spacing, and border radius
  • Animation curves and durations beyond the ~200ms auto-scroll
  • Floating "Today" button styling and position
  • How the celebration state adapts to the calendar context (may simplify from current full-screen version)
  • Whether to reuse DailyPlanDao or create a new CalendarDao
  • Widget architecture and state management approach
## Specific Ideas
  • Day cards should feel like a unified strip with a light green wash — the selected day stands out by being a "marginally stronger green," not a completely different color. Think cohesive gradient, not toggle buttons.
  • The selected card is always centered — the strip scrolls to keep the selection in the middle, giving a carousel feel.
  • Month labels in the gap between months act as wayfinding, similar to section headers in a contact list.

<code_context>

Existing Code Insights

Reusable Assets

  • DailyPlanTaskRow: Existing task row widget — can be adapted by removing the relative date display and keeping name + room tag + checkbox
  • _CompletingTaskRow: Animated slide-out on task completion — reuse directly for calendar task list
  • ProgressCard: Will NOT be used in the new view, but the pattern of a card above a list is established
  • _overdueColor (#E07A5F): Warm coral constant already defined for overdue indicators — reuse as-is
  • TaskWithRoom model: Pairs task with room name/ID — directly usable for calendar task list

Established Patterns

  • Riverpod StreamProvider.autoDispose for reactive data (see dailyPlanProvider) — calendar provider follows same pattern
  • Manual provider definition (not @riverpod) because of drift's generated types — same constraint applies
  • Feature folder structure: features/home/data/, domain/, presentation/ — new calendar code lives here (replaces daily plan)
  • German-only localization via .arb files and AppLocalizations

Integration Points

  • HomeScreen at route / in router.dart — the calendar screen replaces this widget entirely
  • AppShell with bottom NavigationBar — home tab stays as-is, just the screen content changes
  • DailyPlanDao.watchAllTasksWithRoomName() — returns all tasks sorted by nextDueDate; may need a new query or adapted filtering for arbitrary date selection
  • TaskActionsProvidercompleteTask(taskId) already handles task completion and nextDueDate advancement
  • AppDatabase with DailyPlanDao registered — any new DAO must be registered here

</code_context>

## Deferred Ideas

None — discussion stayed within phase scope


Phase: 05-calendar-strip Context gathered: 2026-03-16