Request access

Cue 01 · Dock into the header · 0 → 0.6 screens

The CMS design studios hand to their clients.

Build in a visual editor on the site’s own design system, stage the motion as GSAP scenes, publish in every language the site speaks. Your client edits words and images. The design stays yours.

Request accessWatch a page being built ↓

By invitation, one studio at a time.

Cue 04 · Read along · line at 70%

Studios lose their best work at the handover. The client opens the CMS, changes a heading and the grid gives way. The motion that took a week lives in a developer’s branch. The Italian version arrives as a PDF. Libretto keeps the parts apart: the design system is yours, the motion is staged in scenes, and the client gets the words, in every language the site speaks.

Act I

The score: one design system per site

Colour, type, space and shape are tokens of the site, with themes for the dark sections. Each component has its variants, sizes and states, such as hover, pressed and disabled, set per breakpoint in one table. Change the accent once and every button, link and tab that uses it follows. A save that would drop a text below AA contrast is refused before it reaches the site.

No appearance in content.

A page stores words, images and the variant it draws, never a colour or a size.

Promote a one-off.

A style born on one element becomes a variant of the component, ready everywhere.

Your fonts, on your site.

Google Fonts are self-hosted with their licence on record, or upload your own WOFF2.

How the design system works →
The Components table of this site’s design system: the button, its variants and its states

Inspector · this page’s own tokens

font.size.display-xl · Softcore Bold · 44→88 px · 0.9

font.size.display-l · Softcore Italic · 34→64 px · 1.02

font.size.body · Softcore Regular · 17→18 px · 1.55

font.family.mono · IBM Plex Mono · 12 px · +0.06em

paper #EDECE8

ink #141414 15.6:1

cue #B81F18 5.47:1

go #17703D 5.19:1

Act II

The staging: motion as scenes, not code

Pick an element, pick a recipe, set its knobs. Libretto writes the GSAP timeline with ScrollTrigger and plays it on the published page: pinned, scrubbed, or timed to the first scroll. Every scene has a reduced-motion version, so a visitor who asked for less movement sees the final state, not a broken page.

The editor building the opening of this page: a blank page, the wordmark sized by the type tokens, the header, the headline, the Dock recipe, the preview playing it

Cue 05 · Image sequence on scroll · 72 frames · pinned for 3 screens · six steps

  1. 01A blank page: no header, no footer, nothing on it yet.
  2. 02The wordmark takes its size from the type tokens, one step at a time.
  3. 03The site’s header comes in. It holds the slot the wordmark will dock into.
  4. 04The headline, the lead and the button, written in the inspector.
  5. 05Dock into the header, picked from the motion recipes.
  6. 06The preview scrubs the scene: the wordmark travels into the header.

The programme

Arrival

Intro on the first touch · Build up on the first touch · Dock into the header · Menus appear

Across the page

A word per section · Invert over photos · Snap to panels

On scroll

Reveal on scroll · Parallax · Read along · Payoff pushed away · Hide after scrolling · Image sequence on scroll

On stage, ready as components

Marquee · Image trail · Spotlight reveal · Image sequence · Horizontal scroll · Before and after · Expanding panels · Carousel · Kinetic text · Stat counter · Mega menu

Scenes and recipes in the guide →

Act III

The words: your client writes, the design holds

Invite your client as a content author. They change texts and images in the same editor and cannot touch tokens, variants or scenes. Activity shows who changed what, and when.

The opening of this page in EnglishThe opening of this page in ItalianENIT
50 %

Before and after · EN / IT · this page. Drag, or use the arrow keys, to read it in Italian.

Up to twelve languages per site, side by side in the inspector. A text not translated yet shows the main language until someone writes it, so no page goes blank. Every page declares its language pairs to search engines with hreflang, in the head and in the sitemap.

The inspector with a text in English and in Italian, side by side

Repertoire

Cue 07 · Project index · peek

Sites in production on Libretto. Open one, then open its source in the guide: every effect on it is a recipe you can set.

  • Dock into the header
  • Read along
  • Image sequence
  • Before and after
  • Spotlight reveal
  • A word per section
  • Kinetic text
  • Mega menu
  • Twelve languages
  • Forms with an inbox

