The pleasure principle — mechanics
The fork in this look
The first interaction is writing: the rule sits in the lamp holding someone else's question in grey. Typing on the cover lands there, / focuses a rule anywhere, Enter on the empty rule asks the grey question. "Walk the lineup ← →" is the 12 px second verb.
The lamp never moves, so it carries view-transition-name: lamp everywhere: walks, answers and navigations are one transition, a white frame over a hard cut of the body. Only one transition moves: "Read it in the light ↑" names the strip light lamp, jumps the document to the top and grows the strip into the lamp in 240 ms.
The mind gets the brightest object; the standard route, a 12 px label and the whole page.
The standard route
- Nav is the corners plus "Four days · 50 sessions · agenda ↓" under the dates, the path jurors found missing.
- Pages are static:
/lineup/<slug>is one lamp on that body, sessions written in it; a session page, its moderator's lamp; also/agenda/tuesday,/tickets,/place. - Agenda: a 3 4 5 6 jump row and a track filter (unmatched bullets outlined, "5 of 15"); lit bullets link to sessions.
- Speakers: each light links to its page; JavaScript walks the cover instead.
- Tickets as drawn, dated by
as_of; partners, absent today, become small lights per tier, one logo each.
Asking the mind
Questions are written on a rule (cover lamp, 78th light, edge card; one conversation) and become the heading verbatim. Thinking is power, not shimmer: Enter switches the lamp off, the question an afterglow in #8D8D8D; at the first say word it re-strikes once and say streams in Mona Sans wide light. When the first component naming a person closes, the mind walks to them. The renderer, never the model, picks the body: the speaker_card id, else the first walkable person in a grid or session, else the light alone.
In the lamp, ink on white:
- Text (
faq): the site's answer at 17 px, its question as a label. - Speakers: section 01's two-column list, each name a walk; their field lights switch off.
- Speaker card: their own light, sessions as time rows, bio if any.
- Sessions, agenda day: 01's rows by start time, trimmed by
fit(), ending "+N more rows in the agenda below". - Venue: the light alone, "Austin" in ink hairline, status, prior venues, hotel "not yet".
- Tickets: the light alone as the pass sign, the whole lamp the Eventbrite link.
- Choices: no chips; the first becomes the rule's grey question, the rest underlined labels beneath.
- Sources: the dagger, renderer-owned lines per page id, "sample data" on placeholder records.
Fallbacks: off_topic and not_in_snapshot stay unnumbered, with choices; emptied components vanish; ERR copy loses its // and brackets. Proxy down or budget spent, the keyword router answers and says so. Without JavaScript the form submits to #asked.
The assistant in the chrome
- The rule: label, caret, 600-character input, one hairline, no button; "Stop" replaces the label while streaming.
- The edge-parked card: the strip's 300 px fly card as a small lamp on its rail, for answers that must not move the reader: question,
say, choices, dagger, "Read it in the light ↑". Page-backed components act on the page (field lights off, bullets lit); the card says "marked in Tuesday ↓". Non-modal, untimed, Escape folds it; a sheet on phones. - The state line: the lamp's top label is the one polite status region: "02 · thinking", "02 · writing", then person and time,
summarize()once. Superseded answers file into Asked, its left column a focusable index of hairline numerals.
Data, performance and accessibility
The fixture holds 77 speakers (59 photographs, 36 bios), 50 sessions and 39 partners, all placeholder, plus eight FAQ. Whova and WordPress must add half-length photographs (13 of 59 hold at poster scale), Whova session ids (fixture ids embed times), real tracks (these seven are invented), a cover-person setting, and staff-written questions per section: messages are never logged, so "Asked on this page" becomes "Often asked here", changing by section, not every 6 s (WCAG 2.2.2).
Motion budget: strike, flash, caret, numerals' opsz. The strike's seven light changes in 0.34 s break WCAG 2.3.1: two stutters, no flash on key repeat, at most three flashes a second, lamp and frame together. Reduced motion: no strike or flash, solid caret, instant jumps. Keyboard: the mockup's ← → handler also fires in the field; make that a roving-tabindex grid (Space reveals, Enter walks); add "Shortcuts off" (WCAG 2.1.4). Screen readers: echo and flash hidden, focus never moved. LCP is one 17–54 KB portrait; the 257 KB sprite waits.
Build plan
Carries over: server.py (stream, sanitizer, sessions, budget, guards, cache, fallbacks); the fixture; the reconciled catalogue; from mind.html and standard.html, streamAnswer, reconcile(), summarize(), ERR and mergeIntoPage(), retargeted to lights; the concept's walk, flash, fit(), dayAnswer, keyword router and portrait pipeline. Changes: server.py grows from seven components to the catalogue, sources and coverage, with page notes naming visible ids; card() and write() drop innerHTML. The body costs no tokens: it is chosen client-side. New: lamp renderers, off-on thinking, the body rule, the Asked index, section pages, the grid, the flash cap, face landmarks off macOS-only Apple Vision. Effort: demo two days; front end two and a half weeks, one developer; pipeline one week.
Risks
- Whova headshots: without a photo spec most answers hang the light alone.
- Covering faces alters likenesses: speakers must consent; opt-outs keep name-only lights.
- A cold first word (3.1 s) leaves the lamp dark; the state line speaks within a second.
- The walk lands mid-
say; a final answer dropping that person costs a second flash. - Fixture phase 2 starts November 19 for Government & Utility, November 20 for Industry: check Eventbrite.