- Rust 96.1%
- Fluent 2.3%
- Just 1.6%
Stops were emitted in relevance order, so legs criss-crossed the country (FR-TRP-4). Now selection stays relevance-based (which places matter, bounded by trip length) but the chosen set is reordered geographically: nearest-neighbour from the most-relevant place (kept as the anchor/first stop), greedily appending the closest unvisited stop by great-circle distance. - integrations: `GeoPoint::distance_km` (haversine). - builder: `route_order` after the relevance sort + truncate; no-op for ≤2 stops. Test: Lille/Paris/Lyon — relevance would route Lille→Lyon→Paris (zig-zag), NN gives Lille→Paris→Lyon. A 2-opt refinement could shorten further; NN already removes the worst detours. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .claude | ||
| .forgejo/workflows | ||
| android | ||
| core/crates | ||
| docs | ||
| fixtures | ||
| web | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| justfile | ||
| LICENSE | ||
| README.md | ||
Geneatrip
Turn a family tree into a holiday. Import your genealogy (GEDCOM, or a spreadsheet / PDF / text), validate the places tied to your ancestors, and let an AI travel agent design a complete tour that visits where your family came from — with transport, lodging, and activities linked to your own family history, a price total, and a per-place breakdown you can refine.
Public website + free Android app. Sibling project of Geneathing (local-first genealogy); Geneatrip consumes a tree to plan a trip — it does not research one.
Status
Working core flow (just dev → http://127.0.0.1:8080): import GEDCOM →
geocode (OSM Nominatim) → validate places (exclude / relevance / confirm) →
log in (dev) → build a priced trip → save → list. Postgres persistence behind a
feature flag; agent story-link narration when an LLM is configured. Backend +
web slice are real; remaining work is breadth/polish — see docs/ROADMAP.md.
How it works
Import → Parse → Validate ──[free account]── Params → Build → Refine → Save/Book
GEDCOM/ places & correct & dates, agent accept/ sync +
XLSX/PDF/text events confirm tree budget designs chat affiliate
the tour hand-off
- No account to import a GEDCOM, parse it, and validate the tree + places.
- Free account to run the AI agent (parse unstructured files, build/refine a trip) and to save/sync across web + Android — this controls LLM/API cost and abuse on a public service.
Architecture (short)
One Rust + axum binary serves a JSON REST API (Android) and a
server-rendered HTML web app (htmx + maud) over one shared service
layer. Android is a thin Kotlin/Compose client (REST for the agent/sync;
UniFFI only for on-device GEDCOM + validation).
The agent runs server-side behind a configurable LlmProvider (Qwen3.6/Ollama
or Kimi K2/UmansAI). Core types (domain, gedcom) are forked from
Geneathing.
Full detail: docs/technical-spec/00-architecture.md.
Hard obligations
- FR/EN parity and 100% accessibility (WCAG 2.2 AA / Android equivalents)
on both platforms — CI-gated. See
docs/functional-spec/09-i18n-and-accessibility.md. - Privacy: family data is sensitive; minimal data to third parties, living
people protected, no in-app payment in v1. See
docs/functional-spec/06.
Docs
| Path | What |
|---|---|
docs/functional-spec/ |
What Geneatrip does (FR-* requirements) |
docs/technical-spec/ |
How it's built (traces to FR-*) |
docs/ui-mockups.md |
ASCII mockups, every screen × mobile/desktop |
docs/monetisation.md |
Revenue options (FR) — v1 = affiliate deep-links |
Agents working on this repo: read AGENTS.md first.
License
AGPL-3.0-or-later. See LICENSE.