letmesplain

Playback: what your users see

This page explains the experience on the reading end — the helper dot, the menu behind it, and how a guide moves once someone starts it. For writing guides, see authoring.md.

The helper dot

On any page at least one guide covers, a small round button appears in the bottom-right corner — the helper dot. It wears your app's primary color and pulses gently (a soft expanding ring, never a strobe; it obeys the browser's reduced-motion setting). Pages with no matching guide get nothing at all — no dot, and (with the default config) not even the guide script.

Clicking the dot opens the launcher menu, a small panel listing every guide for the page, grouped by what kind of guide it is:

Guides someone has finished show a Completed badge (in your theme's success color). Once every guide on the page is completed the dot dims — but everything stays clickable forever; guides are always replayable. The menu is keyboard-friendly (arrow keys, Enter, Esc).

If a page's guides flag sensitive regions, the menu header also shows a Privacy Mode eye toggle: it blurs or covers those regions for demos and screen recordings. Honest scope: it is a recording aid, not a security control — the data is still in the page, just visually hidden.

One honesty note for hosts: by default, draft guides appear in the launcher right alongside published ones (handy while dogfooding). Set config('splain.playback.serve_drafts') to false in production so only published guides reach users.

Tours: look, don't touch

A tour spotlights parts of the page one at a time — "this is your work queue", "this filter hides approved people" — with a helper bubble beside each spotlight. You move with Next and Previous, the bubble shows "Step 1 of 4", and closing the tour any way at all (finishing, Esc, the X, clicking the darkened background) counts as completing it. A tour is just a look around; there's nothing to abandon halfway.

Walkthroughs drive the real app

A walkthrough is different, and this matters: it performs no actions for you, and it fakes nothing — you do the real thing, on live data, while it points. When the "Review & approve an applicant's documents" walkthrough highlights the Start Review button and you click it, a real submission is claimed under your name. When it highlights Accept, the document really becomes Accepted. Splain only watches; your app's own buttons do what they always do.

Because of that, a walkthrough advances in a few different ways depending on the step:

Walkthroughs show no "Step x of y" counter — with branches, that number would lie.

Crossing pages

Some tasks span pages: approve documents on one, activate the person on another. The walkthrough ends a page's portion by spotlighting the real navigation link ("Continue on the Applicants list") and telling you to click it. When you do, the page changes — and the walkthrough resumes automatically on the other side, starting at that page's first step. The resume note lives only in that browser tab and expires after about three minutes, and it's discarded if you end up somewhere else — a guide never ambushes you on the wrong page or hours later.

Finishing, dismissing, replaying

Reaching a walkthrough's wrap-up step marks it done: the Completed badge appears in the menu, and the dot dims once all the page's guides are done. Completion is remembered per guide and per guide version — so a revised guide invites a fresh play.

By default, completion lives only in that browser (localStorage), so a different device or browser won't remember anything. A host that turns on server-side progress (config('splain.progress.enabled') — off by default) changes that: completion is then recorded against the host's own user, so it follows the person across devices, and a one-time backfill migrates their existing localStorage completions. See progress.md for exactly what is stored (a minimal pointer — never a copy of who they are) and the privacy posture.

Dismissing a walkthrough mid-way — Esc, the bubble's X, or clicking the darkened background — just stops it. It is not marked done, and nothing is undone either: any real action you already took stays taken. The same quiet stop happens if you wander off-script, like closing the window the guide is pointing into. Replaying starts the page's steps from the top.

It wears your app's design

The dot, the menu, the Completed badge, and the bubble's Next/Previous buttons are built from your Filament theme's own building blocks — your colors, your font, your dark mode, automatically. Flip the app to dark mode and everything follows; no Splain theming to configure. Animations (the pulse, spotlight transitions, smooth scrolling) all switch off when the user's system asks for reduced motion.

On phones and tablets

The launcher and popovers are viewport-aware (the panel caps at the screen width, the dot meets the 44px touch floor, and on touch devices the popover buttons grow to meet it too — desktop keeps the host's compact button scale). CI runs the browser suite at a phone viewport, so small-screen fit is a tested invariant, not a hope.

One caveat worth knowing: on a phone, Filament's sidebar is an overlay. If a user opens a guide while that overlay is open, the sidebar can sit inside the spotlight cutout and look un-dimmed on top of the highlighted element. In practice the tap path that opens the launcher usually has the sidebar closed; if your users report it, tell them to close the menu first — a future adapter nicety may auto-close it.


Rendered from splain@b6ea439. The documentation is rendered from the package repository — the same files that ship with Splain — so the site can't drift from the code.