← Return to the lane

FieldGuide

How code became lantern heat, faulty glass tubing, rising steam and the slow melancholy of closing time.

BUILD NOTES · ROOM 154 · WING VII

Nightmarket treats a webpage as one continuous market lane. Its central idea is not simply that stalls exist, but that they have lives, rituals and closing times—and that the visitor can make the night pass.

CONCEPTLIGHTTIMEAIRTOKENSRECIPE

01 / CONCEPTA lane with memory

The setting is fictional and pan-Asian in register, built with attention to human detail instead of borrowed iconography. Each counter has its own labor rhythm: Ren pairs stockpots with cassette tapes, Yuna and Sol read fortunes in dumpling pleats, and Auntie Lien feeds whoever remains at 04:00. The menus, queue rules and ladle hierarchy make the lane feel socially inhabited.

Time is the narrative spine. Early visitors see every fire lit. Late visitors read the same stories behind real metal shutters, until only the congee stall remains. The resulting absence is part of the design.

02 / LIGHTProcedural neon

There are no generated assets in this Wing VII room. Every visual is HTML, CSS, SVG or canvas. In main.js, makeNeonSign() reads each stall’s wording and color, then constructs an inline SVG with wire paths, tube lettering and Gaussian blur. It marks one character with neon-fail, so each sign has a permanently unreliable letter.

The same SVG contains a flipped, masked text group called neon-reflection. It is blurred and faded beneath the live tubes, so the wet tile receives the exact sign rather than a generic colored glow. Each stall sets --neon, letting red, cyan, pink, blue and cream stain one shared architecture.

03 / TIMEThe closing system

The range input covers minutes 1080–1680: 18:00 through the following 04:00. updateMarket() formats wrapped time, compares the slider against every stall’s data-close, and applies closing or closed. A closing sign panics for twenty minutes; at its true closing time, a slatted CSS shutter scales down from the awning.

00:45TEA01:30EMBER02:15FOLD03:00RADIO03:25MOON04:00LADLE

The order is intentional: tea, skewers, dumplings, noodles, dessert, then congee. The live ledger, status text and final message explain every change without relying on color or animation alone.

04 / AIRSteam, rain & hum

drawSteam() animates a capped collection of translucent radial ellipses on one fixed canvas. The particles rise at slightly different speeds and drift with sine waves; the slider increases canvas opacity as the night cools. The loop stops when the document is hidden. Reduced-motion and the smallest phone breakpoint yield to the lighter CSS atmosphere.

The “Wake wet tile” control calls wakeRain(), adding rain-wake to the lane for one brief weather event. CSS moves a fine rain curtain through the counters while each generated sign surges in true stall order; the live region narrates the action for visitors who cannot see it. Reduced motion keeps the state change but removes the traveling sweep.

The optional HUM switch is silent by default. Only after an explicit click does Web Audio create low sine and triangle oscillators. Switching it off closes the audio context. The subtle electrical tone belongs to the neon rather than becoming a soundtrack.

05 / TOKENSHeat & lettering

The dominant field is near-black oxblood (#120608), cut with lantern red, wok-flame orange, rain cyan, candy pink and steam cream. Baloo 2 gives the display typography broad, hand-painted warmth; Outfit keeps menus and field notes crisp at small sizes.

LANTERN
#FF3B27
FLAME
#FF7A18
RAIN
#20F2D2
NEON
#FF4FC8
STEAM
#FFE2B9
Baloo 2 / 800Outfit / 400 — menus, captions, field observations

06 / RECIPEReproduce this

Prompt an AI coding agent to build a single continuous nocturnal street rather than a card grid. Ask for several named vendors with distinct rituals and closing times; an SVG-sign generator with one faulty letter per sign; reflections derived from the same local neon token; a draggable clock that alters every section’s physical state; and one restrained canvas atmosphere layer. Require self-hosted expressive type, invented menu details, full keyboard access, mobile layouts, reduced-motion behavior, and visibility-aware animation. Finally, ask the agent to visit the page at early, mid and closing time—because the composition must work in all three states.