Skip to content

Animation components for Astro

244 of 244 · 115 at 0 B

Every card is the component running. The byte figure is measured from a production build by the same test that gates the release; the support chip says which engines, and what the others get.

Zero JavaScript?

For this one, yes. The browser animates the height.

Keyboard?

Native: Tab, Enter, Space.

One at a time?

details name=, also native.

Native <details> items whose height animates open and closed, with an optional one-at-a-time rule the browser enforces.

newly · Chrome 131 · Firefox 143 · Safari 18.4click

Animated Beam

Backgrounds

Sends packets of light along curves between nodes.

every browseralways

Six line icons that morph into a second state: menu to close, plus to close, copy to check, play to pause, sun to moon, and a check that draws itself.

Chrome 52 · Firefox 97 · not Safariclick

Shows notifications arriving one at a time: the new one drops in at the top, the older ones are pushed down, and the oldest slides out.

newly · Chrome 125 · Firefox 129 · Safari 17.5alwaysload

a native select · options stagger in

A native select with an animated picker.

Chrome 138 · not Firefox · Safari 27click

A phone app's screen drawn from rows instead of a screenshot: a status bar, a title, then rows of fourteen kinds (a big figure, a ring of progress, a checklist, a bar chart, a card, chips, a map with a route, a player, a chat, a list, a week of days, a button, a lock screen's clock, a notification) and a tab bar.

every browserload

A button whose arrow slides out on hover as a new one slides in.

every browserhover

Ambient gradient field: three soft colour fields drifting at three coprime speeds, a slow hue rotation so the colours themselves move, and a film-grain layer stepped at 12 fps.

every browseralways

A row of overlapping avatars with a count chip such as "+2 398".

every browserhover

A bar chart whose bars grow from the baseline one after another when it scrolls into view; hovering a bar shows its value.

every browserscroll

Border Beam

Backgrounds

A beam of light travels around the edge of a card.

newly · Chrome 120 · Firefox 128 · Safari 16.4always

A browser window around a screenshot or any content: the three lights, an address bar with a lock, optional tabs with one active.

every browseralways

Swells the letter under the cursor to the heaviest weight and lifts it; its neighbours follow at half and a quarter, and everything settles when the pointer leaves.

every browserhover

Cards stick to the top as you scroll and each one shrinks and dims as the next slides over it, as on Apple product pages.

Chrome 116 · not Firefox · Safari 26scroll

A scroll-snap strip with previous/next buttons and dot markers that the browser generates and keeps in sync.

Chrome 135 · not Firefox · not Safariclickpointer

a tick that draws · one indeterminate

A checkbox whose tick is drawn.

every browserclick

A ring of text turning slowly around an icon, a logo, or nothing.

every browseralways
npx astro add moonarc
pnpm astro add moonarc
bunx astro add moonarc

A code block with tabs (for example npm, pnpm, bun) and a copy button per panel.

every browserclick

A ⌘K command palette: a native modal dialog with an input and a ranked list of links.

newly · Chrome 135 · Firefox 144 · Safari 26.2click

one canvas · gone when the last piece lands

Confetti

Pointer

Fires a burst of paper confetti on load, on a click or on an ma:confetti event.

every browserloadclick
npx astro add moonarc
click · check · back

A button that copies text to the clipboard: the icon turns into a check, the label says "Copied", and both come back after the ambient duration.

every browserclick

Counts a number up from zero to its value when it scrolls into view, with thousands separators, decimals, prefix and suffix.

newly · Chrome 91 · Firefox 128 · Safari 17scroll

A flip clock counting down to a date: days, hours, minutes, seconds, each a card whose top half folds down over the hinge when the number changes.

every browserload

A preloader that counts from 0 to 100 and then lifts like a curtain, on a fixed layer that never blocks the page: pointer-events none from the first frame, aria-hidden, the page rendered and usable beneath.

newly · Chrome 85 · Firefox 128 · Safari 17.2load

Cursor

Pointer

A custom pointer that trails the real one: a dot, a ring that grows over links and buttons, or a label ("View") any element can ask for with data-cursor-label.

every browserpointer

A field of cells that light up under the cursor and fade where it has been, with a slow idle sweep when nothing is touched.

every browserpointeralways

page one

Iris.

page two

From the click.

Try the real swap →

Curtain

Page transitions

A full-viewport wipe between pages: the next page opens through an iris from where you clicked, or through blinds, a shutter, doors, pixels, staggered columns, a diagonal, or a title panel that carries the next page's name.

newly · Chrome 120 · Firefox 144 · Safari 18click

dialog

Native, animated, zero script.

Escape, backdrop click and focus are the browser's. The scale and the blur are @starting-style and allow-discrete.

A native modal that scales in over a blurred backdrop and scales out again, closes on Escape, the close button or a backdrop click, and traps focus, all handled by the browser.

newly · Chrome 135 · Firefox 144 · Safari 26.2click

A macOS-style dock: the tile under the pointer swells, its neighbours swell less, and the row pushes apart to make room.

every browserhover

Dot Pattern

Backgrounds

A field of dots behind content, faded toward the edges, with an optional slow pulse.

every browseralways

Dotted Map

Backgrounds

A world map drawn as a grid of dots, with markers that pulse.

every browseralways

drawer

Drag it down.

Follows the finger; on release, distance or velocity decides. Grab it mid-flight and it obeys.

A bottom sheet that slides up over a scrim and can be dragged closed: it follows the finger, and on release springs back or leaves depending on distance and velocity, interruptible mid-flight.

newly · Chrome 135 · Firefox 144 · Safari 26.2clickpointer

click · four declared sizes, one attribute

A black pill that changes shape with its state.

every browserclick

A row of panels where the one pointed at or focused widens and shows its words, and the others narrow to a strip with their title turned up the side.

every browserpointerhover
  • src
    • components
      • Hero.astro
      • Nav.astro
    • layouts
      • Base.astro
    • pages
      • index.astro
      • work.astro
  • astro.config.mjs
  • package.json

A project tree whose folders open with an animated height, a turning chevron and a folder glyph that tips open; rows can be lit up to say "this is the file you change".

newly · Chrome 131 · Firefox 143 · Safari 18.4click

Fill Text

Scroll

A statement that fills in as it is read: the words start faint and take their full colour in reading order, line after line, while the block crosses the viewport.

Chrome 120 · not Firefox · Safari 26scroll

Filter buttons over a grid of cards: the cards that stay slide to their new places, the ones that go fade out, the ones that return fade in.

newly · Chrome 137 · Firefox 144 · Safari 18.4click

Fluted Glass

Backgrounds

Reeded glass over whatever is behind it: the box's backdrop blurred and lightly brightened, cut into vertical flutes (or flutes at an angle), each with a light edge and a shade, as a pane of fluted glass bends what is behind it into strips.

every browseralways

The page content slides up to reveal a footer that is already in place underneath.

every browserscroll

Gauge

Data

A ring, a three-quarter arc or a half circle that fills to a value as it scrolls into view, the number counting up in the middle with it and a label under it.

newly · Chrome 91 · Firefox 128 · Safari 17scroll

Splits text into two coloured copies and jumps a few slices sideways for a fraction of a second, every few seconds; the rest of the time the text is clean.

every browseralways

Globe

Backgrounds

A turning globe of dots that you can drag.

every browseralwayspointer

A field of braille dots that reads as a flowing contour map: two waves cross it, the colour turns along a sunset arc, and the cursor carves a trail that decays one dot at a time.

newly · Chrome 125 · Firefox 128 · Safari 17.2pointeralways

A gradient fill drifting slowly through the text with no seam at the loop point.

every browseralways

Grid Pattern

Backgrounds

A hairline grid behind content, faded toward the edges, optionally drifting one cell at a time.

every browseralways