Access opens one studio at a time. Tell us about yours.

Request access

Act IV

Opening night: preview, publish, roll back

Preview the draft as visitors will see it, at every breakpoint and in every language, and as a guest or a member. Publish with a note: every publish is a version. If a page has a problem, the publish stops and names the element to fix. Activate an older version and it is live again, with the current draft set aside, not lost.

The publish page of this site: three versions with their notes, one active

Pages are rendered on the server. The HTML already holds every word, the styles and the main image, so the page paints before the scripts arrive, and search engines read all of it. The publish page shows the site’s real-visitor Web Vitals: LCP, INP and CLS at the 75th percentile.

Publish and versions →
The same page, publishedThe draft of this page in the editor, with the findings bar under it
Move to see the published page

Cue 08 · Spotlight reveal · draft under, published over

The prompter

The prompter: agents work beside you, through the same operations

In opera the prompter feeds lines from the box; the singer decides. In Libretto every change is an operation, and the editor, the CLI and the MCP server run the same ones.

Connect an agent to /api/mcp and it gets five tools. It sees only the operations its role allows, can try a batch as a dry run before applying it, and every batch writes a line in the audit log. Undo reaches its changes as it reaches yours.

  • site_context

    who the agent is, on which site, with which role

  • discover_operations

    the operations its role may run, with their inputs

  • read_resources

    pages, trees, outlines, the design system

  • dry_run_ops

    a batch tried and rolled back, with its findings

  • apply_ops

    the batch applied, one line in the audit log

A real session on this site, run through the CLI and shortened; the last two lines are its rows in the audit log.

agent > Tighten the manifesto's measure to 28ch. $ splash context site libretto · theme standalone · role admin $ splash apply batch.json --dry-run tree.commit set_style oqqzd0zj p:body { max-width: 28ch } dry run changed · tree revision 1 → 2 · rolled back findings a11y.heading-order (warning) · structure.empty-box-paint ×4 $ splash apply batch.json applied request d8e4dad6 · tree revision 2 audit #261 10:11:42 admin mcp:dry_run_ops dryRun true audit #262 10:11:51 admin mcp:apply_ops dryRun false

Backstage

Members
Sign-up, confirmation and sign-in on the site. Sections and pages for members or roles are never sent to guests, not even in the source.
Forms
An inbox per form, CSV export, recipients, privacy consent, a field only bots fill, a minimum fill time.
Site components
Build a part once and place it as instances that keep their own overrides.
Menus
One menu feeds a mega menu on desktop and a drawer on phones.
Ready parts
Search, table of contents, tabs, FAQ, timeline, comparison table, event calendar, gallery with filters: all styled by the site’s design system.
Site package
Export a site’s draft as a package of its pages, components, menus and media, and import it into a fresh site.

Questions

Cue 10 · Reveal on scroll

Bring one project. We’ll open the house.

Request access

Tell us who you are and what you would build. A person reads every request. No newsletter: we write only about your request.

We reply here, nowhere else.

Optional.

Libretto

Colophon. This page was built in Libretto: 231 layers, 15 scenes, one image sequence. Set in Softcore, with cue marks in IBM Plex Mono. Its outline, as an agent reads it:

1cs6wu8q root 0srorlu5 section "Overture" 1fc9i9hp primitive:text "Wordmark" qndzirq1 primitive:box "Opening" oiy1tcsp primitive:text "Cue" cd5arabb primitive:text "Headline" 4eh5w5ix primitive:text "Lead" lml0n4s4 primitive:box "Actions" n4f8vt6t component:ds.button "Request access" variant=primary 3an2jl5u component:ds.text-link "Watch" variant=action p6szfu9k primitive:text "Note" 4k1950wj section "Manifesto" c8j4265v primitive:text "Cue" oqqzd0zj component:scroll-read-along "Manifesto" 85twl4fv section "Act I: the score" 6dqw7s9r primitive:text "Act label" uyacm0zt component:kinetic-text "Title" dncmek3c primitive:box "Text" w017304x primitive:text "Body" s85f9use primitive:box "Programme" …