Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Measure Storybook startup time from spawning `storybook dev` until the first story renders in the browser. Use when the user asks about Storybook boot time, server-ready timing, first story render timing, startup regressions, benchmarking with repeat runs, or comparing Storybook versions or feature flags.
.claude/skills/storybookjs-storybook-startup-benchmark/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 16% | 0% |
Use this skill to build or explain a repeatable benchmark for Storybook startup:
server: process spawn -> Storybook server respondsbrowser: server responds -> first story renderedtotal: process spawn -> first story renderedWhen asked to benchmark Storybook startup:
storybook dev/, not iframe.htmlrequestAnimationFrame()--no-open--repeat <count> support with grouped summary stats.Use these defaults unless the user asks otherwise:
/requestAnimationFrame()storybook dev --no-openDo not measure only CLI output. Server listening is not the same as first story rendered.
Add a small global preview decorator or component that runs once on the first story mount:
requestAnimationFrame()window.__sbStartupBenchmarkwindow.top when same-originperformance.mark('sb:first-story-rendered')Preferred payload:
ts{ firstStoryRenderedAt: performance.now(), storyId: id }
The benchmark script should:
--no-open/For --repeat N, print:
server, browser, and total5.2s or 2m15s, not raw millisecond field namesRecommended summary fields:
json{ "server": { "average": "5.2s", "min": "4.8s", "max": "6.1s", "p95": "6.0s" }, "browser": { "average": "1.9s", "min": "1.6s", "max": "2.4s", "p95": "2.3s" }, "total": { "average": "7.1s", "min": "6.6s", "max": "8.2s", "p95": "8.1s" } }
Use these heuristics when explaining results:
server grows, the regression is likely on the server/build side.browser grows, the regression is likely in manager boot, preview boot, or first-story render.p95 grows a lot, the feature likely increases variability or tail latency.iframe.html loads instead of normal /If a repeated benchmark reports unrealistically low server.average, first check for a stale Storybook server on the same port.
When reporting results:
server, browser, and totalUse this skill when the user says things like:
storybook dev to first story render"| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 28,757 | 23,836 | -17% | 1 | 1 | 0% | 5,824 | 6,162 | +6% | 0 | 0 | — |
case-02 | fail→pass | 23,017 | 24,911 | +8% | 1 | 1 | 0% | 4,605 | 6,192 | +34% | 0 | 0 | — |
case-03 | fail→pass | 28,217 | 24,222 | -14% | 1 | 1 | 0% | 5,204 | 5,997 | +15% | 0 | 0 | — |
case-04 | fail→pass | 27,805 | 10,255 | -63% | 1 | 1 | 0% | 2,947 | 2,943 | -0% | 0 | 0 | — |
case-05 | fail→fail | 10,556 | 6,917 | -34% | 1 | 1 | 0% | 1,716 | 2,258 | +32% | 0 | 0 | — |
case-06 | fail→pass | 15,130 | 10,155 | -33% | 1 | 1 | 0% | 2,272 | 2,631 | +16% | 0 | 0 | — |
case-07 | fail→pass | 20,529 | 14,927 | -27% | 1 | 1 | 0% | 3,210 | 3,866 | +20% | 0 | 0 | — |
case-08 | fail→pass | 29,210 | 6,475 | -78% | 1 | 1 | 0% | 1,512 | 2,288 | +51% | 0 | 0 | — |
case-09 | pass→pass | 15,946 | 13,685 | -14% | 1 | 1 | 0% | 2,428 | 3,149 | +30% | 0 | 0 | — |
case-10 | pass→pass | 13,973 | 14,769 | +6% | 1 | 1 | 0% | 2,128 | 3,151 | +48% | 0 | 0 | — |
case-11 | fail→pass | 13,327 | 9,466 | -29% | 1 | 1 | 0% | 2,091 | 2,767 | +32% | 0 | 0 | — |
case-12 | pass→pass | 16,056 | 10,397 | -35% | 1 | 1 | 0% | 2,537 | 2,880 | +14% | 0 | 0 | — |
case-13 | fail→pass | 18,773 | 10,894 | -42% | 1 | 1 | 0% | 2,436 | 3,017 | +24% | 0 | 0 | — |
case-14 | fail→pass | 18,106 | 6,575 | -64% | 1 | 1 | 0% | 3,017 | 2,340 | -22% | 0 | 0 | — |
case-15 | fail→fail | 15,947 | 7,815 | -51% | 1 | 1 | 0% | 2,325 | 2,346 | +1% | 0 | 0 | — |
case-16 | fail→pass | 15,080 | 13,987 | -7% | 1 | 1 | 0% | 2,469 | 3,503 | +42% | 0 | 0 | — |
case-17 | pass→pass | 14,493 | 9,181 | -37% | 1 | 1 | 0% | 2,026 | 2,614 | +29% | 0 | 0 | — |
case-18 | fail→pass | 13,483 | 11,459 | -15% | 1 | 1 | 0% | 1,972 | 2,774 | +41% | 0 | 0 | — |
case-19 | pass→pass | 18,126 | 15,030 | -17% | 1 | 1 | 0% | 2,818 | 3,687 | +31% | 0 | 0 | — |
case-20 | pass→pass | 16,147 | 15,500 | -4% | 1 | 1 | 0% | 2,819 | 3,940 | +40% | 0 | 0 | — |
case-21 | pass→pass | 18,477 | 20,065 | +9% | 1 | 1 | 0% | 3,064 | 4,666 | +52% | 0 | 0 | — |
case-22 | pass→fail | 16,652 | 12,706 | -24% | 1 | 1 | 0% | 2,374 | 3,003 | +26% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.