A highlighter sweeps across the phrases you marked, one after another, when the sentence scrolls into view.

every browserscroll
Press and hold to delete

A button that asks to be held for a moment before it acts, for the one action on a page that should not happen by a slip: delete, cancel a booking, send for good.

every browserclick

Home Art

Backgrounds

A building drawn flat, for a listing that has no photograph yet: a house, a terrace, an apartment block, a villa, a cabin, a tower, an office or a shop, in the colour of the block or tone it sits on, with a shade, a light and the windows mixed from it.

every browserpointer

A strip of items slides sideways while the page scrolls down and the section stays pinned.

Chrome 115 · not Firefox · Safari 26scroll
The scene as a line drawingThe scene in colour

drag · click · ← →

Compares a before and an after image with a line you drag between them.

newly · Chrome 124 · Firefox 121 · Safari 16.5pointerclick

Small images pop up along the pointer's path and fade behind it.

every browserpointer

Lens

Pointer

A round magnifier that follows the pointer over a picture.

every browserpointerhover

Light Rays

Backgrounds

Soft beams of light falling from the top edge or a top corner over whatever is behind them: a fan of blurred gradients, each a little wider, brighter or slower than the next, swaying a few degrees on its own clock and blended as light (screen).

every browseralways
Study 1Study 2Study 3

click · grows from its thumbnail · ← →

A thumbnail gallery whose images open full size: the image grows out of its own thumbnail on a same-document view transition and returns to it on close, and ← → move through the set.

newly · Chrome 111 · Firefox 144 · Safari 18click

A link that shows a small card (image, title, one line, domain) after a moment on hover or focus, above everything, flipping when there is no room.

newly · Chrome 125 · Firefox 147 · Safari 26hover

A glass pane that blurs and tints whatever is behind it.

Chrome 76 · not Firefox · not Safarihover

Magnetic

Pointer

A button or icon is pulled toward the cursor while it is nearby and springs back when it leaves.

every browserpointerhover

Marquee

Ticker

Infinite scrolling strip for logos, quotes or tags in any direction.

every browseralwayshover

Meteors

Backgrounds

Streaks falling diagonally across a twinkling sky.

every browseralways

Motif

Backgrounds

A drawn picture for a slot that has no photograph yet: a sun over the sea, a split gate, a flower, a grid of tiles, a phone going live, a plate set for dinner, waves under a moon or three shapes.

every browserhover

Noise

Backgrounds

Film grain over a gradient or image, blended and flickering at 12 fps.

every browseralways

1,284

A number whose digits roll to the new value when it changes.

newly · Chrome 125 · Firefox 118 · Safari 15.4click

One line that says whether a place is open now and until when, or when it opens next, read from the week's hours in the place's own time zone, whatever the reader's clock says.

every browserload

Orb

Backgrounds

A sphere of light that breathes and slowly turns its colour.

newly · Chrome 85 · Firefox 128 · Safari 16.4always

Orbiting Circles

Backgrounds

The children orbit the centre of their parent and stay upright.

every browseralways

one input · paste and autofill work

A one-time code in cells, from one native input.

every browserclick

page one

Hero.

page two

Hero.

Try the real swap →

Page Transition

Page transitions

Animates a named region between pages: rise, zoom, wipe, scope, columns, iris, tiles, peel, fade, slide, or the browser's own shared-element morph.

newly · Chrome 111 · Firefox 144 · Safari 18click

Parallax

Scroll

An element drifts at its own speed as it crosses the viewport, exactly in step with the scroll.

Chrome 115 · not Firefox · Safari 26scroll

Particles

Backgrounds

A field of drifting dots that part around the cursor, on a canvas that draws only while on screen in a visible tab.

every browseralwayspointer

Pattern

Backgrounds

A repeating pattern behind a box's content: stripes, diagonals, checks, crosses, zigzags, waves or hexagons, drawn by CSS gradients or one small inline SVG tile used as a mask, in one colour at a strength, and faded towards the bottom or the edges if asked.

every browseralways
Ambient loopthe same element rides into the next page

Press play, then navigate: position, volume and playback carry over.

Persist Player

Page transitions

An audio player that keeps playing while you navigate: the same <audio> element is carried into the next page by Astro's router, so position, volume and playback never restart.

every browserclick

A generic phone frame around a screenshot or any content, with three cut-outs (island, notch, punch), a home bar, and no logo, buttons or brand.

every browseralways

click · the pill slides on a view transition

A floating pill of links whose active pill glides to the page you chose.

newly · Chrome 125 · Firefox 147 · Safari 26clickhover

A picture that resolves from blocks as it scrolls into view: a grid of squares in one colour lies over the slot, and each square clears on its own stretch of the picture's entry, picked by a seed, so the picture comes through in a scatter and stands whole by the time it is a third of the way up the screen.

Chrome 115 · not Firefox · Safari 26scroll

Raw bytes of JavaScript, from a production build, measured again for every change that can move them.

A popover that opens beside its trigger, flips when there is no room, closes on outside click or Escape, and animates in and out.

newly · Chrome 125 · Firefox 147 · Safari 26click

Portrait Art

Backgrounds

A drawn portrait for a slot that has no photograph yet: a speaker, an artist, a host, a member of a team.

every browserhover

Preloader

Loading

An opening that plays once as a page loads and then gets out of the way, in one of three cuts: words (two to four words in turn, then the layer lifts), stairs (the layer is columns that rise away one after another) or split (a word, then the layer parts in two).

every browserload

sample prices

Starter

$12/mo$115/yr

one site

Studio

$48/mo$460/yr

up to ten

A monthly / yearly toggle whose prices roll to the other amount instead of swapping.

newly · Chrome 125 · Firefox 129 · Safari 17.5click

Product Art

Backgrounds

A product drawn flat, for a shop slot that has no photograph yet: 29 drawings in six sets (clothes, ceramics, coffee, skincare, furniture and objects, bakery).

every browserhover

Progress

Loading

A bar that fills to its value when it scrolls into view, with the number counting up beside it, or a ring with the number in the middle.

newly · Chrome 91 · Firefox 128 · Safari 17scroll

Progressive Blur

Backgrounds

An edge that blurs what scrolls under it, more the closer it gets: a few bands, each with a backdrop blur twice the last and a mask that keeps it to its own slice, so the blur ramps instead of stepping.

every browseralways

grows with the text · Enter sends · ⇧Enter breaks the line

The AI prompt box: a form with a textarea that grows with its content through field-sizing, a model select, an attachment button that is a real file input, and a send button that dims until something is typed and spins while the form carries data-pending.

newly · Chrome 123 · Firefox 152 · Safari 26.2click

A QR code for a URL or a short text, encoded at build and drawn as one SVG path inside the quiet zone a reader needs.

every browseralways

A round button whose items fan out around it in a ring or an arc.

newly · Chrome 125 · Firefox 147 · Safari 26click

A table of contents that lights up as you read.

every browserscroll

Retro Grid

Backgrounds

A perspective grid floor sliding toward the viewer.

every browseralways

Ripple

Backgrounds

Rings expand from a point and fade, one after another, like a pulse.

every browseralways

Room Art

Backgrounds

A room drawn flat, for a stay that has no photograph of it yet: a single, a double, a twin, a suite, a family room, a bunk room or a loft, in the colours of the block or tone it sits on, with a shade, a light and a pale tone mixed from them.

every browserpointer

Cycles through a list of words in place.

newly · Chrome 85 · Firefox 128 · Safari 16.4always

An image that starts narrow and rounded and opens to the full width as it scrolls into view.

Chrome 115 · not Firefox · Safari 26scroll

A hairline along the top of the viewport that fills as the page is read.

Chrome 115 · not Firefox · Safari 26scroll

