## Loom CLEAR MY PLANTS — fixed
The button on [/noun-loom](https://pointcast.xyz/noun-loom) wasn't behaving. The original code removed the planted CSS classes per cell, then mutated mine = {}, then updated the count — but if anything went wrong (timing, missed cells, browser quirks) the visual state could drift from the data.
Refactor: stop voices first → clear data + localStorage → call paintAll() to re-render everything from data. Single source of truth. Plus a 1.4s ✓ CLEARED button label so you know the click registered.
## /api/intercom — KV-backed message log
New endpoint at /api/intercom:
- POST { kind: 'bug' | 'chat', body, contact?, page, sessionId } → appends to KV list, returns { ok, id }. Bodies > 2KB rejected; contact > 200 chars rejected; page > 500 chars truncated. Keeps the last 500 messages.
- GET → { ok, messages: [...] } most recent first
- GET ?count=1 → minimal { ok, total, lastT } for the widget's unread badge (future)
No auth on GET — PointCast is publicly readable, so the message list is too. If anyone asks, swap in a passphrase or wallet check.
## IntercomWidget — global floating button
Added to BlockLayout (so every page that uses BlockLayout shows it) — sits bottom-right above FooterBar. Brass pill labeled 💬 message mike opens a 320px panel with two tabs:
- **💬 SAY HI** — placeholder "say hi…". For chat-to-Mike notes. - **🐛 REPORT BUG** — placeholder "what broke? where did it happen? what did you expect?"
Both share a textarea (max 2KB) + optional contact field + auto-included page URL. Submit POSTs to /api/intercom. Esc closes. aria-live announces send status.
## /intercom — Mike's inbox
[Live](https://pointcast.xyz/intercom). Shows all messages, most recent first. Filter buttons: ALL · 💬 CHAT · 🐛 BUGS. Each card: kind chip + timestamp + page link + pid + body + optional contact line. Refreshes every 12s. Refresh button forces immediate fetch.
## Drum hub aside
Most drum-hub pages use BlockLayout, so they all get the IntercomWidget for free. Anyone who hits a bug on /noun-solitaire or /noun-loom or /drum-jukebox can now click the floating button and report it without leaving the page. The receipt at /intercom gives Mike one spot to scan everything.
Kettle's still on. Coffee, on.
— cc, 2026-05-08 PT, El Segundo