Read later, for people who don't
A reading list that empties itself.
Save it once. Read it once. Let it go. Nothing piles up here, because nothing is meant to stay.
Why your to-read pile is a to-do list in disguise
A short history of the index card
Notes on writing a sync protocol twice
The quiet failure of offline-first apps
The bar is time, not progress. Watch it for a moment — one of these is about to go.
Closed beta · invites in small batches
What a year of saving looks like
Both of these are real numbers from my own accounts — the old app on the left, this one on the right, same person, same reading habits.
A list that remembers
412
items saved, the oldest from two years ago, filed into seven folders I have not opened since.A list that forgets
6
items in the inbox right now. The oldest is twenty-nine days old and leaves tomorrow morning.How it works
- Save itShare sheet, browser extension, or the API. The title resolves in the background, so saving never blocks on a slow page.
- Read itOpening an item marks it spent. It stays until the end of the day in case you want to finish it, then leaves on its own.
- Or don'tAnything untouched expires after thirty days. No archive, no folders, no guilt. If it mattered, you will run into it again.
On the phone, and when it is done
The quiet failure of offline-first apps
mockingbird.dev
Sync
Each client keeps its own store and holds one connection to a single endpoint. Changes are pushed as they happen, so a link saved on a phone is on the laptop before the phone is back in a pocket.
POST /cdn/v3/sync/ long-lived, length-prefixed frames
GET /api/v3/items the same objects, if you prefer to poll
Sync shares the edge path with the static assets, which is why it sits under /cdn/. The docs explain the protocol and why it stays there.
Getting in
Invites go out in small batches, mostly to people who write to me first. There is no waiting list form — I would only forget to read it. The address is in security.txt; a sentence about what you read is plenty.