Entrance on scroll that plays once and stays, staggers its children, scrubs with the scroll position when asked, honours reduced motion, and keeps working after every ClientRouter navigation.

every browserscroll

Bind translate, scale, rotate and opacity to the scroll position: the element goes from the start values you give to neutral across a range of its own passage through the viewport, exactly in step.

Chrome 115 · not Firefox · Safari 26scroll

A highlight sweeps across the body of a button on a loop; hover lifts it on the preset's hover travel and adds a ring, and focus draws the same.

every browseralwayshover

A highlight sweeps across the text every few seconds.

every browseralways

Skeleton

Loading

Placeholder lines, optionally with an avatar, shimmering while content loads.

every browseralways

A small line chart that draws itself from left to right when it scrolls into view; the last point lands and pulses.

every browserscroll

Spinner

Loading

An indeterminate arc whose length breathes while it rotates, so it looks like it is working rather than spinning a fixed wedge.

every browseralways

A departures board: every character spins through the alphabet and locks, one cell after another, when the board scrolls into view.

newly · Chrome 91 · Firefox 128 · Safari 17.2scroll

Splits a string into words, characters or lines on the server and reveals them with a capped stagger when they scroll into view.

every browserscroll

Spotlight

Pointer

A soft radial light follows the cursor over a card and fades in only while hovered.

every browserpointerhover
studio

hello@studio.example · Jakarta · 2026

Open the menu.

full · top · right: items in, reversed out

A burger that opens a full-screen menu (or a top sheet, or a side panel) whose items arrive one after another and leave in reverse.

newly · Chrome 135 · Firefox 144 · Safari 26.2click

idle → pending → done · one attribute

One submit button with four faces (idle, pending with a spinner, done with a check that draws itself, error) and a width that follows the label.

every browserclick
What is it for?
When suits you?
How do we reach you?

A form, or any flow, in steps: a rail of the steps' names over the step in hand, with Back and Next under it.

every browserclick

2026-10-09: Endpoint, Homescreen, Estate, Practice and Stay, templates for developer products, mobile apps, estate agents, practices and places to stay, and thirty sections.

What shipped
sitescroll · close

The ribbon stays. The page moves.

Dismiss it and the content below slides up on the preset curve as a grid row folds.

An announcement ribbon that sticks to the top of the page and folds away when dismissed, the content below sliding up on the preset curve.

newly · Chrome 117 · Firefox 129 · Safari 17.4loadclick

Steps on the left scroll by; one visual on the right stays put and changes with them.

Chrome 116 · not Firefox · Safari 26scroll

A headline's outline draws itself glyph by glyph when it scrolls into view, then the fill comes in.

every browserscroll

a checkbox underneath · Space flips it

A toggle that springs.

every browserclick
npx astro add moonarc
pnpm astro add moonarc
npx shadcn@latest add …/r/tabs.json

Tabs with an indicator that slides to the selected one and panels that fade in.

every browserclick

A label rolls upward into a copy of itself on hover, letter by letter from the left, and rolls back when the pointer leaves.

every browserhover

Random characters resolve into the real text from left to right when it scrolls into view, on load, or on hover.

every browserscrollhoverload

click · the page changes from the button
ThemeScript · 473 B raw, inline in <head>

Cycles system → light → dark, and the page changes theme through a circle that grows from the click, on a same-document view transition.

newly · Chrome 111 · Firefox 144 · Safari 18click

Tilt

Pointer

A card leans toward the cursor in 3D, lifts slightly, catches a glare, and settles back on the active preset's spring when the cursor leaves.

every browserpointerhover

Notifications that slide in, stack behind each other, push up as new ones arrive, and expand into a list on hover.

newly · Chrome 117 · Firefox 129 · Safari 17.5clickhover

Send the API keyA secret key from your dashboard, sent as a bearer token. with every request, and pass an Idempotency-KeyAny unique string. A retry with the same key returns the first response instead of acting twice. on writes.

Copy the request ID

hover, focus or tap

A short tip anchored to a word, a code or a button: it shows after a moment on hover and at once on focus or a tap, stays while the pointer moves onto it, flips when there is no room, and Escape hides it.

newly · Chrome 125 · Firefox 147 · Safari 26hoverclick

A line beside an article fills as it is read, with a dot at its head.

Chrome 115 · not Firefox · Safari 26scroll

Types a string one character at a time in any font, with a caret that stays solid while typing and blinks once idle.

Chrome 116 · not Firefox · Safari 18load

A link underline that enters from the left on hover and leaves to the right, so the exit continues the entrance instead of rewinding it.

every browserhover

hints take turns · Enter sends · the words blur away

Placeholders that take turns, and text that blurs away on submit.

newly · Chrome 125 · Firefox 128 · Safari 16.4clickalways

click · morphs open

A poster with a breathing play button that opens the video in a dialog: a file with native controls, or an embed.

newly · Chrome 135 · Firefox 144 · Safari 26.2click

A wave of boldness rolls through the letters of a line, each character animating its font weight on its own delay.

every browseralways

404

Pro

A 404 page: the code scrambles into place from random digits, rings spread slowly behind it, and the headline, copy and one link home arrive in three beats..

every browserload

The people a buyer deals with: each drawn by PortraitArt on a colour block, with the name, the role, the areas and languages, a figure or two, a line in their own words, and a call and an email as links.

every browserscroll

Sample run

One task, from the failing test to the merge

An imaginary agent on an imaginary repository. The lanes fill in order; under reduced motion, or without JavaScript, they are filled from the start.

Task Fix the failing checkout test in apps/web

Done

  1. Plan

    • Read the failing job
    • Reproduce it locally
    • Round the total to cents
    • Run the suite again
  2. Tools

    • read_log(job 4182)done0.4 s
    • grep("toBe(19.99)" apps/web)done0.2 s
    • run_tests(apps/web)done38 s
  3. Changes

    apps/web/src/cart/total.ts
    export function total(items: Item[]) { const sum = items.reduce(add, 0); return sum * 1.2; const gross = sum * 1.2; return Math.round(gross * 100) / 100;}
  4. Review

    Maya Kim

    Ready to merge. The suite passes and the change is two lines.

    Approved

Checkout totals round to cents

Files
1 changed
Tests
48 passed
Time
2 min 41 s
Tokens
18.2k

An AI agent's run, replayed in the page: the task at the top, then four lanes that fill in order (the plan ticks off, tool calls spin and finish with their time, a diff writes in line by line, a person is asked to approve and the approve reads Approved), then the result with its numbers.

every browserscrollhoverclick

API reference

Every request takes your key as a bearer token. Sample API, made up for this demo.

Base URLhttps://api.sitename.example/v1

Language

Emails

Send an email, then follow it until it lands.

Send an email

POST/emails

Queues one email. It is sent within seconds; follow it with GET /emails/{id} or a webhook.

Body

  • fromstringFormat: email.required

    An address on a domain you have verified.

  • tostringFormat: email.required

  • subjectstringAt most 998 characters.required

  • textstringoptional

    The plain-text body.

  • tagsarray of objectsoptional

    Labels you can filter the logs by.

    Fields 2
    • namestringoptional

    • valuestringoptional

Responses

202
Queued.
422
A field is missing or the domain is not verified.

Request

curl -X POST "https://api.sitename.example/v1/emails" \
  -H "Authorization: Bearer $SITENAME_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@sitename.example",
    "to": "ada@example.com",
    "subject": "Your receipt",
    "text": "string",
    "tags": [
      {
        "name": "kind",
        "value": "receipt"
      }
    ]
  }'
const res = await fetch('https://api.sitename.example/v1/emails', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SITENAME_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    from: 'hello@sitename.example',
    to: 'ada@example.com',
    subject: 'Your receipt',
    text: 'string',
    tags: [
      {
        name: 'kind',
        value: 'receipt',
      },
    ],
  }),
});
const data = await res.json();
import os
import requests

