Vetrina

Library

A product tour that drives your real app, then steps aside.

Below is a small, working release-notes board. Press play and a narrated cursor adds, edits and publishes real notes through the board's own code. Nothing is faked, so nothing has to be undone.

Then try to interrupt it: click or type anywhere, and the board is yours.
Release notes0
draft
    Customize the look — caption, pointer, speed and motion
    Caption
    PointerHand
    SpeedPacing
    Motion

    Or play one step at a time

    Record a run and replay it with the same timing

    Recording saves the “Point at a thing” step as a timing file (.ltt.json). Replaying plays it back with exactly the same timing, which is how a narrated export stays in step.

    What ran, and when

    Every verb the engine performed, timestamped from the run's first frame. The gap column is where the pacing model shows itself — switch Pacing above and play the same beat twice.

    t (ms)gapverbdetail

    Nothing yet — play a beat.

    The tour, as data

    scene() is a recorder, not a runtime: it compiles to a plain Step[] that storyboard() plays. That array is the wire format — inspectable, generatable, diffable. Below is the selected beat's, verbatim (ƒ marks a callback, which is the one thing that does not serialize).

    Pick a beat to see its steps.

    This page runs the real library over a working board: add a note, click one to edit it, delete it, publish. The tour calls the same functions you do. Learn how Vetrina works, and how to use it →