Phase 21: Polish & Integration - 6 plans in 3 waves - 3 parallel (Wave 1), 2 parallel (Wave 2), 1 sequential (Wave 3) - Ready for execution
4.3 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous
| phase | plan | type | wave | depends_on | files_modified | autonomous | ||||
|---|---|---|---|---|---|---|---|---|---|---|
| 21-polish-integration | 02 | execute | 1 |
|
true |
Purpose: Every page currently shows bare "Loading initiatives..." / "Loading inbox..." text. Skeleton placeholders communicate structure and reduce perceived latency. This is purely visual polish — no data-fetching changes. Output: Skeleton component and skeleton loading states on dashboard, detail, and inbox pages.
<execution_context>
@/.claude/get-shit-done/workflows/execute-plan.md
@/.claude/get-shit-done/templates/summary.md
</execution_context>
@packages/web/src/components/InitiativeList.tsx @packages/web/src/components/InboxList.tsx @packages/web/src/routes/initiatives/$id.tsx @packages/web/src/routes/inbox.tsx
Task 1: Create Skeleton component and apply to dashboard + inbox list views packages/web/src/components/Skeleton.tsx, packages/web/src/components/InitiativeList.tsx, packages/web/src/components/InboxList.tsx 1. Create `packages/web/src/components/Skeleton.tsx` — a simple animated placeholder component. Props: `className?: string`. Renders a `-
In
InitiativeList.tsx: Replace the "Loading initiatives..." text block with 3 skeleton cards. Each skeleton card should match the InitiativeCard layout shape: a Card with a skeleton title bar (h-5 w-48), skeleton status badge (h-5 w-16), skeleton progress bar (h-2 w-full), and skeleton phase count (h-4 w-24). Wrap in a<div className="space-y-3">to match the existing card list spacing. UseArray.from({ length: 3 })to render three. -
In
InboxList.tsx: Replace the "Loading inbox..." text block with 4 skeleton message rows. Each row: a skeleton circle (h-3 w-3 rounded-full), skeleton name (h-4 w-32), skeleton preview (h-3 w-full), skeleton time (h-3 w-16). Match the MessageCard layout. UseArray.from({ length: 4 }).
npx tsc --noEmit -p packages/web/tsconfig.app.jsonpassesnpm run --workspace=packages/web buildsucceeds Dashboard and inbox show skeleton placeholders instead of text during loading.
- Replace "Loading phases..." text (inside the phases section) with 3 skeleton phase accordion bars (h-10 w-full with animate-pulse, spaced with gap-1).
Keep the existing error state as-is (it already has proper UI).
npx tsc --noEmit -p packages/web/tsconfig.app.jsonpassesnpm run --workspace=packages/web buildsucceeds Detail page shows structured skeleton layout during all loading states.
<success_criteria>
- All tasks completed
- All verification checks pass
- All three screens use skeleton loading states
- Skeleton component is reusable </success_criteria>