A pointer clicks and types on your actual website, like a video. But it stays sharp, matches light and dark mode, and visitors can try it themselves.
Make a demo from your screensNo video editing and no code to write. You show it once, it plays forever.
Open your website and point at the part you want to demo, like your app's screen on your home page.
Click and type the way a visitor would. Each action becomes a step. Add a zoom or a note where it helps.
You get a short piece of code. Paste it into your site's settings and publish. That's it.
This is a made-up task app. Make a demo of it in about a minute, with the same tool you would use on your own site.
Works on sites made with Framer, Webflow, or by hand.
A small panel appears in the corner and walks you through three steps.
In Framer: Site settings, then Custom code. In Webflow: Page settings, then Before body tag. Publish.
Replace the hand-made animated mockup in your hero with your real interface, playing itself.
Show the flow you designed, crisp and in your site's theme, instead of a heavy GIF.
Show the new button being used. When the design changes, the demo already has.
Let the pointer do it once on the real screen, then hand control back to your user.
Coming to npm. For now, the files are in /dist on this site.
import { clickreel } from 'clickreel'
clickreel(document.querySelector('#app'), [
{ click: '.new-task' },
{ type: 'Plan the launch', in: '.task-name' },
{ key: 'Enter' },
{ zoom: '.list li:first-child' },
{ note: 'New tasks land at the top', at: '.list li:first-child' },
{ zoom: false },
], { frame: 'browser', url: 'tally.app' })
5.27 KB gzipped, no dependencies. Pauses when a real pointer enters and when scrolled out of view, has a visible pause button, never moves keyboard focus, and respects reduced motion.
| { click: sel } | Glide there and click for real. Links and form submits are held back. |
| { type: 'text', in: sel } | Click a field and type. |
| { key: 'Enter' } | Press a key. Enter submits the form. |
| { zoom: sel | false } | Camera in, or back out. |
| { note: 'text', at: sel } | A pinned callout. |
| { move: sel }, { wait: ms } | Point at something, or hold. |
| frame, url, tilt | Browser, phone or laptop around it. |
| speed, loop, dry, reset | Timing, repeat, no real clicks, reset your app. |