nexus
A reading, notes, and AI workspace where highlights, notes, and chat citations resolve to the same addressable text.
Nexus is where I read. It ingests EPUBs, PDFs, web articles, YouTube videos, and podcast episodes, renders them in a pane-based reader, and answers questions about them with an LLM whose citations resolve back to the passage. It runs at nexus.nielseriknandal.com, ships an Android shell through GitHub releases, and captures pages with a Manifest V3 extension. It exists because my reading was scattered: highlights in one app, notes in another, chat context brittle and unshareable.
I built it twice. The first repo, nexus, ran from 2025-11-25 to 2025-12-05: FastAPI, Celery and Redis, Clerk auth, byte-offset highlights, pgvector search. Its README promised highlights that survive re-ingestion; the remap task was a stub I never wrote. Chat was never started. The repo ends in a two-day burst of spec commits, and six days later nexus-web began from an empty README. No code crossed over; auth, job queue, and anchor semantics all changed.
Three reversals define the second system. The founding constitution mandated browsers calling FastAPI directly; eleven days later a Next.js BFF stood in front of it, leaving one direct browser path — SSE, authenticated by 60-second single-use JWTs with a replay-prevention table. Background work started on Celery and Redis, as v1 had; in March I cut both for a Postgres job queue, removing an infrastructure dependency outright. And v1's byte offsets became Unicode codepoint ranges over canonical text: when the client's canonicalization disagrees with the server's, the reader disables highlighting rather than write a bad anchor. PDFs get a separate page-geometry anchor.
Chat is not a request. Sending a message creates a durable run the worker executes while the browser tails SSE and reconciles from stored state. A citation is an edge in one flat resource_edges table that replaced the per-feature link stores.
By git log on 2026-08-09: 1,571 commits since December 2025, 211 Alembic migrations, and 562 commits carrying Claude co-author trailers — I direct the build; agents write a large share of it.
The reading is no longer scattered. The operating is.