Skip to content

Scope skeletons to sub-region spinners left over from the #2843 rollout #4147

Description

@atomantic

The #2843 loading-skeleton rollout covered first-paint page loads. Sub-region spinners — tab bodies and panels that refetch after the surrounding page has already rendered — are untouched and still render bare BrailleSpinners. Confirmed still present by grep:

  • client/src/pages/Brain.jsx:148 — Suspense fallback: <div className="flex items-center justify-center h-64"><BrailleSpinner text="Loading" /></div>
  • client/src/pages/Goals.jsx:81 — Suspense fallback: <div className="flex items-center justify-center h-full"><BrailleSpinner text="Loading" /></div>
  • client/src/pages/DigitalTwin.jsx:170 — Suspense fallback: <div className="flex justify-center py-12"><BrailleSpinner text="Loading" /></div>
  • client/src/pages/Apps.jsx:618 — per-app expansion: <BrailleSpinner text="" />
  • client/src/pages/DataManager.jsx:288 — category detail: <BrailleSpinner text="Loading" />
  • client/src/pages/UsagePage.jsx:128,298 — provider-quota section: <BrailleSpinner /> / <BrailleSpinner text="Reading provider usage" />
  • client/src/pages/CharacterSheet.jsx:484 — sync panel: <BrailleSpinner />

Lower value than first-paint skeletons (the surrounding page layout is already reserved by the time these fire, so there's no first-paint layout shift), but the taller/wider ones (Brain/Goals/DigitalTwin Suspense fallbacks spanning h-64/h-full/py-12, and DataManager's category detail panel) would benefit from a scoped skeleton shape instead of a centered spinner, since they cover a large content region for a noticeable duration.

Fix shape

For each sub-region above, replace the bare BrailleSpinner with a skeleton shaped to that region's actual content (e.g. a card/row skeleton sized to the panel, reusing PageSkeleton's internal placeholder primitives or a lighter-weight local skeleton block) — prioritize the Suspense fallbacks (Brain/Goals/DigitalTwin) and DataManager's category detail first, since those are the tallest/most visible. Apps.jsx's per-app expansion and UsagePage.jsx's smaller spinners are lower priority (text="" / narrow inline spinners rather than full-region loads).

Migrated from PLAN.md by /do:replan --issues. Follow-up to #2843.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions