What Canopticon actually is.
Not a separate doc that goes stale in a repo nobody opens — this page. /method explains why a claim here can be trusted. This explains the shape of the whole thing: what content types exist and why, what's really built versus still open, and what runs on its own between visits.
The one-sentence version
Canopticon reads research documents into a typed graph of facts, grows a citable public record from that graph automatically, drafts signed readings on top of it, and the operator approves what publishes. The operator approves; the operator never authors. Nobody writes a page by hand — pages grow as documents are read, and the same graph fans out into every format below without being regenerated from scratch each time.
The content types
Everything public is one of five kinds of thing. This is the part that's easiest to lose track of session to session — so it's written down here, not just in a design doc.
One page per person, company, event, or theme — /s/:slug. Two
modes: neutral (the facts and their receipts, disputed material shown gray) and
signed (the operator's reading — the same facts, re-sequenced under a thesis, with
a mandatory box of what complicates it). This is the spine everything else hangs off.
Every arrangement is both a section embedded inside a Record and its own standalone, independently-citable page with its own schema.org markup. That's deliberate, for GEO: a fine-grained URL with specific structured data out-cites a subject page that merely has the same content as one section among several. They're not meant to be found by clicking through site nav — they're meant to be found by search engines and AI answer engines, and reached from the Record they belong to.
| Type | What it shows | Status |
|---|---|---|
| Definition /d/:slug |
The subject's highest-confidence neutral fact, framed as a definition. | live |
| Timeline /t/:slug |
Dated events involving the subject, in order. Embedded richly on the File. | live |
| Entity profile /profile/:slug |
Typed attributes and relationships. Embedded richly on the File. | live |
| Ownership / network map /n/:slug |
The relationship graph radiating out from the subject. Embedded richly on the File. | live |
| Who's-who roster /w/:slug |
The named people tied to this subject and their roles. | live · simple rules |
| Comparison matrix /c/:slug |
Side-by-side claims. The graph isn't tagged with comparison-shaped data yet — this always renders its honest empty state. | scaffold only |
| FAQ / Q&A hub /f/:slug |
Facts shaped like questions and answers about the subject. | live · simple rules |
| Statistics roundup /stat/:slug |
The subject's numeric facts, gathered in one place. | live · simple rules |
| Ledger of flows /l/:slug |
Money in, money out — where the graph has it. | live · simple rules |
| Mechanism explainer /m/:slug |
A causal chain of edges — how one thing led to another. | live · simple rules |
| Document-of-record /library/:slug |
The raw source itself, with a provenance overlay showing what it fed the record. | live |
| Claim-and-source table /ct/:slug |
Every attributed assertion about the subject, with who said it and against what. Embedded richly on the File. | live |
A signed reading wears one of seven intents as a badge — its epistemic stance, not a nav category:
Every signed reading renders as tabs: Thread and Card are pure template + query — no LLM call, instant, straight from the thesis and the highest-ranked stored quotes. Video script and chapter outline need real argumentative sequencing, so those get one LLM pass at the moment you sign, persisted from then on — every later view is still instant. Nothing here is "generating your script" on click; either it's already rendered, or it was rendered once and stored.
Not where you generate content — faces already did that. Studio turns a rendered face into a downloadable asset. Shipped: card / thread / carousel → PNG, newsletter → email-safe HTML, long-form → Markdown. Not yet: voice recording + cloning, video assembly (Flux stills → Wan animation → MiniMax voiceover), a documentary stage, a two-voice podcast stage, and a distribution log — all real, all deliberately deferred until there's a working voice profile to build them on.
The firewall, briefly
A fact only exists on this site if it's a word-for-word quote from a document actually stored here, checked mechanically. An attributed claim (someone said X) is never silently stated as settled fact. This is the one rule everything else is built around — see /method for the full mechanics.
What runs on its own vs. what you drive
One thing runs unattended, on a schedule. Everything that grows the record — researching a subject, drafting a reading, producing a video — starts from you clicking something. There used to be more running automatically (a sweep that picked a thin subject and researched it every few hours, plus a pass that auto-published research briefs from that); both are retired — the sweep decided what to work on without you, and the auto-published briefs went live with no one reading them first. Growth is a click now, on purpose.
After documents come in, six steps run in the background to turn raw extraction into a usable record: entity resolution, event dedup, scoring contested evidence, surfacing themes and cross-document patterns, seeding pages, and generating comprehensive profiles. One step runs per tick — chaining them all at once is exactly what silently broke this for a while; splitting it up is what fixed it. Drafting a signed reading isn't one of these steps — that's an action you take on a subject's page ("Draft a reading"), not something the corpus decides on its own.
The homepage's "Today" line is the honest status check: how many sources got banked and duplicates merged today, so you're never left wondering if the settle pipeline is actually running.
What you can do
A drafted reading waits under "Awaiting your signature" until you read it and sign or discard it. The system writes; you're the only one who publishes.
On any subject page, "Expand this file" fires a real search → fetch → verbatim-extract cycle on that one subject, right now.
On a search that comes up empty, an open thread/finding, or a watched subject, "Research this" / "Research now" searches → fetches → banks sources, then drafts a brief AND flags what it couldn't cover. If it flagged gaps, a second pass — picked up within a couple minutes, not chained into the same request — runs targeted follow-up searches and re-writes the brief over the combined sources. Either way the draft lands unpublished — readable only from its Library row, via a review screen with Publish/Discard. Nothing enters the record or goes public until you publish it.
One button on the homepage's status line, for when you want to nudge several thin files at once instead of one at a time.
What's real vs. still open
Said plainly, so it can be checked rather than assumed:
- All twelve arrangement URLs (one, Comparison, is scaffold-only — see the table above)
- Template+query faces (thread, card, carousel) — instant, no LLM
- LLM-seasoned faces (video script, chapter outline) — one pass on signing, then instant
- Semantic search (
/search) - The citation tracker (
/citations, operator-only) - Record-building on click — search → fetch → extract, one subject at a time
- Studio Stage A — card/thread/carousel → PNG, newsletter, long-form export
- Comparison arrangement's real query logic (renders its honest empty state today)
- Studio Stage B–F — voice recording/cloning, video assembly, documentary, podcast, distribution log
- Concurrent extraction (Cloudflare Queues + Durable Objects) — parked on account setup
- The frontier-model tier — one line in the router, saved for near launch
- "Ask the corpus" as a conversational surface — shape not yet decided
What it costs
None of this is free: Brave Search calls and Workers AI inference both cost real money, metered. Growth is click-triggered now specifically so that spend only happens when you ask for it — one candidate per settle step in the background, bulk-expand capped at 3 per click, on purpose.