josephwu

Docket

Document-request triage for personal-injury law firms, shipped live in a 48-hour sprint.

Year
2026
Role
Design Engineer
Tags
UIUX designDesign SystemFrontendLegal Tech

What's done, what's stuck, and what needs me right now?

Paralegals at personal-injury firms chase a dozen document requests per case (police reports, medical records, insurance verifications), each stuck in its own lifecycle with a slow third party. Docket is a triage board for the question their day runs on, designed and shipped solo in a 48-hour sprint. This is the real app, not a video: launch it and work the case.

Nine lifecycle statuses collapse into five buckets ordered by what the paralegal should do about them. Blocked requests rise to the top as full cards with the blocker spelled out and a one-click next action: re-send the form, approve the fee, confirm the claim number. Overdue is a flag, not a status, so time at risk reads at a glance in a single warm accent reserved for exactly that.

Full triage board: blocked requests as elevated cards on top, in-flight rows below, collected requests compressed to chips.

Selecting a card opens the full record: dates, assignee, expected pages, the blocker called out in plain language, an activity timeline, and a notes field for logging a call. The primary action follows the state: a blocked request offers Re-send form, a request in flight offers Mark received.

Detail pane for a rejected radiology records request: dates, assignee, blocker callout, and activity timeline.

Every action is an optimistic update: the card moves buckets instantly, the timeline logs it, and an undo toast waits at the bottom of the screen. No confirmation dialogs. Act first, take it back if you need to.

After re-sending the form the card moves to In progress, the timeline logs it, and an undo toast appears.

New requests start life as drafts in the same pane: category, document type, source, assignee, due date. Changes persist automatically, and submitting drops the request into the live checklist.

New document request form in the right pane with category, document type, source, assignee, and due date.

The case data deliberately spans rejected, on-hold, and partially received requests, plus empty and loading on top. A search that matches nothing gets a real empty state with a way back, not a blank column.

Empty state when no requests match the current search, with a clear-filters action.

Credits

Context
Solo 48-hour build sprint, June 2026
Stack
Next.js 16, React 19, TypeScript, Tailwind CSS v4, Vitest
Design system
Token-driven: color, type scale, radius, and shadow defined once, components built from a small reusable kit