{"_id":"@derrickburns/genealogy-flow","name":"@derrickburns/genealogy-flow","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@derrickburns/genealogy-flow","version":"0.1.0","description":"GEDCOM particle-flow animation viewer plus offline tooling for parsing, geocoding, biography, and migration analysis.","type":"module","license":"MIT","homepage":"https://github.com/derrickburns/genealogy-flow","repository":{"type":"git","url":"git+https://github.com/derrickburns/genealogy-flow.git"},"bugs":{"url":"https://github.com/derrickburns/genealogy-flow/issues"},"engines":{"node":">=20"},"bin":{"parse-gedcom":"dist/bin/parse-gedcom.js","build-gazetteer":"dist/bin/build-gazetteer.js","geocode":"dist/bin/geocode.js","build-timeline":"dist/bin/build-timeline.js","migrations":"dist/bin/migrations.js","summarize-gedcom":"dist/bin/summarize.js","biographer":"dist/bin/biographer.js","audience":"dist/bin/audience.js"},"scripts":{"parse-gedcom":"tsx src/bin/parse-gedcom.ts","build-gazetteer":"tsx src/bin/build-gazetteer.ts","geocode":"tsx src/bin/geocode.ts","build-timeline":"tsx src/bin/build-timeline.ts","migrations":"tsx src/bin/migrations.ts","summarize-gedcom":"tsx src/bin/summarize.ts","biographer":"tsx src/bin/biographer.ts","audience":"tsx src/bin/audience.ts","typecheck":"tsc --noEmit","build":"rm -rf dist && tsc -p tsconfig.build.json && node scripts/finalize-bins.mjs","prepublishOnly":"pnpm run build"},"dependencies":{"@anthropic-ai/sdk":"^0.91.1","adm-zip":"^0.5.16"},"devDependencies":{"@types/adm-zip":"^0.5.7","@types/node":"^22.10.0","tsx":"^4.19.2","typescript":"^5.7.2"},"publishConfig":{"access":"public"},"gitHead":"5ac14108203a0176b139204b80da0e2c9ba343e6","_id":"@derrickburns/genealogy-flow@0.1.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-F5kHeEmcgt3DgnqKwOdb88+n/QPxHzgSAa994Z6ulCfsLawJ6TSxvp27MdKVW8UVSCo1diwxcwbZmaaQ25ASkQ==","shasum":"c2c39f7787fd6bdff10f8b545f43483028a1418c","tarball":"https://registry.npmjs.org/@derrickburns/genealogy-flow/-/genealogy-flow-0.1.0.tgz","fileCount":14,"unpackedSize":83598,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCh57bGDrGdY8znCl7mfsjCsr4+L85Hs23k/X/CR7MgfQIgaHZfVJN4icwWJ/VKbDUEK42fglpdkM49ffEI2H3d2dc="}]},"_npmUser":{"name":"derrickburns","email":"derrickrburns@gmail.com"},"directories":{},"maintainers":[{"name":"derrickburns","email":"derrickrburns@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/genealogy-flow_0.1.0_1777363149934_0.43309951544382375"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-28T07:59:09.628Z","0.1.0":"2026-04-28T07:59:10.152Z","modified":"2026-04-28T07:59:10.390Z"},"maintainers":[{"name":"derrickburns","email":"derrickrburns@gmail.com"}],"description":"GEDCOM particle-flow animation viewer plus offline tooling for parsing, geocoding, biography, and migration analysis.","homepage":"https://github.com/derrickburns/genealogy-flow","repository":{"type":"git","url":"git+https://github.com/derrickburns/genealogy-flow.git"},"bugs":{"url":"https://github.com/derrickburns/genealogy-flow/issues"},"license":"MIT","readme":"# genealogy-flow\n\nBrowser-based GEDCOM particle-flow animation viewer plus offline TypeScript\ntooling for parsing, geocoding, biography generation, and migration analysis.\n\n## Viewer\n\n`index.html` is a single-file browser app. No build step. Three ways to use it:\n\n1. **Hosted**: open https://derrickburns.github.io/genealogy-flow/. Drop your\n   GEDCOM. The file never leaves your browser.\n2. **Local**: clone the repo and open `index.html` directly.\n3. **Self-host**: copy `index.html` to any static host.\n\nGitHub Pages is wired up via `.github/workflows/pages.yml` and redeploys\nautomatically on every push to `main` that touches `index.html`. Enable it\nonce under repo Settings -> Pages -> Source: GitHub Actions.\n\n## Tools\n\nSeven offline CLIs published as `@derrickburns/genealogy-flow`.\n\n### Use (no clone)\n\n```sh\nnpx @derrickburns/genealogy-flow parse-gedcom my.ged individuals.json\nnpx @derrickburns/genealogy-flow biographer my.ged --mode standard\n```\n\nOr install globally:\n\n```sh\nnpm i -g @derrickburns/genealogy-flow\nparse-gedcom my.ged individuals.json\n```\n\n### Develop\n\n```sh\npnpm install\npnpm parse-gedcom my.ged individuals.json\n```\n\n| Command                                    | Purpose                                      |\n| ------------------------------------------ | -------------------------------------------- |\n| `pnpm parse-gedcom <ged> <out.json>`       | Per-individual dated location events.        |\n| `pnpm build-gazetteer [minPop=1000]`       | GeoNames -> compact `gazetteer.json`.        |\n| `pnpm geocode <ind.json> <places.json>`    | Resolve place strings -> lat/lon/level.      |\n| `pnpm build-timeline <ind> <pl> <out>`     | Pack individuals + places into timeline JSON.|\n| `pnpm migrations <ged> [--out X]`          | Classify moves against historical patterns.  |\n| `pnpm summarize-gedcom <ged>`              | 1-3 sentence Claude summaries (cached).      |\n| `pnpm biographer <ged> [--mode ...]`       | Source-cited biographical prose.             |\n| `pnpm audience <ged> [--living-only]`      | Rank individuals by ancestor coverage.       |\n\n`summarize-gedcom` and `biographer` require `ANTHROPIC_API_KEY`. They use\nprompt caching and resume-safe JSON sidecars (existing entries are kept;\nSIGINT persists progress).\n\n### Gazetteer source data\n\n`build-gazetteer` and `geocode` need GeoNames dumps in the project root.\nFetch them with:\n\n```sh\n./download_geonames.sh\n```\n\nFiles (`cities500.zip`, `US.zip`, `admin1.txt`, `countryInfo.txt`) are\ngitignored.\n\n### End-to-end\n\n```sh\n./download_geonames.sh\npnpm build-gazetteer\npnpm parse-gedcom my.ged individuals.json\npnpm geocode individuals.json places.json\npnpm build-timeline individuals.json places.json timeline.json\npnpm migrations my.ged\npnpm biographer my.ged --mode standard\n```\n\n### Picking the audience\n\n`pnpm audience my.ged --top 50 --living-only` ranks individuals by\nancestor coverage. For each candidate it walks up to N generations\n(default 6) and computes:\n\n- **Score** = Σ over ancestors of `(1 / 2^gen) × richness(ancestor)`\n  where richness counts dated events plus source citations.\n- **PCI** (Pedigree Completeness Index) = ancestors found / 2^N expected.\n\n`--living-only` keeps individuals with no death year and a birth year\nwithin 110 years of `--as-of` (default current year). `--leaves-only`\nkeeps individuals with no recorded marriages. `--format csv|json|table`\ncontrols output.\n\nThe top of the list is whom this GEDCOM is most \"about\" — the people\nwhose direct ancestor chain is most thoroughly documented. Distribute\nthe viewer URL to them.\n\n## Notes\n\n- TypeScript port replaces the prior Python tools. `parse-gedcom` and the\n  parser produce byte-identical output to the Python version on the same\n  input. Geocoded centroid coords differ from the Python output at the\n  14th decimal (centroid sum order); rounded coords match.\n- Migration extraction sorts events by `(year, place)` for deterministic\n  output; the Python version sorted by `year` only with set-hash tiebreaker,\n  so a few migrations may differ at year collisions.\n- The base GEDCOM parser (`src/gedcom/parser.ts`) is shared by the\n  biographer, the migration extractor, and the simple per-individual\n  exporter.\n\n## Typecheck\n\n```sh\npnpm typecheck\n```\n","readmeFilename":"README.md","_rev":"1-6ae7832847ec8587b1fc046caf765738"}