res = requests.post(
    "https://api.sitename.example/v1/emails",
    headers={"Authorization": f"Bearer {os.environ['SITENAME_KEY']}"},
    json={
        "from": "hello@sitename.example",
        "to": "ada@example.com",
        "subject": "Your receipt",
        "text": "string",
        "tags": [
            {
                "name": "kind",
                "value": "receipt",
            },
        ],
    },
)
print(res.json())
{
  "id": "em_7Hq2kD9x",
  "status": "queued",
  "created_at": "2026-10-09T08:14:22Z"
}
{
  "error": "domain_not_verified",
  "message": "Verify sitename.example before sending from it."
}

Get an email

GET/emails/{id}

Path parameters

  • idstringrequired

    The id the send returned.

Responses

200
The email and where it is.

Request

curl "https://api.sitename.example/v1/emails/em_7Hq2kD9x" \
  -H "Authorization: Bearer $SITENAME_KEY"
const res = await fetch('https://api.sitename.example/v1/emails/em_7Hq2kD9x', {
  headers: {
    Authorization: `Bearer ${process.env.SITENAME_KEY}`,
  },
});
const data = await res.json();
import os
import requests

res = requests.get(
    "https://api.sitename.example/v1/emails/em_7Hq2kD9x",
    headers={"Authorization": f"Bearer {os.environ['SITENAME_KEY']}"},
)
print(res.json())
{
  "id": "em_7Hq2kD9x",
  "status": "queued",
  "created_at": "2026-01-01T00:00:00Z"
}

Domains

The domains you send from, and whether their records check out.

List domains

GET/domains

Query parameters

  • limitinteger1 to 100.optional

    How many to return.

    Default20

Responses

200
The domains, newest first.

Request

curl "https://api.sitename.example/v1/domains" \
  -H "Authorization: Bearer $SITENAME_KEY"
const res = await fetch('https://api.sitename.example/v1/domains', {
  headers: {
    Authorization: `Bearer ${process.env.SITENAME_KEY}`,
  },
});
const data = await res.json();
import os
import requests

res = requests.get(
    "https://api.sitename.example/v1/domains",
    headers={"Authorization": f"Bearer {os.environ['SITENAME_KEY']}"},
)
print(res.json())
{
  "data": [
    {
      "name": "sitename.example",
      "status": "verified"
    }
  ],
  "has_more": false
}

An API reference in one section: a sidebar of groups and their operations; for each operation its method and path, what it does, its path, query and header parameters, the fields of its body (nested fields under a disclosure, as deep as they go) and its responses; and beside it, sticky on a wide screen, the request in every language with a copy button and the response examples by status.

newly · Chrome 131 · Firefox 143 · Safari 18.4click

A hero for a mobile app: the headline, the rating line (stars, the average, how many rated and where) and the store buttons beside a phone on a disc of the app's colour.

every browserload

The neighbourhoods an agency sells in, as ExpandingPanels: each area a panel with its street drawn by HomeArt, its starting price over its name and a line about it, widening as it is pointed at or focused; under the row the same areas with a few figures each, so the figures are read in order.

every browserpointerhover

What is on offer, as colour blocks: each card paints one of the palette's blocks and carries a drawing in its corner (Motif), an index, a name, a line, chips for what it includes and a foot with a price and a round arrow.

newly · Chrome 105 · Firefox 121 · Safari 15.4hover

The closing call on a colour block: a short line, a large heading that ends on a phrase in the emphasis face, a sentence and two pill actions, on one of the palette's blocks with a drawing (Motif) rising out of its lower corner.

every browserscrollhover
All posts

Sample post: a page built for reading

This post is sample text. It describes the page it sits on, so every sentence can be checked against what the page does.

What follows you as you read

Two things on this page follow the reader: the line beside the text and the list of headings in the side column.

The beam

The line fills as the article scrolls past. It runs on the article's own view timeline, so the browser draws it and no script counts pixels.

The contents list

The list marks the heading you are reading. Its links are plain anchors, and a jump stops below the sticky bar.

Components a post brings

A post imports what it uses: a marker, code tabs, a gallery and a link card.

npx astro add moonarc
pnpm astro add moonarc
Sample picture 1, a gradient studySample picture 2, a gradient studySample picture 3, a gradient study

The list beside this text is Reading TocReading TocA table of contents that marks the heading you are reading., and the line is its sibling.

Without JavaScript

The line is full and still, the list is a list of links, the pictures link to their full size, and the card is a plain link.

The page of one blog post: a header with the date, the reading time, the title, the author, the tags and the cover, then the body in a measured column that a beam fills as it is read, beside a contents list that follows the reader.

Chrome 115 · not Firefox · Safari 26scrollclick
Release

Endpoint, Homescreen, Estate, Practice and Stay, templates for developer products, mobile apps, estate agents, practices and places to stay, and thirty sections

Endpoint, a template for a product with an HTTP API: a console on the home page that sends a request and streams the response back with its status, its time and its region, an API reference written at build from your OpenAPI document, a quickstart and four guides, usage pricing with a slider, a status page, the regions on a map, a changelog with a feed, search and a contact page for sales.

Shows blog posts as cards, with the first post featured across two columns.

newly · Chrome 111 · Firefox 144 · Safari 18scrollhoverclick

Writing as a list: the day, the title at display size and the reading time on one line per post, the whole line a link, and the post's cover floating by the pointer while the line is hovered.

every browserhoverpointer

A demo: the search opens a page that is not there.

