# Design: Dashboard Redesign + Detail Pages **Task:** t-kz-060 **Author:** cronus (inventor) **Date:** 2026-03-25 **Status:** Design proposal --- ## Problem Statement The current dashboard is a read-only status board. Cards show counts but don't link anywhere. Timeline items are inert. Quick actions navigate to list pages rather than creation flows. There are no detail pages for individual events, deadlines, or appointments. Notes don't exist as a first-class entity. Case detail tabs use local state instead of URL segments, breaking deep linking and back navigation. ## Design Principles 1. **Everything clickable goes somewhere** — no dead-end UI 2. **Breadcrumb navigation** — always know where you are, one click to go back 3. **German labels throughout** — consistent with existing convention 4. **Mobile responsive** — sidebar collapses, cards stack, touch targets >= 44px 5. **Information density over whitespace** — law firm users want data, not decoration 6. **URL-driven state** — tabs, filters, and views reflected in the URL for deep linking --- ## Part 1: Dashboard Redesign ### 1.1 Traffic Light Cards → Click-to-Filter **Current:** Three cards (Ueberfaellig / Diese Woche / Im Zeitplan) show counts. `onFilter` prop exists but is never wired up in `dashboard/page.tsx`. **Proposed:** Clicking a traffic light card navigates to `/fristen?status={filter}`: | Card | Navigation Target | |------|------------------| | Ueberfaellig (red) | `/fristen?status=overdue` | | Diese Woche (amber) | `/fristen?status=this_week` | | Im Zeitplan (green) | `/fristen?status=ok` | **Implementation:** - Replace `onFilter` callback with `next/link` navigation using `href` - `DeadlineTrafficLights` becomes a pure link-based component (no callback needed) - `/fristen` page reads `searchParams.status` and pre-applies the filter - The DeadlineList component already supports status filtering — just needs to read from URL **Changes:** - `DeadlineTrafficLights.tsx`: Replace `