Vibe code your own Readwise

Vibe code your own Readwise as URL capture, a reader view, and an inbox. $10–$12.99 a month is rent you can cancel after two days of saved articles.

  • getting-started
  • vibe-coding
  • scope

You can vibe code your own Readwise as a save box, a reader view, and an inbox you empty by hand. Readwise Reader is that product. The catalog line is “Save links now. Actually read them eventually.”

You pay $10–$12.99 a month for it. That is $120–$156 a year. The basic replacement is 2 days: paste a URL, wait for a readable copy, archive it when you finish.

I would ship this if I still rented a read-later app to park articles I already meant to open. It is marked Ambitious. The verdict on the card is “Fun side quest”.

Last time I wrote about building a Miro alternative. That was a teardown. This one is a regular backlog topic. The useful v1 is an inbox of pages you own. Ebook sync stays on the skip row.

What you need to vibe code your own Readwise

The Readwise Reader page splits the work into three rows.

The first row is the one you want these two days. Paste a URL. Get a document row back immediately. A background job fetches the page and fills title, author, and a readable body. You live in the inbox, the reader, and archive.

The second row is 1 week. Highlights with notes, tags, full-text search, and a weekly email of five unread picks. Do that after twenty articles have already sat in an inbox you trust.

The third row is 1 month and up. Mobile apps, ebook sync, text-to-speech. The table labels that row as the part you should skip.

If you tell an agent to “clone Readwise”, it aims at the third row. Copy the prompt, then pin it to the first one.

The card lists Document, Tag, Highlight, Digest. These two days you need Document. Tag, Highlight, and Digest wait a week.

A document is a URL you asked to keep, plus whatever the fetcher managed to extract. States are pending, extracted, and failed. Failed still works as a bookmark. The submitted URL stays on the row even when the page 404s.

How a Readwise alternative is put together

I am describing the catalog’s model here, not reverse-engineering Readwise. A read-later app is a private library of pages, a job that turns a URL into readable HTML, and a screen that shows that HTML without the original site’s chrome.

Your browser talks to one Astro app. Node.js plus Astro is the catalog default. Use TanStack Start if React is your weekday language. The capability line is Astro, D1, and Workers.

The app writes the document on the request. D1 holds the rows. A Worker, or any queue you already have, fetches the page after the save returns. Extraction never blocks the form. Email waits until the 1-week row, when you want five forgotten picks on Monday.

YOUR BROWSER Inbox, capture, reader login required ASTRO APP ON THE REQUEST Save, list, archive Never waits on the fetch D1 HOLDS THE ROWS Document, later Tag Submitted URL stays forever WORKER FETCHES THE PAGE Title, author, readable body Timeout, size cap, robots DIGEST EMAIL, WEEK 2 Five unread picks Transactional mail later
Save writes the row. The worker fills it. Mail waits until you have unread history.

Every query is scoped by owner. A guessed document id from another account returns nothing: no title, no URL, no 404 that confirms the slug. The reader view renders stored HTML you already sanitized. It does not fetch the live page on each open.

The guardrail on the card is the useful sentence: respect robots directives and store only content the user explicitly saved. Paste a URL and you asked for that page. A crawler that follows every outbound link is a different product.

Screens of a Readwise alternative

Three surfaces for v1. If the agent starts matching Readwise’s live UI, send it back.

The inbox is home. Newest first. Each row shows title or the raw host while extraction is still running, plus a state. Pending, extracted, failed. Archive and favorite sit on the row. Search can wait a week if the list is short.

WIREFRAME · INBOX SAVE What to vibe code first flaviocopes.com · extracted · 8 min bootcamp.dev pending · fetching the page Paywalled essay failed · retry · still a bookmark
Home is the inbox. Failed rows stay on the list with a retry.

The capture screen is a URL field and a save button. A bookmarklet can fill that field later. Title and author start empty, then the job writes them. If the canonical URL already exists, warn and offer open-existing or save-anyway. Do not merge in silence.

WIREFRAME · CAPTURE Paste a URL flaviocopes.com/read-later/?utm=x Already saved Oct 12 Same article, tracking stripped OPEN EXISTING SAVE ANYWAY
Match on the canonical URL. Keep the exact string the person pasted.

The reader is the reason this is not a bookmark list. Title, author, reading time, a source link, and the stored body. Typography controls can be three sizes. Archive and favorite sit at the top. Highlights wait until the body has been stable for a week of real reading.

WIREFRAME · READER FAVE DONE What to vibe code first Flavio Copes · 8 min · source Stored HTML. No live refetch. Highlights wait a week.
The reader shows what you stored. Opening it does not hit the original site again.

How does Readwise work as a daily loop

The loop is save, wait, read, archive. Capture has to feel instant. Reading happens later, often on a different evening.

