Skip to content

Product demos that really click

Ship a Figma-style product demo on your site: you build the screens, Busker loops a scripted cursor that clicks your real controls—live UI, not a video. Click targets show what is tappable; one visitor click ends the show and hands them the mock.

  • Zero dependencies
  • ~4kB
  • MIT

Choose your bean

Choose your plan

You're almost there

Duo $32/mo

The people behind the beans

  • Marta Oaxaca, MX
  • Yusuf Yirgacheffe, ET
  • Lena Huila, CO

You're in.

First batch ships Monday. We'll email your tracking link.

That demo, in full

A short routine plus markup, styles, and wiring. The UI changes because the cursor pressed a button — same as when you press it.

demo.ts
import {busk} from '../../index.js';
import {wireCremaMock} from './mock.js';
export function initCremaDemo(): void {
const root = document.querySelector<HTMLElement>('[data-mock]');
if (!root) return;
const wireScenes = wireCremaMock(root);
busk(root, {
start: [0.55, 0.3],
steps: [
{wait: 900},
{click: '[data-bean="oaxaca"]'},
{wait: 1500},
{click: '[data-plan="duo"]'},
{wait: 2200},
{click: '[data-checkout]'},
{wait: 2600},
{click: '[data-close]'},
{wait: 900},
{click: '[data-nav-item="plans"]'},
{wait: 1400},
{click: '[data-plan="solo"]'},
{run: (): void => {
wireScenes('beans');
}},
],
clickTargets: ['[data-nav-item], [data-bean], [data-plan], [data-checkout], [data-close]'],
});
}

How you build it

Plain HTML, CSS, and JavaScript is enough for straightforward demos like the one above. Bigger UI or an app you already have? Use React, Vue, Svelte, or anything else—Busker only needs a root element and selectors that match at runtime.

Layout, styles, and what each click does are yours. See Getting started for install and wiring, and Markup for what Busker reads from the DOM.

What is a busk?

A busker is someone who performs in public — music, magic, a routine for people passing by. Busking is that kind of show. Busker (the library) runs a scripted cursor through your UI the same way: a short performance on your page, then the audience can take over.

We call each scripted mock a busk: one routine wired withbusk() on real markup, like the demo above.

Coding agents

Using Cursor, Claude Code, or similar? Install the busker skill, then use Get agent prompt above to copy a starter message into your chat. See Working with coding agents for setup and the full template.