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
- 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
House packages
9 of the 11 house packages, from npm, down to the compiler and linter settings.
- @adrienlcp/i18nTranslates, and knows at compile time what each message asks for.0.3.0
- @adrienlcp/theme-preferenceKeeps the chosen theme from flashing, down to the phone’s toolbar.0.3.0
- @adrienlcp/reactThe context helpers every React app starts from.0.3.0
- @adrienlcp/react-ariaThe focus ring and class composition over react-aria-components.0.1.0
- @adrienlcp/stylesThe reset and shared styles every project starts from.0.5.0
- @adrienlcp/resultSays whether something worked, without throwing and without null.0.1.0
- @adrienlcp/safe-storageTakes the throw out of localStorage and returns a Result instead.0.1.0
- @adrienlcp/tsconfigThe compiler settings every project extends.0.1.0
- @adrienlcp/biome-configThe linter and formatter settings every project extends.0.1.0