The dates and the guests of a stay, handed to the place's own booking engine: a form that sends them to the engine's address as the parameters it reads (check-in, check-out, adults, children, and any fixed ones, such as the property's id), so a guest lands on the engine's page with the search filled in.

every browserclick

A closing call to action: a deep brand panel with an aurora and film grain behind it, a headline that catches a shine, a magnetic primary action, a secondary one, and a typed command.

every browserscrollpointer

Case studies as a deck: on a wide screen each card holds at the top of the screen while the next slides up over it, and the one underneath shrinks and darkens a little on a scroll-driven timeline; on a phone they follow one another.

Chrome 115 · not Firefox · Safari 26scrollhover

01 / 04 · Sample case study

Harbour Lines

A mark, a typeface and a sign system for an imaginary ferry line, read from a moving deck.

Client
A sample ferry line
Year
2026
Role
Identity, wayfinding, motion
Credits
Sample names
A sample cover: a blue field with a pale circle

The top of a case study: the project's title at display size, its facts in a grid (client, year, role, credits), the cover that opens from a rounded inset to the full width as the page scrolls (ScrollExpand), then a before-and-after (ImageCompare) or a gallery that opens full size (Lightbox).

Chrome 115 · not Firefox · Safari 26scrollclick

Lists dated releases in a hairline list.

every browserscroll

Sample conversation

Ask, watch it work, approve

An imaginary agent on an imaginary repository. Open a call to read what it returned.

Sample agent

Done

  1. You

    Fix the failing checkout test in apps/web

  2. Sample agent

    One assertion fails: the total keeps a fraction of a cent. I will find where it is computed.

    • read_log(job 4182)0.4 s
      FAIL apps/web/cart.test.ts
        total > rounds to cents
        expected 23.99, received 23.988
    • grep("* 1.2" apps/web/src)0.2 s
      apps/web/src/cart/total.ts:3  return sum * 1.2;
    • run_tests(apps/web)38 s
      Tests  48 passed (48)
      Time   37.9 s
  3. Sample agent

    Push the change to fix/checkout-rounding and open a pull request?

    Approved

  4. Sample agent

    Done. The total now rounds to cents after tax, and all 48 tests in apps/web pass. The pull request is open for review.

A conversation with an AI agent, replayed in the page: the reader's message, the agent's reply with its tool calls folded into <details> (the call and its result in the monospace face), a request for approval that is approved, and the final answer, typed, with a button that copies it; a prompt box at the foot as a demo form.

Chrome 116 · not Firefox · Safari 18scrollhoverclick

Compares your product with others in an "us versus them" table.

newly · Chrome 85 · Firefox 128 · Safari 16.4scroll

Contact · sample page

Write to the team.

Sample channels on the left. The form on the right is real and sends nothing here: fill it in and watch the button.

Email (sample)
hello@studio.example
Phone (sample)
+1 555 0100
Office (sample)
1 Sample Street, Springfield

Demo: nothing is sent.

A contact section in two columns: the ways to reach you (email, phone, office) on one side, a form that really sends on the other.

Chrome 135 · not Firefox · Safari 27click

Draws slow noise waves on the GPU, ordered-dithered into pixel cells of one colour on the page's ground, for the look of a 1-bit screen.

every browseralwayspointer

A documentation layout: a sticky sidebar with the current page marked, a reading-progress hairline bound to the scroll, the header and content revealed in two beats, and previous/next links.

Chrome 115 · not Firefox · Safari 26scroll

How the work runs, in a few steps across the page: each step a round number in a colour block, a title and a line.

Chrome 115 · not Firefox · Safari 26scroll

A split hero: a tall headline revealed line by line on the left, a live panel sliding in from the right, on a slowly drifting grid.

every browserloadpointer

Questions people actually ask

Short answers. The long ones are in the docs.

Is it really zero JS?

For 83 of 125, yes, measured from a build.

Does it survive View Transitions?

Yes, verified on Astro 5, 6 and 7.

Do I need Tailwind?

No.

FAQ

Pro

A heading and lead beside a native accordion: one question open at a time, heights animated by the browser, keyboard and screen reader handled by <details>.

newly · Chrome 131 · Firefox 143 · Safari 18.4scrollclick

Lays out features as a bento grid: one slab split by 1 px hairlines, with the page ground showing through the gaps.

every browserscroll

Shows features in alternating rows of copy and a visual.

Chrome 115 · not Firefox · Safari 26scroll

Sample features

Three screens of a sample product

Orders per day

Two weeks of sample orders, one bar a day.

A bar chart of sample orders per day over two weeks

Stock by warehouse

The share of sample stock each warehouse holds.

A ring chart: North 50 %, East 32 %, South 18 % of the sample stock

The latest orders

Order number, customer, items, status and total.

A table of three sample orders with their status and total

A product's features as tabs: a named radio group over one panel per feature, each with its title, body and image, the image optionally in a browser window.

every browserclick

Give your coding agent the Moonarc catalogue

Add the MCP server once and the agent searches components by intent and byte budget, reads their craft notes and gets the command that installs them.

  • search_motion: Components for an intent under a JavaScript budget in raw bytes.
  • get_component: Source, props and craft notes: easing, duration, the reduced-motion branch, ClientRouter behaviour.
  • get_install_command: The exact command.
# in your project
claude mcp add moonarc -- npx -y @moonarc/mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "moonarc": { "command": "npx", "args": ["-y", "@moonarc/mcp"] }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "moonarc": { "type": "stdio", "command": "npx", "args": ["-y", "@moonarc/mcp"] }
  }
}
# ~/.codex/config.toml
[mcp_servers.moonarc]
command = "npx"
args = ["-y", "@moonarc/mcp"]

A feature section with code beside the copy: a headline, copy and a short list on one side, and CodeTabs on the other, one tab per client or language, each panel with its own copy button.

every browserclick

What a practice charges, as tables a reader can trust: one a group, each row a service, its price and a note, and where insurance applies a column that says in words whether it is covered, partly or not, with a mark that repeats it in shape.

every browserscroll

A hero with a field of glyphs behind a panel in the brand colour (ink on a page without a theme) whose meta line, headline and actions wipe in one after another.

newly · Chrome 125 · Firefox 128 · Safari 17loadpointer

Room by room

Point at a room in the list to find it on the plan.

Rooms · Ground floor

  • Living room22.5 m²
  • Kitchen18 m²
  • Hall7.5 m²
  • Dining room19.5 m²

Total67.5 m²

Rooms · First floor

  • Bedroom 118 m²
  • Bedroom 218 m²
  • Bathroom10.5 m²
  • Bedroom 312.3 m²
  • Landing8.8 m²

Total67.5 m²

A home's floors drawn from its rooms: each room a rectangle on a grid of metres with its walls round it and its name and area over it, and beside the plan the same rooms as a list with the total.

newly · Chrome 105 · Firefox 121 · Safari 15.4pointerclick

Moves thousands of particles along an invisible current, leaving fading trails.

every browseralwayspointer

Draws smoke that follows the cursor.

every browserpointeralways

A site footer: brand and blurb, link columns revealed with a stagger, a legal row, and a dot field fading up from the bottom edge.

every browserscroll

A footer for a studio or a person: a line and the email address to write to, columns of links, and the name set across the whole width at the bottom.

every browserscroll

The foot of a maker's site, made like the label sewn into what they make: a panel in a colour block with a stitched edge, the name large (a second part in the emphasis face), the link columns, a row of care symbols drawn as line icons with their words (how to wash it, that it goes in the oven, that it is mended for free) and a few small lines in the mono face.

every browserhover

A footer that signs off like a letter: on a strong colour block, a line of thanks, the name set large with its second part in the emphasis face and a stroke drawn under that part, a way back to the signup, the links in columns and a few small lines at the foot.

Chrome 115 · not Firefox · Safari 26scrollhover

Draws a cluster of liquid drops that merge and pull apart: metaballs on the GPU with a compact kernel, cut with an edge exactly one pixel soft.

every browseralwayspointer

The first screen of one person's work, as a bento.

newly · Chrome 105 · Firefox 128 · Safari 17pointerscrollalways

The opening of a colour-block site: the headline rises line by line out of its masks, its last word turns through a few in the emphasis face (RotatingText), a round badge with text running around it links further down the page, the lede and two pill actions sit under it, and a strip of tiles in the palette's blocks runs across the bottom (Marquee), each a drawing (Motif) or a picture with a caption.

every browserloadhover

A first screen in type as large as it will go: the name or the claim in a few lines that rise once, one after another, from masks of their own (SplitText by line).

Chrome 115 · not Firefox · Safari 26loadscroll

The first screen of an event, made like its poster: one colour block with the edition and the place in the mono face, the name huge, the dates, a line, two actions, three facts, a countdown to the doors (core CountdownFlip) and the days as chips, and beside them a composition of nine shapes in the block's drawing colours that pop into place one after another as the page opens and turn a quarter when a pointer rests on them, one of them turning round a quarter at a time once they are in, inside five seconds, then resting.

every browserloadhover

The first screen of a practice (a dentist, a doctor, a vet, a law or an accounting firm): the headline, a line of what it does, the two things a visitor comes to do (book and call) and a line for the register it is on; beside them the place as one card on a colour block, its front drawn by HomeArt, a line from OpenStatus that says whether it is open now in the place's own time zone, the address, the phone and a few rows a patient or a client asks first.

every browserload

A complete hero as one component with props: an ambient aurora, a headline split and revealed word by word, supporting copy with a rotating word, two actions and a typed command.

every browserload

Firing 08 is on the shelf

Clay for the table, thrown slowly

Cups, bowls and vases thrown by hand and fired a few dozen at a time.

Fired
Every six weeks
Batch
About 120 pieces
Made by
Two pairs of hands
  • Tall vase32 cm · StonewarePrice: $86

  • Morning cup300 ml · Two glazesPrice: $24

  • Breakfast bowl16 cm · Speckled clayPrice: $32

Show a piece

