§1The problem
Archive records (civil certificates, parish books) are thousands of handwritten pages, hard to read and to cross-reference. There was no way to turn them into checked, navigable facts, each linked to its source image.
§2What I built
- Web appFamily tree, people pages, a map of places and a review area (switched on only when needed).
- ConverterStaged command-line pipeline: extract with AI, synthesise, build a data package, generate the cited media and import into the database with an atomic swap and backup.
- Research workflowStep-by-step instructions that guide an AI agent through research in old records (Brazil, Portugal and Spain): interview, a folder per family, finding and downloading sources, index, page selection, double blind reading and reconciliation, group analysis and reports ready for the app.
- Quality rulesEvery fact has a source (folder and image), certainty seals (documented, probable, hypothesis), namesakes linked only with two agreeing points, and living people only with what the user provides.
§3The hard parts
5 entries- 01
Double blind reading
Two independent AI readings of the same page, followed by a reconciliation, to reduce handwriting reading errors.
- 02
Parallel extraction pipeline
With a derived data package that is reproducible from partial material and accepted reviews.
- 03
Reconciling repeated people
And rules to check dates and kinship.
- 04
Map and images at scale
MapLibre, and optimised images of only the cited pages, out of a large image collection.
- 05
Safe import
Atomic database swap, never overwriting without authorisation.
§4Result
- pages indexed
- ~2,300
- pages read twice, blind
- 1,027
- generations in the tree
- 10
- oldest record
- 1651
In use since October 2026, one family per instance. In the first case: ~2,300 pages indexed, 1,027 pages with double blind reading, and a tree of up to 10 generations, with records going back to 1651 and the oldest ancestor born in 1663.
§5Stack
- Next.js 16
- React 19
- TypeScript 7
- Tailwind 4
- SQLite (better-sqlite3)
- MapLibre GL
- LLM via command-line agent (OAuth)
- Python and TypeScript pipeline scripts
- Own design system
- pm2
- Tailscale