Personal knowledge vault for AI, math, and CS reading. Papers, blog posts, and threads flow in from Readwise Reader via a Cloudflare Worker, get triaged by Claude into structured notes, and surface via topic-based dashboards.
Readwise Reader
│ webhook (reader.any_document.created)
▼
Cloudflare Worker ──verify secret──▶ GitHub Contents API
│
└─ writes:
• 00_Inbox/raw/{YYYY-MM-DD}.md (one bullet per item)
• 00_Inbox/raw/payloads/{rw-id}.json (full webhook payload)
You open Claude in this vault
│
▼
SessionStart hook → git pull
│
▼
/process-inbox # triage today's items into deep notes
│
└─ writes:
• 00_Inbox/{papers|blogs|threads|newsletters}/{date}.md
• 30_Knowledge/{papers|blogs|threads}/{slug}.md
• 30_Knowledge/topics/{topic}.md (MOCs)
• 30_Knowledge/authors/{author}.md
00_Inbox/raw/— Worker writes here; raw bullets + payload JSON.00_Inbox/{papers,blogs,threads,newsletters}/— Claude routes into here during triage.30_Knowledge/{papers,blogs,threads}/— deep notes, one per item.30_Knowledge/topics/— topic MOCs (cross-cutting maps of content).30_Knowledge/authors/— per-author indices.30_Knowledge/_MOCs/— dashboards (recent, deep-read queue, orphans, …).40_Archive/— long-term storage for items no longer active.50_Decisions/— design decisions about the vault itself.60_Visualizations/— generated HTML dashboards, slide decks, and React SPAs from/visualize. Single-file, work offline.90_Meta/worker/— Cloudflare Worker source.90_Meta/scripts/— utility scripts (snapshot, audit-topics, etc.).
See 90_Meta/worker/README.md for full Worker deployment. Quick version:
- Push this repo to a private GitHub repo named
reading-vault. - Generate a Readwise access token: https://readwise.io/access_token
- Generate a GitHub fine-grained PAT with Contents read/write scoped to this repo.
cd 90_Meta/worker && npm install && wrangler login- Set secrets:
wrangler secret put READWISE_WEBHOOK_SECRET wrangler secret put GITHUB_TOKEN wrangler secret put READWISE_TOKEN
- Edit
wrangler.tomland setGITHUB_OWNERto your GitHub username. wrangler deploy— note the Worker URL.- In Readwise, create a custom webhook pointing at the Worker URL. Subscribe to
reader.any_document.created. Copy thesecretReadwise generates and re-set theREADWISE_WEBHOOK_SECRETto match. - Test by saving a paper to Readwise Reader. The Worker should create a commit in this repo within seconds.
- Open Claude in the vault root:
cd /home/lukas/projects/reading-vault && claude - The
SessionStarthook willgit pullautomatically and surface any unprocessed inbox count. - Run
/process-inboxto triage what's accumulated. - Run
/visualizefor a global HTML dashboard, or/visualize {topic}for a topic-focused view. Pass--as=presentationfor slides or--as=reactfor a React SPA. Output lands in60_Visualizations/as a single self-contained HTML file. - Ask "what should I read next?" or "what do we know about flow matching?" for dashboard-style queries.
See CLAUDE.md for the full operating spec.