Guided tours
Bound to a page pattern and started by a trigger: first visit, every visit, after a delay or from your code.
driver.jsSDK 2.4 · drop-in for any web app
One config file gives your product a welcome, a few questions, a spotlight on the button that matters, a celebration and a setup checklist. Tours, hints and analytics come along for the ride.
Most users decide in the first two minutes whether your product is for them. A blank dashboard doesn't help them decide. A guided first win does.
The FTUE kit
A headline, one sentence and a visual that earns a "wow".
One to three short questions. The answers tailor everything after.
The real button that matters is lit up, and the rest is dimmed.
The first success gets a moment, using the user's own words.
A tailored setup list and one-time hints on each new page.
Config, not code
Product-specific copy is data. The behavior is shared. Swap the words and the buttons, and you have a new venture's first run.
data-ftue, the guide finds themftueSignal()export function myConfig(): FtueConfig {
return {
id: "interlister",
brand: { name: "InterLister" },
welcome: {
headline: ["One catalog.", "Every marketplace."],
cta: "Let's get you started",
},
questions: [{ id: "intent", title: "What brings you here?" }],
guides: [{ path: "/connect", selectors: ["[data-ftue=connect]"] }],
tasks: (answers) => [/* tailored checklist */],
events: { marketplace_connected: { completes: ["connect"] } },
};
}
The tour engine
Bound to a page pattern and started by a trigger: first visit, every visit, after a delay or from your code.
driver.jsThe user can't close it or click away. It follows them across pages and restarts if left unfinished.
opt-inA step advances only when the user clicks the highlighted element, or types the exact value you asked for.
learn by doingPulsing beacons, one-off tooltips, a multi-step welcome modal and an avatar guide with expressions.
React or vanillaShow a tour by role, signup age, other tours completed, or any predicate you can write.
conditionsEdit tour copy and steps in PostgreSQL. No redeploy, and callbacks defined in code are kept.
manage.pyAn optional Skip points at your replay control, and resumeTour() picks up where they left.
A config object or CSS custom properties, plus per-tour popover classes. It looks like your product.
CSS varsOptional backend
The SDK works with no backend at all. Add FastAPI and PostgreSQL when you want tours stored centrally, progress synced across devices and events recorded.
Every step shown, completed, skipped and abandoned is an event you can read back.
Illustrative numbers.
React or vanilla. Self-hosted. Your data stays yours.