Projects

List

shared list · link-based, live

One list, everyone writes on it, one person goes, everyone watches.

A list a group fills together and one person carries out. Colleagues add their lunch order, a household its groceries; whoever goes ticks the lines off on a phone while the others watch them go, live. It is written on a market-stall slate, each line signed in its author’s chalk, and a second kind of list keeps a wishlist’s reservations from its owner.

  • TypeScript
  • React
  • Hono
  • Cloudflare Workers
  • Durable Objects
  • WebSocket
LISTCLAIREMARCPAULINÈSCLAIREMARCSOFIALISTDrawing: the office laptop showing the Friday shopping list while someone writes a new line, and the shopper’s phone ticking lemons, struck out on both screensFRIDAYSHOPPINGPaper towelsCoffee beansKebab, white sauceLemonsOat milkAA batteriesBin bagsCake for Léa|FRIDAYSHOPPINGPaper towelsCoffee beansKebab, white sauceLemonsOat milkAA batteriesBin bagsTICKED IN THE SHOPstruck out on every screenA LINE, A NAMEthe name is asked onceNO ACCOUNTthe link is the key
Coverage
11%
lines run by the tests run outside the Worker, read 2026-10-22
House packages
9 of 11
installed from npm

At a glance

  • Someone creates a list and sends its link; everyone adds lines from wherever they are, and whoever goes ticks them off while the others watch it change. No account: the link is the key.
  • Each line carries the name of whoever wrote it, in a chalk colour of their own, dealt the same on every screen, so nobody has to ask “did you get my thing?”.
  • A wishlist belongs to whoever made it: guests reserve a wish or add surprise ideas, and the server sends each socket the list as its viewer may see it, so the owner never learns who reserved what.
  • One SQLite-backed Durable Object per list holds its lines and its sockets through the hibernation API; every change is broadcast as the whole list, so a socket that reconnects has missed nothing.
  • A list nobody opens for ninety days deletes itself, by an alarm each visit pushes back.
  • Installable, French and English, light and dark, read and ticked with one hand on a phone.

How it works

one object per list, the whole list on each change

Diagram: one Durable Object per list keeps its lines in SQLite; anyone with the link adds, ticks and rewrites them, a guest reserves a wish, and on each change every socket gets the whole list as its viewer may see it: guests see a wish reserved, its owner never doesWith the linkadds, ticks, rewritesA guestreserves a wishDurable Objectone per listSQLite, sockets hibernateEvery guestsees it reservedThe ownernever sees by whoma socket eachEach change sends the whole list, as each viewer may see it.

House packages

9 of the 11 house packages, from npm, down to the compiler and linter settings.

Your team, perhaps?

I am looking for my next job. Write to me, or take the CV: a designed one, and a plain one for applicant tracking systems.