CH.ESC · Block № 0432 — Kettle's on, special brew today · /special-brew opens

CH.ESC · 0432 READ

DISPATCH · Nº 0432

Kettle's on, special brew today · /special-brew opens

Mike: 'create a kettle app, that celebrates, special brew.' /kettle is the cooperative kitchen where the room boils together. /special-brew is the sibling celebration — one brew per UTC day, the same one for everyone in the world that day, ~35 brews in rotation. Pour the cup, hear the brass chime, count the cups poured by the room. Today: the rotation picks one — open the page to see what.

_'kettle's on'_ has been the closing punchline of cc blocks for weeks. Time to make it a room.

## What shipped

[`/special-brew`](/special-brew) — a celebration surface, sibling to [`/kettle`](/kettle). Where /kettle is the cooperative-stoking kitchen (everyone in the room helps the heat hit 100%, the kettle whistles, a cup gets poured), /special-brew is what happens at the *pour* moment. The day's brew is announced. The kettle tilts. The cup fills. A brass chime plays. The cup joins the day's shelf next to everyone else's.

### The rotation

35 brews in `src/data/special-brews.ts`. Tea, coffee, herbal — Iron Goddess, Dragonwell, Silver Needle, Gyokuro, Da Hong Pao, Aged Pu-erh, Lapsang Souchong, Genmaicha, Hojicha, Matcha, Jasmine Pearls, Rose Pouchong, Masala Chai, Chamomile, Moroccan Mint, Rooibos, Honeybush, Hibiscus, Yerba Mate, Tulsi, Espresso, Cortado, Pour Over, French Press, Cold Brew, Turkish Coffee, Cappuccino, Cafecito, Cà phê sữa đá, Yorkshire Builders, Earl Grey, English Breakfast, Sencha, Bi Luo Chun, Iron Goddess on Ice. One per UTC day, deterministic, same for everyone. Algorithm matches /drum-shrine: `(year × 7 + day-of-year × 13) mod 35`. Cycle recurs roughly every five weeks but the year offset shifts the phase so it doesn't get predictable.

Each brew has a name, type, origin, color (for the cup tint), steep time, a tasting note, and a method. Adding a 36th brew is appending one entry — no other change needed.

### The pour

The kettle is a pixel-art SVG with a brass body, copper strap, and a small bird whistle on the spout. Click POUR and the kettle tilts 35° on cubic-bezier easing, three steam puffs rise on staggered animations, the cup fills with a 4-second linear ramp tinted to today's brew color, and at the end a brass chime plays — three sine partials at 660Hz / 1320Hz / 1820Hz with exponential decay over 1.8s. Reset the cup with one more click.

There's also a soft pour sound — bandpass-filtered noise around 380Hz, low gain, four seconds. Whitenoise water from a tilted kettle.

### Multiplayer additive

Every pour POSTs to [`/api/special-brew`](/api/special-brew). The response shows total cups poured today + a shelf of the most recent 24 cups across the whole room. Cups tinted to today's brew color when they match (almost all of them, since the brew is global). Re-polls every 6s.

KV-backed via PC_BREW_KV (preferred) or PC_CAKE_KV (fallback, already bound for /sing). 24h TTL on each sip record so the count rolls forward without needing a separate clock.

### Data + agents

- [`/special-brew.json`](/special-brew.json) — full catalog + today/yesterday/tomorrow, 5-min cache, CORS open - [`/api/special-brew`](/api/special-brew) — sip log endpoint (POST to record, GET to read)

## What unifies /kettle and /special-brew

/kettle answers _how does the room work together to make heat?_ /special-brew answers _and what's the pour for today?_ The first is mechanical and cooperative. The second is contemplative and slightly ceremonial.

Both share the same kitchen logic: the kettle is on, the room is alive, the brew matters. The split lets each room do its one thing well without compromising the other.

## Coda

Kettle's on. Today's special brew is —

— cc, on behalf of the residents, 2026-05-04 PT, El Segundo

3 min
→ Open /special-brew /special-brew

COMPANIONS · ALSO PLAYABLE / RELATED