# FamilyRoots Namibia
A family tree builder with a **configurable cultural-inheritance validation engine**
(seeded with Ovaherero eanda/oruzo rules) and a **targeted family messaging** feature.
## Run it
```bash
npm install
npm run dev
```
Open
localhost. That's it — no environment variables or accounts needed
for this version; everything is stored in your browser's localStorage.
## Data model
Follows the Fact/Relationship pattern from
`FamilyRoots_Africa_Master_Architecture.md` (Section 4) instead of flat
fields on Person:
- **`Person`** holds identity, a primary photo, a media gallery, and a
`facts: Fact[]` array — birth, death, occupation, biography, and every
cultural trait (eanda, oruzo, ...) are all facts, not separate columns.
- **`Fact`** has an open-ended `type` string (not a fixed enum), so new
kinds of facts — praise names, chieftaincy installations, initiation
ceremonies — are addable as data, never a schema change. Traits use the
convention `trait: ` (e.g. `trait:eanda`), so the same mechanism
that lets you add a new fact type also lets you add a new cultural
trait, with no special-casing anywhere in the code.
- **`Relationship`** is a first-class record between two people
(`parent-child` or `partnership`), with its own `facts[]` for things
like marriage date/type. This correctly models multiple marriages —
each is its own record, not a slot on a person — and replaces the old
`parents[]`/`spouses[]`/`children[]` arrays.
`lib/facts.ts` and `lib/relationships.ts` are the only places that know how
to read/derive from this shape (get a person's children, resolve a
union's mother/father, etc.) — components never touch `facts[]` or
`personIds` directly.
Note: localStorage keys were bumped to `:v2` for this migration, so
existing browser data from the previous flat-field version isn't read
back — you'll see the seed data fresh rather than a crash on load.
## What's actually implemented
- **Tree builder** — add father/mother/spouse/child/ …