TravStats – self-hosted flight tracker with 3D globe, heatmap & email parser
Hey r/selfhosted Lemmy crowd,
I built **[TravStats](https://github.com/Abrechen2/TravStats)** because I wanted
to log my flights without handing my travel history to MyFlightradar24, App in
the Air, or whatever SaaS-of-the-month. Started as a weekend project, has grown
into something I actually use daily.
### What it does
- **Booking email parser** — drop your Lufthansa / BA / Berge & Meer / whatever
confirmation mail in and it auto-fills the flight via local LLM (Ollama,
gemma3:12b works great). No manually typing 200 flights.
- **3D globe** of all your routes (deck.gl + MapLibre), plus heatmap, hexagon,
arc and time-slider modes — watch your flights build up over the years
- **Boarding pass scanner** as a fallback (OCR) for the cases where you only have
the PDF
- **Stats, achievements, certificates** for the gamification fans
- **Cruise tracking** with sea-route rendering (because flights aren't the only
travel) (Comming Soon)
- **DE / EN** UI
### Stack
- Single Docker image, Postgres sidecar
- Node + TypeScript backend, React + Vite frontend
- AGPL-3.0
- Optional: Ollama on a separate box for the parser (CPU-only is fine, gemma3:12b
on a Mac mini works)
### Install
- **Unraid:** in Community Apps, search "TravStats" → one-click
- **Anywhere else:** `docker compose up -d` with the example compose file in the
repo
- No external account, no telemetry, JWT in HttpOnly cookies, secrets
auto-generated on first boot
### Links
- GitHub: https://github.com/Abrechen2/TravStats
- Docker Hub: https://hub.docker.com/r/abrechen2/travstats
- GHCR: `ghcr.io/abrechen2/travstats:latest`
Still actively developing — currently on v1.2.1. Happy about feedback, issues,
feature requests. If you give it a spin and the parser eats your booking
confirmation cleanly, I'd love to hear it; if it doesn't, even more so.
I built **[TravStats](https://github.com/Abrechen2/TravStats)** because I wanted
to log my flights without handing my travel history to MyFlightradar24, App in
the Air, or whatever SaaS-of-the-month. Started as a weekend project, has grown
into something I actually use daily.
### What it does
- **Booking email parser** — drop your Lufthansa / BA / Berge & Meer / whatever
confirmation mail in and it auto-fills the flight via local LLM (Ollama,
gemma3:12b works great). No manually typing 200 flights.
- **3D globe** of all your routes (deck.gl + MapLibre), plus heatmap, hexagon,
arc and time-slider modes — watch your flights build up over the years
- **Boarding pass scanner** as a fallback (OCR) for the cases where you only have
the PDF
- **Stats, achievements, certificates** for the gamification fans
- **Cruise tracking** with sea-route rendering (because flights aren't the only
travel) (Comming Soon)
- **DE / EN** UI
### Stack
- Single Docker image, Postgres sidecar
- Node + TypeScript backend, React + Vite frontend
- AGPL-3.0
- Optional: Ollama on a separate box for the parser (CPU-only is fine, gemma3:12b
on a Mac mini works)
### Install
- **Unraid:** in Community Apps, search "TravStats" → one-click
- **Anywhere else:** `docker compose up -d` with the example compose file in the
repo
- No external account, no telemetry, JWT in HttpOnly cookies, secrets
auto-generated on first boot
### Links
- GitHub: https://github.com/Abrechen2/TravStats
- Docker Hub: https://hub.docker.com/r/abrechen2/travstats
- GHCR: `ghcr.io/abrechen2/travstats:latest`
Still actively developing — currently on v1.2.1. Happy about feedback, issues,
feature requests. If you give it a spin and the parser eats your booking
confirmation cleanly, I'd love to hear it; if it doesn't, even more so.