Skip to the page
TACTILE UI

01.3Block 01.3 · Calls to action

Hand Press Launch

A coming-soon section revealed by a hand. As it scrolls into view a palm presses into a pin board from behind, fingertips last, and stays; the date and a real signup sit beside it.

Version
0.1.0
Size
79.2 KB gzipped
Access
With a Pass
Needs
hand-press-launch.mjs + hand-press-launch.css · Pin Screen
Tests
13 tests · 12 states
On this page
  1. Use it
  2. Options
  3. Methods
  4. States
  5. How it works
  6. Built with
01

Use it

Launch a made thing (an instrument, a tool, a limited run) with a reveal that says handmade and touch-me before any copy does, while keeping the page honest and useful: one date, one field, one promise, and a form that really sends (or plainly says it did not).

Copy the hand-press-launch folder and the pin-screen folder from its package next to your page, link the stylesheets and mount it on an element. Every option has a default; the lab’s Code tab writes the same example at any settings, and for React, Vue, Svelte or a custom element (Using a framework).

<link rel="stylesheet" href="pin-screen/pin-screen.css">
<link rel="stylesheet" href="hand-press-launch/hand-press-launch.css">
<div id="hand-press-launch"></div>

<script type="module">
  import PinScreen from './pin-screen/pin-screen.mjs';
  import { mount } from './hand-press-launch/hand-press-launch.mjs';

  const handPressLaunch = mount(document.getElementById('hand-press-launch'), {
    maker: 'Palma Instruments',
    edition: 'First edition · 250 made',
    name: 'Palma',
  }, { PinScreen });

  // handPressLaunch.update({ … });   change any option in place
  // handPressLaunch.destroy();        and take it away again
</script>
02

Options

OptionTypeDefaultWhat it does
makertext'Palma Instruments'Maker
editiontext'First edition · 250 made'Edition note
nametext'Palma'Product name
promisetext'A pressure instrument, played with the whole hand.'Promise
bodytext'Under one steel skin sit 1,024 sprung keys. Each reads how hard, how long and how far you press, so a palm is a chord, a fingertip a note, and a slow push a swell.'Body
specstext'Keys: 1,024 sprung pins; Travel: 4 mm at 0.1 mm resolution; Output: USB-C, MIDI 2.0, CV; Body: walnut and bead-blasted steel'“Term: value” pairs separated by semicolons, up to six.
datetext'2026-12-03'YYYY-MM-DD. The days to go are counted in the visitor’s browser.
labeltext'Pre-orders open'Date label
fieldLabeltext'Email for the first batch'Field label
buttontext'Notify me'Button
finetext'One email when pre-orders open. Nothing after that.'Fine print
actiontext''Where the form posts. Empty: nothing is sent (listen for the signup event instead).
palettemidnight · porcelain'midnight'Midnight with a signal accent, or porcelain.
finishsteel · ink · brass · chalk'steel'Pins
lightnumber, 0 to 345300Light from (degrees)
03

Methods

mount(element, options, { PinScreen })
Builds the block inside the element and returns its handle. Hand it the Pin Screen it is built with.
handle.update(next = {})
Change options in place.
handle.board
handle.root
handle.destroy()
Stops it and cleans up after it.

Events it fires, which bubble from the element: signup.

04

States

  1. ArrivingThe hand presses into the board deepest first, like a hand pushed into the back of the toy; the name, promise, date, form and specs rise in behind it.
  2. At restThe print stands in the pins under one lamp; the board sleeps.
  3. Hand over the boardPins lift in a 100px disc around the pointer and let go after it leaves.
  4. Invalid addressThe status line says so, the field is marked aria-invalid and focus returns to it; the first keystroke clears the error.
  5. Signed upPosts to the configured action, or thanks the visitor when the page handles the cancelable signup event; either way the board shakes flat and the hand presses in again.
  6. No action, not handledNothing is sent, and the status line says exactly that.
  7. After the dateThe label reads Pre-orders and the days read now open.
  8. PaletteMidnight with a signal accent, or porcelain; any pin finish.
  9. TabletTwo columns under 1000px: the product across the top, board and signup side by side, specs in two columns.
  10. PhoneOne column under 620px: the board square, the field stacked over a full-width button.
  11. Reduced motionThe hand is pressed in on the first paint; the words have no entrance; signup confirms without the shake.
  12. Off screenThe board's loop pauses; the block runs nothing of its own.
05

How it works

Made of: Pressed hand reveal, Deepest first arrival, Honest signup form, Cancelable signup event, Calendar day countdown, Container query recomposition.

Read more: How the Pin Screen works.

Original composition; Palma Instruments and its instrument are invented. The hand is the Pin Screen's procedural shape drawn in canvas, not a photograph. Faces: Outfit and Geist Mono (SIL OFL 1.1) as WOFF2, licences beside them.

06

Built with

More blocks on the same object:

Docs
Finish
Volume