LIVE IN PRODUCTION
The Anomaly Network
A public record of first-hand accounts of things people could not explain, with an engine that finds the connections between them and says exactly why it made each one. Built and operated solo, live with real users.
43,684
accounts in the searchable corpus
9 of 10
documented mass sightings reconstructed blind
20% to 100%
retrieval pool recall after the fix
4,869
individually published, indexed pages
Four decisions, and what backs them
Each of these is a place where the obvious approach was measured and found wanting.
Re-ranking cannot promote what retrieval never returned
Matching a new account against the archive was semantic recall plus a re-ranker. Measured on 95 hand-labelled pairs, that candidate pool contained a genuine neighbour only 20% of the time, and no weight mix moved the number. The fix was not better ranking, it was a second retrieval path: a structural pool by region, year and rare characteristic, unioned with the semantic one before scoring.
Pool recall went from 20% to 100% on the same labelled pairs. The scoring weights were left untouched, because tuning had already shown them sitting on the flat part of the curve. Diagnosing which stage was actually broken was the whole job.
Twenty-five copies of one news story are not twenty-five witnesses
Corroboration is the product, so inflated corroboration is the failure mode. Every cluster of accounts is scored for wording independence: one minus the largest vocabulary overlap between any two accounts in it. Near 1, people described the same thing in their own words. Low, at least two accounts substantially repeat each other, which usually means a shared source rather than a shared experience.
The measure discounts evidential weight rather than silently deduplicating, so a contaminated cluster still appears and is visibly marked as contaminated. It is published as a standalone tool and is currently being run as a preregistered experiment with a moderated community.
A blind test the engine could have failed
Ten famous, historically documented mass sightings were withheld from the detector entirely. The detector was given only unlabelled accounts and asked to find same-night geographic bursts, scoring each on witnesses, place diversity, wording independence and agreement on the modal characteristic.
It reconstructed 9 of the 10 without ever being told they existed. The tenth is reported as a miss, along with why: no burst that date and place. The published validation table is generated from the data by script, never typed by hand.
A tool whose job is to prove the site wrong
Every public claim the site makes was turned into a mechanical test, with blunt verdicts: HOLDS, QUALIFIED, FALSE, UNTESTED. It runs against the live system, not a fixture.
It found three claims that were untrue as published and they were fixed rather than reworded: a validation table that had drifted after a vocabulary rebuild, a category page padded to 92 accounts by a mis-scoped pattern whose honest count was zero, and a security claim that was simply not implemented. The padding fix was itself wrong on the first attempt and that was caught by re-reading what the pattern actually matched.
What it runs on
Next.js App Router on Cloud Run
Server-rendered, behind Firebase Hosting. Static account pages, dynamic live pages, incremental revalidation where freshness matters.
Firestore at request-path discipline
Filters pushed into the query rather than filtering in memory, module-scope caches with TTLs, atomic counter increments instead of read-modify-write, and sharded documents for anything written per page view.
A nightly ledger that writes itself
A scheduled job summarises each night against the archival baseline, cross-references public launch, meteor, seismic and astronomical records, and publishes one permanent page. Most of them say quiet, which is the point.
Structured data end to end
Canonical URLs, unique titles and descriptions, JSON-LD on every route, and schema.org Dataset markup with a DOI so the published extract is discoverable as data rather than as a web page.
The work is checkable
The derived layer is published under CC BY 4.0 with a DOI, on Zenodo, GitHub, Kaggle and Hugging Face: every account coded for which of 63 recurring characteristics it contains, every characteristic scored for rarity, and 263 same-night clusters scored for wording independence and cross-referenced against public fireball, seismic and astronomical records.
The account narratives are deliberately not redistributed. They belong to the archives that collected them and to the people who wrote them, so every row carries its source and the id it holds there instead.
What it does not claim
- The site never says what an experience was. It says who else described the same thing and exactly why those accounts were put together, with the shared characteristic and its rarity attached to every match.
- Characteristics are matched by curated patterns rather than a model. That makes every match explainable and every miss silent, which is a real limitation and is stated wherever the numbers are published.
- The seed corpus is two public archives, one about lights in the sky and one about something in the woods. Several categories the site is organised around hold nothing yet, and those pages say so plainly instead of being filled with anything.
Built end to end, and measured against itself
Data pipeline, retrieval engine, production web application, deployment, moderation, SEO and the published dataset. If you want systems whose claims come with the evidence attached, that is the work.