QuirePDF to Flashcards
What it does for you
Drop a PDF or notes and get study cards with page references, made locally with TF-IDF and rules, or with Claude if you add a key.

Screenshots



In more detail
Quire lets you drop in a PDF or your notes and get a deck of study flashcards, each one tagged with the page it came from. Making good flashcards by hand is slow, so most people just reread, which is the weaker way to study. And a lot of AI flashcard tools lose track of where a card came from, so you can't check it against the source.
Honest limits
Claude mode was never called against the live API. I never dragged a real PDF into a real browser, and the clicks in the review and edit dialogs were only checked through rendered screenshots. The heading and footer heuristics were tuned against synthetic tests, not a messy real textbook. It runs and passes 267 checks, and that's the honest claim.
How I built it
Claude Code wrote the pure core (cards.js) and a 244-assertion test file in an earlier session, then stalled before the UI with six tests failing. The finishing run on September 23 took about 20 minutes of wall clock. The first job was fixing those six red tests, and I wanted the core fixed, not the tests: page-marker overhead in the chunker, the merge tie-break, comma-only tag splitting, cloze edits filling the back of the card, list continuation indents, and verbs ending key phrases.
Then Claude built the UI as a dozen small modules (source, review, edit, study, export, settings), so no single write was big enough to get cut off by the flaky connection that day. The only outside dependency is pdf.js 3.11.174 from cdnjs, with the worker pinned. I directed the spec, the export targets, and the "local first, Claude optional" rule, and I checked every screen through headless Chrome screenshots.
What I learned
- A chunk budget has to include its own labels. The chunker split pages to fit 6,000 characters and then prepended
[[page N]], which pushed chunks over the limit. Reserving room for the marker before splitting fixed it. - When merging AI cards into someone's deck, "keep the higher quality duplicate" is the wrong rule, because a new Claude card could evict a card you already had. Existing cards now win ties, so a merge only ever adds.
- Whitespace cleanup can erase meaning. Collapsing every run of spaces also flattened the indent that marks a list item's continuation line. Collapsing only runs after a non-space character kept it.
- RAKE splits phrases only on stopwords, so "ease factor controls" came out as one term. A short list of common verbs as extra delimiters gave clean noun phrases without a part-of-speech tagger.
What carried forward
Quire exports CSV in the format my #28 Flashcards Lite (Cadence) imports, plus Anki TSV and JSON, so it feeds an earlier project directly. The local generator is the default, not a fallback, and the Claude path reuses the same card model, dedupe, and page references, the same local-first shape as #45 and #50. One coordination note: Quire was briefly also the app name of #36, the blog engine Codex built. We caught the clash when merging and renamed that one Colophon.
If I took it further
I'd feed a real, messy textbook PDF through it early and tune the heading and footer detection against that. Then I'd test Claude mode with a real key on a small document.
#049 Built with Claude Code September 23, 2026 267 automated checks