p1-custom-range-dashboard

drafttype/backlog

p1 — Custom date-range filter on dashboard

Problem

Dashboard timeframe selector exposes "Custom Range" but it may not be fully wired up (per docs/todo.md). Hardcoded presets (this month / this year) don't cover questions like "what did I spend on the Bali trip" or "Q1 only."

Outcome

A working custom-range picker that drives every chart, KPI, and list on the dashboard — single source of truth for the active range.

Acceptance

  • Date-range picker (start + end) accessible from the existing timeframe dropdown
  • Range persists in URL query params so it's shareable/refresh-safe
  • All dashboard widgets (income/expense, category breakdown, account balances, recent list, budget progress) respect the range
  • Validates start ≤ end, end ≤ today; sensible defaults if invalid
  • Visible label in the dropdown reads back the selected range, not just "Custom"

Notes

  • Verify what's already half-implemented before designing — option may already exist in the timeframe component.
  • shadcn has a date-range picker recipe; use it rather than rolling our own.

Implications

If skipped

  • Questions like “Bali trip spend” or “Q1 only” stay unanswerable in-app; you fall back to exporting or mentally approximating from preset months. A half-wired “Custom Range” control also erodes trust if the UI promises flexibility it does not deliver.

Why this priority

  • p1 — dashboard is the analysis view, not the daily entry point. Custom range unlocks ad-hoc reporting without new data models; important soon after launch but not blocking first signups or transaction capture.

When shipped

  • One date range drives all dashboard widgets; shareable URL preserves the slice.

Source

docs/todo.md — High Priority › Dashboard Enhancements.