A collaborative Shona family tree with kinship-term logic, built for deployment on Railway.
# The Muwuyu Project
A shared, editable Shona family tree with a built-in kinship-term engine —
the classificatory system where there is no "aunt", "uncle" or "cousin", just
Baba, Tete, Sekuru, Mukoma and so on — plus totems, birth order, and a baobab
that grows roots down into the soil and branches up into the canopy.
The whole frontend is one self-contained file with no build step
(`public/index.html`). The server is Node/Express over Postgres.
## Credits
`public/baobab.webp` — the baobab standing behind the family — is derived from
a photograph supplied by the project owner, reduced to a greyscale alpha mask.
Replacing it is one file drop; see **The backdrop** in
docs/ARCHITECTURE.md.
## Storage
The tree lives in real Postgres tables — people, unions, partner links and
child links, with the "one set of parents" rule enforced by a primary key
rather than a hopeful check in JavaScript. See **[docs/ARCHITECTURE.md]
(docs/ARCHITECTURE.md)** for the schema, the operations API, the concurrency
model and the measured performance numbers.
Two relatives editing at the same time both keep their work: writes are small
named operations applied in one transaction, not a whole-tree overwrite.
```bash
npm start # applies schema migrations on boot
node scripts/migrate-data.js # inspect the old blob, write nothing
node scripts/migrate-data.js --apply # move it into the real tables
npm test # 165 tests; needs TEST_DATABASE_URL
```
## What "shared" means here
There is **no login** on the currently deployed site. Anyone who has the URL
can see and edit the whole tree. Personal settings — who you've picked as "you," which layout
orientation you prefer, which branches you've folded — stay in your own
browser (`localStorage`) and are never sent to the server. Everything
else (names, totems, relationships) is genuinely shared and public to
anyone with the link. Don't put sensitive personal information in it.
# …