The pass — mechanics

The fork in this look

The first screen is the whole pass, undecided: body as map, stub as mind, answer 01 printed. The first interaction is the tear: asking, or tapping an asked-here line, tears right; the tear-left verb, a corner link or scrolling off the pass tears left.

The tear is one same-document view transition under 700 ms: a solid line runs down the cut (clip-path, 280 ms) and the halves part. Right: the body slides off, the lockup shrinks into a 64 px chrome band and the stub becomes a left rail (line, asked-here, contents) beside full-measure answers at /mind/. Left: the stub folds into the perforation as the parked edge.

The map gets the paper and the quieter verb (600, 66% ink); the mind a strip, but the louder verb (800, full ink), the caret and the red of asked-here.

The standard route

The corner line is the nav, sticky past the pass as a 40 px band with the small foil and "from $299". The home is the pass plus the roll; each section is also a page: /lineup/ (role-width passes, A–Z index, /lineup/<slug>/ for portrait, bio, sessions), /agenda/ (the four-numeral spread, session stubs), /austin/, /passes/ (ticket stubs, Eventbrite unchanged), /about/. The mockup lacks partners: /partners/ is the back of the pass, 39 logos in one ink by tier.

Asking the mind

Ask in the line (Enter, or a printed [ tear ]) or tap a printed follow-up.

Thinking changes the paper: the question prints at once as the next heading, numbered in Handjet round cells, and the cut beneath punches dash by dash until the first say delta tears the stub (one 2.4° rock). Rows print as each ui object closes; on the final answer every numeral locks to square cells (ELSH 8 to 2): round is provisional, square settled.

Two scales: rows in the 300 px stub, roll pieces on the mind route.

Fallbacks: not_in_snapshot tears an honest stub with the nearest real rows; off_topic gets one italic line and no number, so numbers stay a contents page. Refused, truncated or invalid: the punching stops, the dashes fade, [ ask again ]. Resting or scriptless, asked-here lines link to the sections answering them.

The assistant in the chrome

Data, performance and accessibility

The fixture holds what the mockup prints: 77 speakers with roles (the pass widths), 50 sessions, dated tiers, 8 FAQ answers, 39 sponsors, placeholder flags. Session ids match the mockup's anchors; speaker anchors are ids minus spk-.

Whova and WordPress must add rooms (0 of 50), descriptions (3 of 50), 41 bios, 18 portraits, real topics (tracks are invented), transparent logos (all 39 are JPEG, unprintable in one ink), the Event record and pass inclusions; a nightly job adds the foil's 96 hourly ERCOT values.

Motion rests by 5 s, then one moving thing per region: transform, opacity and clip-path only, view() timelines, no scroll listeners. Dither portraits in the snapshot sync (1-bit PNG, 1x and 2x), not in the browser. Reduced motion gets final frames, square numerals and an instant tear. The keyboard contract carries over (/, typed carry-over, [ shortcuts off ]); the roll becomes focusable. Answers are sections with numbered headings, aria-busy while streaming, announced by the role="status" state line. Meaningful text at 40% ink (3.3:1: footnotes, serials, sample state) moves to 66% (7.2:1).

Build plan

Carries over from prototype/: server.py's SSE events, incremental reader, sanitizer, append-only sessions, guards, budget and self-test; the fixture and builder; the seven-component catalogue; the renderer in mind.html and standard.html (render by id, reconcile on final, merges, status region). From the mockup: the foil builder, stub CSS, day lock, and six canned answers (pre-printed fallbacks, eval seeds).

New: a two-scale renderer for the ten-component catalogue with sources and coverage, the tear and parked edge, the thinking material, asked-here, partners, dither and foil jobs. About six engineer-weeks over the static pages; the route handler, router and limits are the brief's shared build.

Risks