The build story
The dates are the least of it.
Somewhere in my family’s records is the story of a bomber pilot who flew a full tour of operations out of Lossiemouth — thirty-six runs over Berlin, the south of France, Italy — and came home with a DFC. In every genealogy tool I tried, that man is a name, two dates, and a line to his children. Granary started from the conviction that the story is the record, and the dates are just its index.
It’s a privacy-first family tree: Laravel and Vue, a D3 force-directed tree you can click through (highlight a person and everyone who isn’t their lineage fades away), and a Leaflet map of birthplaces that traces my own dataset’s arc — 190 people across eight generations, from Suffolk farm labourers through Prussian and Bavarian emigrants to Wellington, New Zealand.
Genealogy dates are feral
Real family records say things like ABT 1823,
4Q 1897,
or “circa 1950–52”, and most software either rejects them or sorts them as
garbage. Granary stores every date twice: the display column preserves exactly what the source
said, while a parser that understands GEDCOM qualifiers and British civil-registration
quarters derives a hidden sortable column. Uncertainty stays honest on screen; chronology
still works underneath. The same respect-the-source instinct runs through the schema —
partnerships are gender-neutral partner1/partner2, and children connect through a
pivot that handles half-siblings and adoptions without contortions.
Stories as first-class records
The oral histories came in as Word documents — decades of a relative’s memoir writing — and a custom parser splits them into per-person narrative sections, exports structured JSON, and imports them as typed story notes attached to individuals and families. Notes and sources are polymorphic, so a settlement certificate from 1765 and a war memoir attach through the same mechanism. Open a person and you get their paragraphs, not just their plumbing.
Private by architecture, not by policy
Family data is the most personal dataset there is, and the big genealogy platforms monetise it. Granary’s answer is structural: self-hosted on my own server, photos on my own disk, no analytics, no trackers, no third-party anything. Access is a single family password at the gate with a separate admin tier behind it. Nobody’s great-grandmother is training someone else’s model.
Honestly: in dev
Granary is the youngest project in the workshop and it shows its scaffolding — the test suite is thin, and the AI-assisted capture of spoken history (record an elderly relative, let the machine do the structuring) is designed but not yet wired in. The Peck family tree it holds is real, though, and growing — which is the only metric this one was ever built for.
Got a precious dataset that deserves software built around it, not the other way around? Here’s how we could work together.