The first screen of a maker's site: the heading, a line, two actions and three facts on one side; on the other, the products themselves, each drawn on its plate (ProductArt) with its name, a spec line in the mono face and its price.

newly · Chrome 105 · Firefox 121 · Safari 15.4loadclick

A guesthouse by the sea, made up for this demo

A house by the sea, open all year

Seven rooms in an old captain's house, the beach six minutes down the lane. Sample prices.

rooms
7
to the beach
6 min
The place

The first screen of a place to stay: the headline and a line of what the place is, a few facts, and the place by day and by night in one frame: light falling over the day picture (LightRays), the windows lit in the night one, and a pair of radios under them that picks which shows, with no script.

every browserloadclick

What a guest agrees to before they come, set out to be read: the arrival and departure times large, the house rules as a list where each answer is a word with a mark that repeats it in shape (a tick, a cross), what the stay includes, and the policies in a sentence or two each: cancelling, a deposit, a late arrival.

every browserscroll

Hyperspeed.

hold to jump

Draws a jump to light speed: streaks of light rush out of a vanishing point, longer and brighter toward the edge, in one colour with a hot head in a second tone.

every browseralwayspointerclick

Covers content with a layer that the cursor washes away like ink in water, showing what is underneath.

every browserpointer

The product in the middle, its integrations around it, and data travelling along the lines between them: up to eight on the lines, more on a ring around the product.

every browseralways

A grid of integrations, tools or partners: cards with an icon, a name and a line, each lit by a spotlight that follows the cursor and lifting on hover, revealed with a tight stagger..

every browserscrollpointer

Who is on: each person a drawn portrait on a colour block (PortraitArt, seeded from the name), the name and what they do, and on the back of the portrait their session: its title, the day and time, the stage.

newly · Chrome 105 · Firefox 121 · Safari 15.4hover

Draws a pool of liquid metal.

every browseralwayspointer

Makes an image turn liquid under the cursor and settle back.

every browserpointer

The Boathouse

Southbank, on the river path

$1,150,000 Guide price (a sample)

Bedrooms
4
Bathrooms
3
Floor area
204 m²
Built
2019

Book a viewing

The top of a home's own page: its pictures on one side, each a building drawn by HomeArt under a Lens that magnifies it at the pointer, with a row of thumbnails that picks one (radios and :has(), so the arrow keys move along them); on the other side the price, the title, the address, the facts and two actions.

newly · Chrome 105 · Firefox 121 · Safari 15.4clickpointer

Homes for sale

Pick a kind and the least bedrooms: the cards filter with no script. Sample homes and prices.

Kind
Bedrooms

6 homes6 homes5 homes3 homes2 homes3 homes3 homes3 homes3 homes2 homes3 homes3 homes2 homes0 homes0 homes

No home matches. Try fewer bedrooms or another kind.No home matches. Try fewer bedrooms or another kind.

Homes as cards (the building drawn by HomeArt, the price, the address, the beds, the baths and the area) with filters that work with no script: a group of radios for the kind of home and one for the least bedrooms, and :has() rules written for the list at build hide every card that does not match.

newly · Chrome 105 · Firefox 121 · Safari 15.4clickscroll

The first screen of an estate agency: the headline, a line, two actions and a few figures on one side, and on the other the homes on the market now, one large and two small, each its building drawn by HomeArt with the price and the street on a card over it, every one a link to its page.

every browserload

A "trusted by" section: a heading, a strip of greyscale logos drifting past that colour up on hover, and optionally the same logos as a hairline grid revealed with a stagger.

every browseralwaysscroll

Materials

What the pieces are made of

Three clays and the glazes we mix from them. Pick one to see it up close.

Materials

Speckled stoneware

A grey clay with dark iron spots that come through the glaze as it fires.

Goes into Cups, bowls, plates

Porcelain

White, smooth and hard to throw thin. It lets a little light through at the rim.

Goes into Espresso cups

Red earthenware

A soft, warm clay that fires at a lower heat and is glazed inside to hold water.

Goes into The low vase

Ash glaze

Wood ash, sieved and mixed with feldspar; it runs in the kiln and pools green.

Goes into Vases, jugs

What the work is made of, as a short index: each material a row with its name, where it comes from and a small swatch, and beside the rows a large card for the one picked, with the swatch drawn big (a weave, a speckle, a grain, a crumb or a ripple, in the colours of its block), a note and what it goes into.

newly · Chrome 105 · Firefox 121 · Safari 15.4clickhover

What it would cost a month

Each month
$3,796
Loan
$676,000
Interest over the term
$462,770
Monthly payment by deposit and term
Deposit15 years20 years25 years30 years
10%$5,857$4,852$4,270$3,899
20%$5,206$4,313$3,796$3,465
30%$4,555$3,774$3,321$3,032

An estimate to plan with. A lender works out the real figure.

What a home costs a month.

every browserclick

Numbers someone can plan around, on a colour block: a panel in one of the palette's blocks with a drawing (Motif) half out of its corner, a short line and a heading, then the figures in a row, each large in the block's emphasis colour with its unit beside it and a line under a hairline.

newly · Chrome 91 · Firefox 128 · Safari 17scroll
Sample Studio

a sample page under the bar

Open the menu: the site in type as large as the screen.

A bar with the name or the mark and one Menu button, and behind the button the whole site in type as large as the screen allows: the menu covers the page, its items arrive one after another, and each label rolls on hover.

newly · Chrome 135 · Firefox 144 · Safari 26.2clickhover

What is around a place to stay, by how a guest gets there: a group a way (on foot, by bike, by car, by boat), each place a row with its name, a line about it and the minutes it takes, and a bar drawn to scale against the farthest place of its group, so the near ones read near at a glance.

every browserscroll

An email signup section built on a real form: native validation, an invalid state that only shows after the user has typed, a submit button whose label swaps for a spinner when the form carries data-pending, a status line for your handler, and a dot field behind.

every browserscroll

Kind words from readers, listeners or students, pinned up as notes: each a card in one of the palette's tints with a strip of tape across its top, tilted a little by its words (the same tilt on every build), the quote and who wrote it with where they are.

Chrome 115 · not Firefox · Safari 26scroll

The notices a regulated practice owes its readers, set where they are read: first, on a panel of its own in the page's ink, what to do in an emergency with the number as a link; then the rest as short notes, each a title, a sentence and a link (the register it is on, how to complain, that the site gives general information and not advice, the access to the building).

every browserscroll

A "now" page in one section: what one person is making, reading, learning and planning at the moment.

every browseralways

Shop

Guides for a slow weekend

  • Guide · 120 pages

    The small web field guide

    How to plan, build and keep a small site going for years.

    What is inside 4
    1. Picking what to build
    2. A page that loads anywhere
    3. Words before pixels
    4. Forms people finish
  • Guide · 48 pages

    Colour in an afternoon

    One colour to a whole palette, with the contrast checks.

  • Membership · yearly

    The Friday membership

    A second letter each month and the guides as they come out.

What one person sells, on a shelf: a course, a guide, a membership, prints or sessions.

every browserhoverclick

Fixed packages with what they cost: each card names a package and who it suits, gives the price and what it is counted in (or "Price on request", for a business that quotes), lists what is included with a tick in a colour block, can carry a bonus line on that block, and ends in an action that asks about that package.

every browserhover

The people of a practice as cards: each drawn by PortraitArt on a colour block, with the name, the role, the qualifications after the name, and the facts a patient or a client checks (the days they are in, the languages they speak, the register they are on and their number), a line in their own words and a link to their page.

every browserscrollhover

Episodes

The latest conversations

All episodes
  1. 29 September 202652 min

  2. 15 September 202647 min

  3. 1 September 202658 min

  4. 18 August 202644 min

The issues, episodes, lessons or videos of one person's work, as a list of rows in the order you give them (newest first).

