loading-states-and-perceived-performance
Spinners, skeletons and staggered reveals that manage wait times.
Skill by dembrandt
Chalk Labs
Need help deploying loading-states-and-perceived-performance?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/dembrandt-loading-states-and-perceived-performance
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/loading-states-and-perceived-performance
What's inside
- Skill name
loading-states-and-perceived-performance- Description
- Spinners, skeletons and staggered reveals that manage wait times. Use when designing loading states, async data or the feel of a slow interface.
- License
- MIT
- Metadata
- priority: 7
- Instructions
- 186 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Loading States and Perceived Performance
Users don't mind waiting as much if they understand *what* they are waiting for and *how much* progress is being made. Perceived performance is the design work of making a system feel faster than it actually is.
---
## Choosing the Right Loading State
| Wait Duration | Best Pattern | Use for |
|---|---|---|
| **Short (< 1s)** | **Inline Spinner / Loader** | Button actions, small updates, quick data fetches |
| **Medium (1s – 3s)** | **Skeleton Screen** | Cards, lists, dashboards, profile pages |
| **Long (> 3s)** | **Determinate Progress Bar** | File uploads, complex exports, heavy processing |
| **Full Page** | **Staggered Entry / Animated Sections** | Initial app load, hero sections, immersive transitions |
---
## Simple Cases: Spinners and Loaders
Use spinners for small, contained actions where the layout doesn't change significantly.
- **Button Spinners:** Replace button text or sit alongside it. The button should enter a `disabled` state to prevent double-submissions.
- **Micro-Loaders:** A small 16–24px circle for inline updates (e.g., saving a single field).
- **Animation Tip:** A "spring-loaded" rotation (easing in and out) feels more premium than a constant linear rotation.
```css
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.spinner {
animation: spin 800ms cubic-bezier(0.4, 0, 0.2, 1) infinite;
}
```
---
## Skeleton Screens (Glimmer/Shimmer)
Skeleton screens provide a visual placeholder that mimics the layout of the final content. This reduces "layout shift" (CLS) and signals to the user exactly where the content will appear.
### The Shimmer Effect
A subtle, moving gradient that travels across the skeleton elements.
```css
.skeleton {
background: var(--color-grey-100);
background-image: linear-gradient(
90deg,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 0.5) 50%,
rgba(255, 255, 255, 0) 100%
);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
0% { background-position: -200% 0; }
100% { background-position: 200% 0; }
}
```
### Rules for Skeletons
- **Match the shape:** If the final content is a round avatar, use a round skeleton. If it's a 2-line heading, use two bars of varying widths.
- **Stay Recessive:** Skeletons should use your most subtle grey (`--color-grey-100` or `grey-50`). They should not draw focus.
- **Fade into Reality:** When data arrives, fade the actual content in over the skeleton (150–200ms) rather than snapping.
---
## Fully Animated Sections
For major page transitions or initial loads, use a coordinated animation strategy.
### Staggered Entry (Cascading)
Instead of the whole page appearing at once, animate sections in a sequence. This guides the user's eye from the most important content (hero) down to secondary areas.
```css
.section {
opacity: 0;
transform: translateY(10px);
animation: slide-up 400ms ease-out forwards;
}
/* Stagger by index */
.section:nth-child(1) { animation-delay: 100ms; }
.section:nth-child(2) { animation-delay: 200ms; }
.section:nth-child(3) { animation-delay: 300ms; }
@keyframes slide-up {
to { opacity: 1; transform: translateY(0); }
}
```
### Hero Section "Bloom"
For hero sections, you might use a more complex animation:
1. **Background image** fades in slowly.
2. **Heading** slides in with a slight overshoot (spring).
3. **CTA button** appears last with a crisp fade-in or subtle color transition.
---
## Load in Priority Order — and Prefetch What's Next
Don't wait for everything before showing anything. Load in the order of **value to the user**, so the thing they came for appears first and the rest fills in around it. This is both a perceived-performance win and a code-efficiency one: you fetch and render less up front.
- **First, the highest-value content** — the key figure, the primary record, the above-the-fold answer. Render it the moment it's ready.
- **Then the next tier, then the next** — secondary panels, related lists, and below-the-fold sections stream in behind it (skeletons hold their space so nothing shifts — see the skeleton section above).
- **Fetch only what the current view needs.** Defer data for tabs, drawers, and off-screen sections until they're opened, rather than loading the whole page's worth of data at once.
**Prefetch the predictable next step** — next page, a hovered row's detail, the next wizard step — in the background so it's instant. Don't speculatively load everything; only where there's an obvious next move.
## Advanced: Optimistic UI
The fastest UI is one that doesn't wait for the server at all.
- **The Pattern:** Update the UI immediately assuming the server call will succeed. If it fails, roll back and show an error.
- **Use for:** Liking a post, toggling a switch, renaming a folder, deleting a message.
- **Benefit:** Instant gratification for the user, making the app feel "lightning fast."
---From dembrandt/dembrandt-skills, MIT.
More from dembrandt/dembrandt-skills
- 0.785score
algorithmic-color-palette
dembrandt
Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
app-shell
dembrandt
Top bar, sidebar rail, app launcher, tenant and environment cue, status bar.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
authentic-product-representation
dembrandt
Product visuals must show the real product with real data.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
brand-visual-language
dembrandt
Shape language across type, radius and icons carries brand personality.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
button-states
dembrandt
Rest, hover, active, focus, disabled and loading states, derived from the base colour.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
color-mode-and-theme
dembrandt
Light, dark or both, and when a theme selector is worth it.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
component-family-consistency
dembrandt
Buttons, inputs, badges and pills share radius, colour logic, shadow, border and spacing.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
data-display-and-selection
dembrandt
View modes, row selection, mass actions, sorting, filters, search and table patterns.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
domain-expert-configuration
dembrandt
Settings for experts who are not developers — domain language, sane defaults, grouping by professional concept.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
elevation-and-depth
dembrandt
Shadows and layering that lift elements above the surface.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
extract-design
dembrandt
Extract colours, typography, spacing, components and W3C design tokens from a live website with Dembrandt.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
sticky-and-fixed-elements
dembrandt
Sticky headers, bottom toolbars, floating action buttons and pinned table headers.
SkillAFreshness: A★ 160Claude Code +9
Signals
- Stars
- 160
- Forks
- 20
- Open issues
- 0
- Last commit (this folder)
- Oct 1, 2026 (29 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/dembrandt/dembrandt-skills
- Website
- www.dembrandt.com/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from dembrandt
- 0.792score
Dembrandt
dembrandt
Design tokens from any live site: colours, type, spacing, components, drift against a baseline.
ConnectorAFreshness: ALocal★ 3.8KClaude Code +5 - 0.785score
app-shell
dembrandt
Top bar, sidebar rail, app launcher, tenant and environment cue, status bar.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
authentic-product-representation
dembrandt
Product visuals must show the real product with real data.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
brand-visual-language
dembrandt
Shape language across type, radius and icons carries brand personality.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
button-states
dembrandt
Rest, hover, active, focus, disabled and loading states, derived from the base colour.
SkillAFreshness: A★ 160Claude Code +9 - 0.785score
algorithmic-color-palette
dembrandt
Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours.
SkillAFreshness: A★ 160Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get loading-states-and-perceived-performance running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
loading-states-and-perceived-performance skill. Agent Mart. https://agentmart.dev/skills/dembrandt-loading-states-and-perceived-performance (last updated 2026-10-24)