scroll-progress-timeline — Claude Code skill: setup and features
Turns any ordered sequence into a responsive scroll timeline with a progress fill. Useful for onboarding flows, checkouts, roadmaps, and case studies.
npx skills add MengTo/Skills --skill scroll-progress-timeline -a claude-codeWhat scroll-progress-timeline does
The skill sets clear implementation rules for scroll-driven progress timelines. It starts from structured step data and builds a semantic ordered list with real headings before applying animation. The progress line sits on top of a subtle base track and animates via scaleY or scaleX transforms, keeping updates on the compositor.
Layout choices depend strictly on content density. Uneven card heights and long text require a left rail layout, while alternating layouts collapse to a single rail on mobile viewports. Active step states expose aria-current="step" without spamming screen readers with live regions. Under prefers-reduced-motion, continuous interpolation and pinning yield to a fully rendered line or discrete step markers.
What it helps with
- build an interactive scroll timeline for onboarding or checkout flows
- animate a timeline line via compositor transforms without layout thrashing
- adapt alternating timelines to mobile viewports with a clean fallback
- support screen readers and reduced motion preferences in scroll stories
Example prompts for the agent
- Build a vertical checkout timeline with a scroll progress line
- Create a responsive project roadmap using a left-rail scroll timeline
How to install scroll-progress-timeline
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill scroll-progress-timeline -a claude-code2Manually: put the files in place
~/.claude/skills/scroll-progress-timeline/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/scroll-progress-timeline/
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill scroll-progress-timeline -a codex2Manually: put the files in place
.agents/skills/scroll-progress-timeline/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill scroll-progress-timeline -a cursor2Manually: put the files in place
.cursor/skills/scroll-progress-timeline/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install MengTo/Skills scroll-progress-timeline2Manually: put the files in place
.github/skills/scroll-progress-timeline/SKILL.md1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill scroll-progress-timeline -a gemini-cli2Platform CLI
gemini skills install https://github.com/MengTo/Skills --path agent-skills/web-design/scroll-progress-timelineManually: put the files in place
.devin/skills/scroll-progress-timeline/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add MengTo/Skills --skill scroll-progress-timeline -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about scroll-progress-timeline
How to install scroll-progress-timeline in Claude Code?
Run npx skills add MengTo/Skills --skill scroll-progress-timeline -a claude-code in your terminal. The file is saved to ~/.claude/skills/scroll-progress-timeline/SKILL.md.
What does scroll-progress-timeline do?
It provides guidelines for building scroll-driven timelines from structured data. The agent follows semantic HTML structure, measures point centers accurately, and uses compositor-only transforms.
How does it handle prefers-reduced-motion?
When reduced motion is preferred, continuous scrubbing and pinning turn off. The component shows the complete line or distinct reached states without large transforms or blur filters.
Source text
SKILL.md · MIT
---
name: scroll-progress-timeline
description: Turn any ordered process into a data-driven vertical or horizontal scroll story with a base line, progress fill, active step states, responsive collapse, semantic fallback, and reduced-motion behavior. Use for onboarding, checkout, roadmaps, recipes, case studies, service processes, histories, or narratives where progress through the sequence should become visible while scrolling.
---
# Scroll Progress Timeline
Use one progress line to connect ordered information. The sequence must remain complete, readable, and navigable before animation is added.
## Model the steps
Keep the content data-driven:
```js
const steps = [
{ id: "brief", number: "01", title: "Set the direction", body: "..." },
{ id: "build", number: "02", title: "Make the system", body: "..." },
{ id: "ship", number: "03", title: "Release and learn", body: "..." }
];
```
Render it as an ordered list with real headings. The line, dots, media, and active state enhance that structure; they do not replace it.
## Build the line
1. Render a quiet base line behind every point.
2. Place one progress line on top with `transform-origin: top` for vertical or `left` for horizontal.
3. Measure the first and last point centers, not arbitrary section edges.
4. Normalize scroll position between those centers.
5. Apply `scaleY(progress)` or `scaleX(progress)` so updates stay on the compositor.
6. Mark a step active when the progress head crosses its center.
```js
const progress = Math.min(1, Math.max(0,
(viewportAnchor - lineStart) / (lineEnd - lineStart)
));
line.style.transform = `scaleY(${progress})`;
```
Schedule DOM writes in one animation frame. Recalculate geometry after font and image loading, resize, orientation changes, and content mutation.
## Choose the layout
- Use a centered alternating timeline only when both sides have enough width and similar content weight.
- Use a left rail for long copy, compact steps, or mixed card heights.
- Use a horizontal line for short sequences with concise labels and explicit keyboard-safe overflow.
- Use pinned full-screen chapters only when each step carries a distinct visual state. Keep the pin finite and release before the next section.
- Collapse to a simple left rail on small screens. Do not preserve alternation at the expense of reading order.
## Animate step state
Use small opacity, translate, scale, blur, color, or media transitions. Keep every step readable while inactive. Expose active index with `aria-current="step"` only when that state is meaningful and current; do not announce every scroll update with a live region.
Use IntersectionObserver for simple active-state entry. Use a normalized scroll measurement or GSAP ScrollTrigger when the line must fill continuously or coordinate pinned media.
## Handle navigation
- Make step links real anchors when users can jump within the process.
- Add `scroll-margin` for sticky headers.
- Preserve focus and do not move it during passive scrolling.
- Keep URLs and browser history stable unless the user explicitly selects a step.
- If steps are interactive, use buttons or links with visible focus; never make a decorative dot the only control.
## Reduce motion
Under `prefers-reduced-motion: reduce`, show the complete line or discrete reached states without scrubbed interpolation, blur, pinning, or large transforms. Keep ordinary document flow and all step content.
## Verify
Test variable step counts, uneven card heights, missing media, long translations, 390/768/1024/1440 widths, 200% zoom, fast forward and reverse scrolling, direct anchor navigation, keyboard order, reduced motion, late font/image layout, route cleanup, and console errors. The active step and line head must agree at every boundary.
Use [demo/index.html](demo/index.html) as the working reference and [demo/PROMPT.md](demo/PROMPT.md) to recreate or remix it. Keep [REFERENCES.md](REFERENCES.md) as the links-only implementation source list.
© MengTo · MIT · MengTo/Skills