every browserhoverclick

Draws glowing ribbons of light drifting through each other: four sine fields interfere on the GPU, the sum folds into soft bands, and each band glows in a colour sliding between two tones with a hot core at its peak.

every browseralwayspointer

What a writer needs on one page: the app's icon, the fact sheet (a description list a reader can copy from), the files to download with their format and size, the colours with their values, a few words from the people who make it, and who to write to.

every browserscroll

Free

$0/yr

MIT, forever

  • 125 primitives, no account, no token
  • Runtime, GSAP and Lenis adapters
  • Public shadcn registry
  • MCP server
Set up in five minutes

Pro

$129/yr

One person, billed yearly

  • 108 sections and 11 GPU effects, demos never gated
  • Every template: Waitlist, Launch, Agentic, Studio, Agency, Atelier, Gather, Creator, Endpoint, Homescreen, Estate, Practice, and Stay
  • audit_motion and measure_budget, locally and in CI
  • compose_section with a total cost
  • New components monthly, dated changelog
  • Email support within 2 working days
Not open yet: see the plan

Team

$349/yr

Up to 10 people, one invoice

  • Everything in Pro, for the whole team
  • One key for the team, locally and in CI
  • Move up from Pro at any time
  • More than 10 people: email us
Talk to us

Shows pricing plans side by side, with an annual/monthly toggle that rolls every price digit by digit to the other period with zero JavaScript (radios, :has and NumberFlow), the highlighted plan wearing a travelling border beam, cards revealed with a stagger.

newly · Chrome 125 · Firefox 128 · Safari 16.4scrollclick

A feature-by-plan comparison: the highlighted plan's column lit, rows revealed with a 40 ms stagger as the table scrolls into view, and a header row that sticks when you cap the table's height.

every browserscroll

How a thing is made, as steps sewn on one thread: a stitched line runs down the section and each step is a knot on it (a round number in a colour block, stitched round its edge) with a title, a line and how long it takes.

Chrome 115 · not Firefox · Safari 26scroll
Glaze

Tall vase

Price: $86

A tall vase for branches and long stems, thrown in two parts and joined at the shoulder.

9 of 24 left in this batch

Size
32 cm tall, 14 cm across
Clay
Speckled stoneware
Care
Wash by hand
Delivery

Wrapped in paper and card, and sent the week after it comes out of the kiln.

The top of a product's page: the product drawn large on its plate (ProductArt), with its colourways under it as small swatches (radio buttons) that recolour the drawing in place; beside it the trail back to the shop, the name, the price, a line, how many of the batch are left, two actions, the specifications in the mono face and a few notes that open (care, delivery).

newly · Chrome 105 · Firefox 121 · Safari 15.4click

The next batch, as one colour block: the product drawn large (ProductArt) under a round date stamp, and beside it the heading, a line, how many of the batch are spoken for (a count, and a bar that fills as the panel comes into view), three facts in the mono face and two actions.

Chrome 115 · not Firefox · Safari 26scroll

The shop

Pieces from the current firing

