How Rigsby was built
The machinery, honestly described. No keys, no credentials — just the shape of the thing.
Stack
Next.js App Router with TypeScript and Tailwind, deployed on Vercel with static generation and incremental revalidation. Neon Postgres with pgvector for retrieval. Drizzle ORM migrations. All AI calls live in one module per pipeline stage.
The corpus
Around 11,000 passages across 57 works. Public-domain texts come from Project Gutenberg — every ebook id machine-verified against its catalog before ingestion — chunked into 300–800 token passages with human-citable locators like “BOOK VIII ¶359–391”. The prophetic-Jewish lens draws on the Sefaria API with Sefaria refs as locators. Copyrighted thinkers are represented by curated concept notes: paraphrase, citable location, and brief quotations added by hand from licensed copies.
Each passage is embedded (1,024-dimension vectors) and indexed with HNSW for cosine retrieval, filtered per thinker so a lens only ever sees its own tradition's texts.
The three-stage pipeline
Draft: one model call per lens — never per panel. A lens draft cannot see the other lenses, which makes cross-lens synthesis structurally impossible rather than merely forbidden. The prompt carries the editorial rules as prohibitions, plus retrieved passages it must cite by locator.
Evaluate: a separate, cheaper model judges each section against the rules — synthesis, pastoring, editorializing, ventriloquism, unsourced claims, event misfit — with a deterministic lint pass for banned words running first, free. A failing section regenerates exactly once with its violations attached; a second failure flags it for human review. Nothing retries beyond that.
Verify: every citation is checked against the actual passage — the passage must exist, the locator must match, quoted phrases must appear verbatim (string comparison before any model is consulted), and a final model call asks whether the claim reflects the passage. Failures flag the lens.
Lens selection and human review
A selection pass proposes three to five lenses from the full bench with one-line justifications — it may return fewer rather than force a bad fit. An editor approves the selection before anything generates, reads every section with its evaluation record, and is the only party who can publish. Event summaries are treated as untrusted input end to end: text inside them is data to analyze, never instructions to follow.
Design tokens
The visual system was extracted from a live audit of an existing site's structural DNA — its palette discipline, hairline rules, pill affordances, and spacing rhythm — then shifted to an editorial register: warm paper, ink text, a single rust accent, Newsreader for the takes and Archivo for the chrome. Every value lives in one tokens file; components never hardcode a color or font.
Portraits
Thinker portraits start as public-domain source images (museum scans, pre-1930 photographs), logged with sources, restyled into one consistent copperplate-etching series in the site's ink color. A few carry subtle four-second engraving loops — parallax breathing and ink shimmer, no facial motion — which degrade to the static etching wherever motion is unavailable or a visitor prefers reduced motion.