You paste https://flaviocopes.com/read-later/?utm_source=tweet. The app stores that exact string. It also stores a canonical form with the tracking query stripped. The inbox row appears with the host as a temporary title. A Worker fetches the page, respects robots, caps size and time, and writes title, author, and a readable body onto the same row.

If the fetch dies, the row stays. You still have the URL, an editable title, a reason, and retry. Retry refreshes content. It does not reset archive state and it does not create a second document.

PASTE THE URL Exact string plus canonical ROW LANDS PENDING Inbox shows the host now WORKER FILLS OR FAILS Body, or a titled bookmark OPEN THE READER Stored HTML, source link Archive when you finish Unread stays in the inbox
The 2-day v1 is paste, extract, read, archive. Highlights stay off this path.

The first mini-prompt on the page is “Save the link now, parse it later”. The save request creates the row and queues the job. The person can close the tab.

The second mini-prompt is the dedupe. Strip utm_*, fbclid, fragments, default ports, trailing slashes. Match on that. Some hosts keep a real video id in the query string, so keep a small per-domain exception list. Save-anyway creates a labeled duplicate when you want two copies.

Who a Readwise alternative is for

The audience on the page is one heavy reader saving articles, videos, and PDFs. These two days, stay on articles. A video URL can sit as a bookmark with a title. A PDF reader is a different weekend.

The goal is capture that does not interrupt the thing you were already doing, then a calm page you open later. Inbox holds the pile. Archive means you finished. Favorite is the one you will quote.

If you need Kindle sync, a listening voice, or a phone app that works on the train, keep paying. The site puts that rebuild at a month on purpose.

The same v1 also replaces Instapaper, Pocket, and Matter if what you wanted was “save this, read it later, on a site I host”.

What not to build in a Readwise clone

Leave out ebook sync, social discovery, text-to-speech, and public sharing.

The non-goal on the page already names those. You are replacing the inbox you currently rent.

Ebook sync is the trap. A Kindle library, highlights from every retailer, and a graph of every book you ever marked is a different company. Paste the skip row when the agent starts an “import from Kindle” button.

Highlights belong on the 1-week row, and they are picky. Store the selected text plus a bit of surrounding context. Offsets die the first time the author edits a paragraph. If the passage vanishes on a re-fetch, keep the highlight in an orphaned list. Do not paint the wrong sentence.

Full-text search reads title, author, saved body, and later notes. It never fetches a live page during a query.

If the agent starts a social feed or a public profile of your reading, stop it and paste the non-goal again.

Readwise alternative or a bookmark manager

A read-later app stores the article. A bookmark manager stores the URL.

Raindrop.io is $2.33–$3 a month, about 3 hours for links, tags, and search. The bookmark manager guide is that walk. Raindrop’s skip list already says do not build a full reader. If your pain is “where did I put that link”, start there.

A feed you fetch on a schedule is Feedly, $7–$12 a month, about 8 hours for subscribe, fetch, and unread. That pile arrives on its own. This pile arrives because you pasted it.

A visual library of images and short notes is mymind, $4.99–$12.99 a month, about 12 hours. That card searches captions and on-device OCR. Do not bolt image memory onto Laterish.

The first-project post still points at a tonight card if you have not shipped a small tool yet.

The 1-week row, after a real inbox

Use the inbox for two weeks as the real pile, not as a demo. Then look at the second estimate.

Tags on the document. Full-text search over the stored body. Highlights that re-anchor after a retry. A weekly email of five unread items you forgot.

The digest is the fourth mini-prompt. Candidates are unread and unarchived, and they have not appeared in a recent digest. Mix domains. Record what you sent so next Monday is a different five. Durable links open by document id, because the original URL may already be dead.

The catalog says 1 week for that row. Skip the month-long mobile app and the ebook pipeline.

The scope post is the same three-row table if you want the habit, not just this card. The prompt post is the extra line that says do not import Kindle.

Host it, save a real article, cancel

This one wants Astro, D1, and Workers, because that is the stack on the card. There is a table for documents, so take a backup before you delete the paid account.

Put the inbox on a hostname you already own, later.flaviocopes.com. Paste three URLs you already meant to read. Watch one extract. Watch one fail and still sit there. Open the extracted one in the reader. Archive it. Confirm the inbox, the stored body, and the source link still agree.

If you miss highlights or a Monday email, add them from the 1-week row.

Then cancel Readwise Reader, or Instapaper, or Pocket, whichever one you pay for the pile.

Start now

Go to Build your own Readwise Reader. Copy the Astro prompt, or TanStack Start if that is what you write.

Tell the agent the first estimate only: URL capture, reader view, archive. Two days.

Save one real article this afternoon. Open it tonight in your own reader.

Keep reading

Read all articles →