Skip to content

perf: INP & Perceived Performance Audit — tracking issue #69

@macwilling

Description

@macwilling

Overview

Full audit of Interaction to Next Paint (INP) bottlenecks and perceived performance gaps across the codebase. Each sub-issue below is a self-contained PR targeting a specific problem area.

Sub-issues (recommended order)

What was already good

  • TaskStatusControl — uses useOptimistic + useTransition correctly ✅
  • TaskTitleEditor — optimistic local state update before server call ✅
  • DeleteTaskButton — correct Dialog confirmation pattern ✅
  • CloseTaskDialog, TimeEntryModal save/edit — proper isPending label changes ✅
  • tasks/loading.tsx, tasks/[taskKey]/loading.tsx — full structural skeletons ✅

Future development checklist

For all new features, check before opening a PR:

  • Every destructive action uses Dialog, not window.confirm()
  • Every button shows a label change while isPending (not just opacity)
  • Every new route has a loading.tsx skeleton
  • Every dynamic(..., { ssr: false }) has a loading prop
  • List mutations (add/delete) use useOptimistic for instant feedback
  • Client-side fetches show a skeleton, not a text string

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestphase:8Phase 8 — Polish + Hardening

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions