The library and the daily review fit in one sitting: a local database of quotes with their source, notes and tags, a spaced-repetition picker, and a page or email that shows a handful each morning. Getting highlights in is where the weekend goes. Amazon offers no public sync, so a DIY version reads the My Clippings.txt file from the device or scrapes Amazon's notebook page, which breaks when Amazon changes it, and every other source needs its own importer. Mobile capture and Reader's article, PDF and feed handling are not part of a one-prompt build.
Before you buildReadwise Lite is the cheapest way to keep automatic Kindle sync. If Kindle highlights are all you use it for, try Obsidian's Kindle plugin first: it's free and writes them into your notes.
Build me a local highlights library to replace Readwise. Requirements:
- Node.js 22 + TypeScript: a Fastify server with server-rendered pages (Eta) and a little vanilla
JS. `npm start` serves http://127.0.0.1:4900.
- Storage: better-sqlite3 in ./data/highlights.db with sources (title, author, kind, url),
highlights (text, note, location, added date, content hash), tags and a review log. A unique index
on the content hash makes importing the same file twice harmless.
- Importers as a CLI, `npm run import -- <type> <file>`: Kindle `My Clippings.txt` (split on the
`==========` lines, read the "Your Highlight on page N | Location N-N | Added on" header, keep
notes, skip bookmarks), plain text copied from Apple Books, a CSV, and Markdown where every
blockquote is one highlight.
- Library page: search with SQLite FTS5, filter by source, tag and date, edit a note, add tags,
favourite or delete a highlight.
- Daily review: pick 7 highlights per day with an SM-2 style scheduler ("keep" lengthens the
interval, "again" shortens it, "discard" removes the highlight). Show them at /review and email
them through nodemailer SMTP from .env at REVIEW_TIME.
- Export: all highlights as Markdown, one file per source, into ./export/, plus a CSV with every
column.
- Tests: Vitest cases for the clippings parser using a real-format sample with duplicate entries and
a highlight that spans two lines.
- Single user. No accounts, no telemetry, local-first. The only outbound call is your SMTP server.
- Out of scope: pulling from Amazon's cloud or Instapaper accounts, a browser extension, mobile
apps, an article or PDF reader.
- README: how to copy `My Clippings.txt` off the Kindle over USB, how to copy notes out of Apple
Books, and a warning that the Kindle file format varies by firmware.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Readwise.
Add a Hypothesis importer to the highlights library in this folder. Requirements: - A command `npm run import -- hypothesis` reads HYPOTHESIS_TOKEN and HYPOTHESIS_USER from .env and pages through the search API at https://api.hypothes.is/api/search. - Each annotation becomes a highlight: the quoted text, your comment as the note, the page URL and title as the source, and its tags. - Use the annotation id in the content hash so reruns only add new or changed annotations. - Print how many were added, updated and skipped. - Update the README.
Add a bookmarklet capture to the highlights library in this folder. Requirements: - A bookmarklet on /bookmarklet posts the selected text, page title and URL to /api/capture with a token from .env, and shows a small toast on success or failure. - The route accepts cross-origin requests only with the token header, and rate-limits to 30 requests a minute. - Duplicates return the existing highlight instead of creating a new one. - Update the README, including that the server must be reachable from the browser (localhost works on the same machine).
Add an Anki export to the highlights library in this folder. Requirements: - A button on the library page exports the filtered highlights as a tab-separated file that Anki's text import accepts, with the quote on the front, source and note on the back, and tags carried over. - A "cloze" option wraps a chosen word or phrase for fill-in-the-blank cards. - Remember which highlights were already exported and skip them next time. - Update the README with the Anki import steps.
Readwise keeps working for years without upkeep: highlights from the places you already read arrive on their own, and the daily review turns them into a habit. People pay for the plumbing staying fixed when a source changes, and for not maintaining importers themselves.
Estimate · Runs on your machine. The daily email needs an SMTP account, and free tiers cover one person's volume. The build is token usage on your agent plan.
Checked 2026-10-19 against Readwise's docs: 1, 2, 3, 4, 5, 6
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Lite | — | $5.59 | Daily Review by email and in the app, browsing and searching the whole highlight library, and syncing new highlights from every source. |
| Full (Readwise) | $12.99 | $9.99 | Everything in Lite plus tags and notes, export of highlights to Notion, Obsidian and more, the Reader reading app, early access to new features and a price locked in for life. |
No free plan: everyone gets a 30-day trial, and referring friends extends it by 30 days each.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Automatic sync from Kindle, Apple Books, Instapaper and web highlighters, Reader, the read-it-later app, with its highlights flowing straight into the library.
About $5.59 a month on the Lite plan, $67.08 a year (checked 2026-10-19).
Automatic sync from Kindle, Apple Books, Instapaper and web highlighters; Reader, the read-it-later app, with its highlights flowing straight into the library; The iOS app for reviewing and capturing on the go; Ready-made exports to Notion, Obsidian, Evernote and Apple Notes; Importers that someone else repairs when Amazon or an app changes its format. If any of those matter to you, keep paying.
Yes: Obsidian Kindle Plugin (open source), Karakeep (open source), Linkwarden (open source).