No description
  • Rust 96.1%
  • Fluent 2.3%
  • Just 1.6%
Find a file
Charles Jacquin 8c8d0775cd
All checks were successful
qa / qa-1 (push) Successful in 1m6s
qa / qa (push) Successful in 0s
feat(builder): nearest-neighbour stop ordering — no more zig-zag routes
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>
2026-06-18 00:19:27 +02:00
.claude feat(service): M2b — Postgres persistence (sqlx) behind a feature flag (#7) 2026-06-17 13:18:17 +00:00
.forgejo/workflows chore: M0 scaffold — workspace, justfile CI contract, forgejo workflows (#1) 2026-06-17 11:30:05 +00:00
android chore: M0 scaffold — workspace, justfile CI contract, forgejo workflows (#1) 2026-06-17 11:30:05 +00:00
core/crates feat(builder): nearest-neighbour stop ordering — no more zig-zag routes 2026-06-18 00:19:27 +02:00
docs feat(builder): nearest-neighbour stop ordering — no more zig-zag routes 2026-06-18 00:19:27 +02:00
fixtures test: fake 3-generation family fixture spread across France 2026-06-17 21:16:56 +02:00
web chore: M0 scaffold — workspace, justfile CI contract, forgejo workflows (#1) 2026-06-17 11:30:05 +00:00
.env.example feat(service,api): real auth — email + password, argon2, signed sessions 2026-06-17 23:55:53 +02:00
.gitignore feat(api): first-class UmansAI (Kimi) LLM + .env support 2026-06-17 23:03:30 +02:00
AGENTS.md test(builder),docs: e2e happy-path test + status refresh (#17) 2026-06-17 14:48:33 +00:00
Cargo.lock feat(service,api): real auth — email + password, argon2, signed sessions 2026-06-17 23:55:53 +02:00
Cargo.toml chore: M0 scaffold — workspace, justfile CI contract, forgejo workflows (#1) 2026-06-17 11:30:05 +00:00
justfile feat(api): runnable web slice — no-account GEDCOM import → tree/places (#5) 2026-06-17 12:30:42 +00:00
LICENSE docs: initial functional + technical specs, mockups, monetisation 2026-06-17 13:06:56 +02:00
README.md test(builder),docs: e2e happy-path test + status refresh (#17) 2026-06-17 14:48:33 +00:00

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 devhttp://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.