A whole collection on one page, filtered by kind: the products as cards (each drawn on its plate with ProductArt, a hang tag for the price, the name as the card's link and a spec line in the mono face) in two, three or four columns by the box's width, and above them a row of filters with their counts (core FilterGrid: the cards that stay slide into place, and the URL keeps the filter).

newly · Chrome 137 · Firefox 144 · Safari 18.4hoverclick

scroll inside

Sample product

Orders, stock and returns on one screen

The dashboard in the frame is a capture of sample data. Scroll inside the box and the window stands upright.

See ProAll components
A sample dashboard: four figures for the week, orders per day, stock by warehouse and the latest ordersA sample dashboard: four figures for the week, orders per day, stock by warehouse and the latest orders

A product hero: a headline revealed word by word, two actions, a play chip that opens the demo video in a dialog, and the product screenshot in a browser window that leans back 20 degrees and stands upright as the page scrolls.

Chrome 135 · not Firefox · Safari 26.2loadscrollclick

A row of products that runs off the page's edge: each drawn on its plate (ProductArt) with a hang tag for the price, the name as the card's link and a spec line in the mono face.

Chrome 116 · not Firefox · Safari 26hoverscroll

A hero whose entry point is a prompt box: a small label, a short headline, a lead, a large PromptInput with Enter to send, a status line and example tasks.

newly · Chrome 123 · Firefox 152 · Safari 26.2load

A quickstart as numbered steps down a rail that fills as the reader moves through them, each number lighting as its step reaches the middle of the screen.

Chrome 115 · not Firefox · Safari 26scroll

What people who use the app say, as the stores show it: the average large with its stars and how many rated, a bar for each star count with its share written beside it, and a few reviews, each with its stars, its title, who wrote it, when and where.

every browserscroll

Where a service runs: the world in dots with each region pinned and pulsing in turn, a chip at each pin with its code and the latency measured there, and under the map the same regions as a list (name, code, figure), so a reader who cannot see the map, or reads on a narrow screen where the chips would crowd, loses nothing.

every browserscrollalways

Email API

Email that arrives

One request sends it. Webhooks tell you when it lands, and every message keeps its own log.

Sample figures, made up for this demo

POST /v1/emails HTTP/1.1
Host: api.sitename.example
Authorization: Bearer sk_live_••••
Content-Type: application/json

{
  "from": "hello@sitename.example",
  "to": "ada@example.com",
  "subject": "Your receipt",
  "template": "receipt"
}

202 Accepted84 msfra1

{
  "id": "em_7Hq2kD9x",
  "status": "queued",
  "created_at": "2026-10-09T08:14:22Z"
}
GET /v1/emails/em_7Hq2kD9x HTTP/1.1
Host: api.sitename.example
Authorization: Bearer sk_live_••••

200 OK31 msfra1

{
  "id": "em_7Hq2kD9x",
  "status": "delivered",
  "opened": false,
  "events": [
    {
      "type": "delivered",
      "at": "2026-10-09T08:14:25Z"
    }
  ]
}
GET /v1/domains HTTP/1.1
Host: api.sitename.example
Authorization: Bearer sk_live_••••

200 OK27 msiad1

{
  "data": [
    {
      "name": "sitename.example",
      "status": "verified",
      "region": "eu-west"
    }
  ],
  "has_more": false
}

A hero for an HTTP API: the headline beside a console where a request is written line by line, a line runs while it is sent, the status lands with the time it took and the region that answered, and the JSON response streams in under it.

newly · Chrome 105 · Firefox 121 · Safari 15.4loadclick

The rooms of a place to stay as cards: each drawn by RoomArt on a colour block, with its name, how many it sleeps, its beds and its size, what it has (a terrace, a bath, a sea view), a sentence about it and its price from a night, the whole card a link to book it or to its page.

every browserscrollhover

Schedule

Three days, one hall

Day

Fri14 May

Doors and badges from 09:30

  1. 10:00–10:30

    Opening

    Stage: Main stageTalk

  2. 10:30–11:15

    Letters that move

    Type designer

    Stage: Main stageTalk

  3. 12:15–13:30

    Lunch

    Stage: GardenBreak

  4. 14:00–16:00

    Drawing with code

    Illustrator

    Stage: Hall BWorkshop

Sat15 May

The party is in the garden from 19:00

  1. 10:00–10:45

    Fast pages

    Web engineer

    Stage: Main stageTalk

  2. 13:30–15:30

    Motion with manners

    Motion designer

    Stage: Hall BWorkshop

  3. 16:00–16:45

    Everyone reads

    Accessibility lead

    Stage: Main stageTalk

Sun16 May

A shorter day, done by 16:00

  1. 10:30–11:15

    Words on screens

    Writer

    Stage: Main stageTalk

  2. 11:30–13:00

    Light for products

    Photographer

    Stage: Hall BWorkshop

  3. 15:15–16:00

    Closing

    Stage: Main stageTalk

A programme by day: a row of day chips (radio buttons, each a weekday over its date in a colour block) picks the day, and under it the day's sessions in order, with the time in the mono face, the title, who leads it, the stage as a chip in the stage's own colour and the kind of session beside it.

newly · Chrome 105 · Firefox 121 · Safari 15.4clickload

An app's features told down the page while one phone stays in view beside them and its screen changes with each feature.

Chrome 116 · not Firefox · Safari 26scroll

A service's own page, top to bottom: its name and what it is in a sentence, then the parts a reader looks for before booking (what it is, who it is for, what happens step by step, what to bring, what comes after), each under its own heading; beside them a card that stays in view while the page scrolls (position: sticky, nothing animated) with the facts (how long, from what price, whether insurance covers it), the two actions and a line of small print.

every browserscroll

What a practice does, by group: each group's name and a line about it on one side, its services on the other as rows, each with a line of what it is, how long it takes and what it costs from, and a link to its own page.

every browserscroll

Sample services

What an imaginary studio does

Brand identity

A name, a mark and the rules that hold them together, for a company that is new or has outgrown its look.

Deliverables

  • Logo and mark
  • Type and colour
  • Guidelines
Websites

Sites designed and built by one team, from the first sketch to the code that ships.

Deliverables

  • Design system
  • Astro build
  • Content model
Product design

Screens for an app or a tool, drawn with the people who will use them and handed over as working components.

Deliverables

  • Flows
  • Interface
  • Components
Motion

The logo in motion, a product film, the interface itself: motion that says one thing each time.

Deliverables

  • Motion identity
  • Product film
  • Interaction specs

What a studio or a freelancer does, as numbered rows at display size that open one at a time: each row names a service, and opens to a short text beside the list of deliverables.

newly · Chrome 131 · Firefox 143 · Safari 18.4clickhover

A sign-in card in two steps, email then a one-time code, as the front end of your own auth service.

newly · Chrome 119 · Firefox 121 · Safari 16.5click

A newsletter signup beside a look at what arrives: the heading, a line, one email field with its button and the count of people already reading, and next to them the next issue as it lands in an inbox (who it is from, the subject, the day it sends, its first lines fading out) on a small stack of the issues before it.

every browserclickhover

Silk

Pro

Draws a sheet of fabric drifting in slow folds, lit from one side: a warped height field on the GPU, normals from finite differences, a diffuse body in the colour and a narrow sheen in a second tone.

every browseralwayspointer

Shows big numbers that count up when scrolled into view, 120 ms apart, with labels and an optional bar under each, in a hairline row.

newly · Chrome 91 · Firefox 128 · Safari 17scroll

A status page in one section: the state of everything as the heading with its light (it pulses three times, then stays lit), the uptime of the days shown as a Gauge, each service with its state and a bar for every day (up, degraded, an outage, maintenance, no data) rising in turn as the board arrives, and the incidents with their updates, newest first.

every browserscrollhover

A vertical timeline: the line draws itself down the page in step with the scroll, each step revealing from the line's side as it is reached, markers numbered or dated.

Chrome 115 · not Firefox · Safari 26scroll

Who it is for, as stickers: a heading and a line beside a cloud of rounded labels in the palette's blocks, each tilted a little its own way, coming in one after another as the cloud enters the screen (Reveal).

every browserscroll

Steps on one side and one visual on the other that stays in view and changes with them, under a lead paragraph that brightens word by word as it is read.

Chrome 116 · not Firefox · Safari 26scroll

A sticky navigation bar that condenses over the first 120 px of scroll: the row tightens and a hairline appears, bound to the document's scroll timeline, with zero JavaScript.

Chrome 120 · not Firefox · Safari 26scroll

The call to get the app: a panel of the app's colour block with the headline, the store buttons and, on a wide screen, a QR code to the app, and a phone rising out of the panel's lower edge as the panel comes into view, its lower third cut by the panel.

every browserscroll

Shows team members in a hairline grid: portraits that tilt toward the cursor with a glare, initials when there is no photo, names and roles revealed with a stagger..

every browserscrollpointer

A hero for developer tools: split headline on the left, a terminal window on the right that types the install command and prints its output line by line, on a pulsing dot field.

Chrome 116 · not Firefox · Safari 18load

Shows testimonial quotes in a staggered grid.

every browserscrollpointer

Shows two rows of testimonial cards drifting in opposite directions, pausing while hovered so any quote can be read.

every browseralwayshover

You're in

Thanks, you're on the list.

We'll write once, the day it opens. Until then, every friend who joins through your link moves you up.

Your place in line
1,284

Back to Pro

A thanks page for after a signup: a headline, the reader's place in line rolling up, a referral link with a copy button, and one burst of confetti.

newly · Chrome 125 · Firefox 121 · Safari 15.4loadclick

Two tilted bands that cross the page, each a marquee of the same few words running the other way: one in the ink tone, one in a colour block, the words alternating between the body face and the emphasis face with a spark between them.

every browseralwayshover

The foot of an event's site, made like its ticket: a colour block with the name large (a second part in the emphasis), the dates and the place, the link columns and a few small lines; a perforated line, and past it the stub, with "Admit one", the dates again and a barcode drawn from the name.

every browserhover

The tickets, as tickets: each tier a card with a perforated line under its head (a notch cut from each side), the name and the price, what it includes, how many are left (a count, and a bar that fills as the card comes into view) and its action.

Chrome 120 · not Firefox · Safari 26scrollhover

Pricing

Pay for what you send

Sample plans and prices, made up for this demo.

Usage a month
  • Lowest price at this usage

    Free

    For a side project

    $0 / monthPast this plan's limitPast this plan's limitPast this plan's limitPast this plan's limit

    $0 includes 3,000 emails

    • One domain
    • Logs for a day
    Start free
  • Lowest price at this usage

    Pro

    For a product

    $20 / month$20 / month$65 / month$200 / month$875 / month

    $20 includes 50,000 emails, then $0.90 / 1,000 emails

    • Ten domains
    • Webhooks
    • Logs for 30 days
    Start with Pro
  • Lowest price at this usage

    Scale

    For volume

    $90 / month$90 / month$90 / month$90 / month$540 / month

    $90 includes 250,000 emails, then $0.60 / 1,000 emails

    • Dedicated IP
    • Logs for a year
    Talk to us

Usage-based pricing: a slider of monthly usage and every plan priced at the usage picked, each price rolling to its new figure, the cheapest plan for that usage lit and badged.

every browserclick

Where it is and how to get round it: a drawn site map in a colour block with the places on it as numbered dots in their own colours (the stages, the food, the entrance), and beside it the same places as a numbered list with a line each; pointing at a place in the list lights its dot on the map.

newly · Chrome 105 · Firefox 121 · Safari 15.4hover

Where to find a studio, a shop or a counter, as one card in a colour block: a drawn map with a pin, the address with a directions link, the opening hours for the week, the ways to get in touch, and above them a live line that says whether it is open now and until when (or when it opens next), with the time where the place is.

every browserload

Waitlist · private beta

Doors open soon.

One email when they do. Type it in and watch it go. The form underneath is real.

Opens

Demo: nothing is sent.

A pre-launch hero with a waitlist form: a flip countdown over a retro grid floor, an email field whose text blurs away on submit, a status line that says what happened, and the people already waiting.

newly · Chrome 125 · Firefox 128 · Safari 16.4loadclick

Draws a water surface in halftone.

every browserpointeralways

An app beyond its own screen, in a bento: its home-screen widgets in three sizes, its lock screen (a phone's top half, cut by the tile) and its watch face, each drawn from rows (AppScreen without its chrome) on a tile of a colour block, with a title and a line under it.

every browserscroll