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
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>Options
| Option | Type | Default | What it does |
|---|---|---|---|
| maker | text | 'Palma Instruments' | Maker |
| edition | text | 'First edition · 250 made' | Edition note |
| name | text | 'Palma' | Product name |
| promise | text | 'A pressure instrument, played with the whole hand.' | Promise |
| body | text | '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 |
| specs | text | '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. |
| date | text | '2026-12-03' | YYYY-MM-DD. The days to go are counted in the visitor’s browser. |
| label | text | 'Pre-orders open' | Date label |
| fieldLabel | text | 'Email for the first batch' | Field label |
| button | text | 'Notify me' | Button |
| fine | text | 'One email when pre-orders open. Nothing after that.' | Fine print |
| action | text | '' | Where the form posts. Empty: nothing is sent (listen for the signup event instead). |
| palette | midnight · porcelain | 'midnight' | Midnight with a signal accent, or porcelain. |
| finish | steel · ink · brass · chalk | 'steel' | Pins |
| light | number, 0 to 345 | 300 | Light from (degrees) |
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.boardhandle.roothandle.destroy()- Stops it and cleans up after it.
Events it fires, which bubble from the element: signup.
States
- 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.
- At restThe print stands in the pins under one lamp; the board sleeps.
- Hand over the boardPins lift in a 100px disc around the pointer and let go after it leaves.
- Invalid addressThe status line says so, the field is marked aria-invalid and focus returns to it; the first keystroke clears the error.
- 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.
- No action, not handledNothing is sent, and the status line says exactly that.
- After the dateThe label reads Pre-orders and the days read now open.
- PaletteMidnight with a signal accent, or porcelain; any pin finish.
- TabletTwo columns under 1000px: the product across the top, board and signup side by side, specs in two columns.
- PhoneOne column under 620px: the board square, the field stacked over a full-width button.
- Reduced motionThe hand is pressed in on the first paint; the words have no entrance; signup confirms without the shake.
- Off screenThe board's loop pauses; the block runs nothing of its own.
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.
Built with
More blocks on the same object: