← All projects

06 · TypeScript · Chrome extension

AcademicReader

A Chrome extension that opens academic PDFs in a custom viewer, flags confusing text with an LLM, and gives every highlight — and the document as a whole — its own persistent chat.

Personal project
AcademicReader interface sketch
Interface sketch, not a live capture. I built the extension and tried loading its viewer in a headless browser, but it needs the real Chrome-extension context (storage, messaging) to render — and the README is explicit that nothing works until a provider API key is configured, so even a working capture would show an empty shell.

Everything runs inside the extension itself — no server, no separate process (a locally authenticated Codex CLI is the one opt-in exception). Storage is IndexedDB / chrome.storage.local, and it talks directly to whichever provider you configure: Anthropic, Google Gemini, DeepSeek, OpenAI, or Codex CLI logged in with a ChatGPT account instead of a paid API key.

Three ways to create a highlight

Auto-scan runs when you open a PDF, flagging confusing spans automatically; a repeat occurrence of the same flagged phrase elsewhere in the document shares the same highlight and the same conversation, rather than starting a new one. Region-select lets you drag a box over a figure or table for an explanation. Select text, ask AI highlights only the exact passage you chose, independent of whatever auto-scan did or didn't flag. A separate global PDF chat is scoped to the whole document — for questions like "what's the main contribution of this paper?" that don't hang off one passage — and is given the document's full extracted text (capped around 40,000 characters) rather than just local context.

Where it auto-redirects vs. needs a click

rules.json only auto-redirects PDF URLs it can match by a reliable, stable pattern: arXiv, ACM, OpenReview, ACL Anthology, Springer, and PMC/NCBI. Everything else on the granted-domain list — IEEE, ScienceDirect, Nature, JSTOR, ResearchGate, SSRN, and others — has host permission but no auto-redirect rule yet, so you open the PDF and click the toolbar icon. For anything not on that list at all, a popup field accepts any PDF URL directly and requests permission for that origin at runtime, a one-time browser prompt.

Data

Documents, highlights, and chat history live in the browser profile's IndexedDB for the extension — nothing is synced or sent anywhere except the direct calls to your configured LLM provider. Uninstalling the extension, or clearing its site data, deletes this history.