Skip to content

Operations

The pages in this section are about running TravStats — the things you’ll touch after install when something goes sideways or when you want to peek under the hood.

If you’re still installing or trying to figure out why a flight didn’t parse, you probably want Getting Started or Troubleshooting instead.

  • Database — How TravStats uses PostgreSQL with PostGIS. The 20 tables in plain English. When and how to connect with psql. External-Postgres setups.
  • Backups & Restore — The built-in scheduler, manual pg_dump, restore drill, optional WebDAV off-host sync (Nextcloud / HiDrive / generic).
  • Reverse proxy setup — Concrete recipes with full configs for Cloudflare Tunnel, Caddy, nginx, Traefik, and Tailscale Funnel.
  • Admin panel reference — Every field in Admin → Settings, what it does, what changes when you flip it.
  • Pending Updates — When TravStats finds new flight data via API, it doesn’t overwrite — it proposes. How to review, edit, apply, or reject those proposals.
  • Performance tuning — TravStats handles ten users and a quarter-million flights without any tuning. If you’re hitting bottlenecks beyond that, file an issue with the workload and the underlying hardware; that’s case-by-case.
  • Custom themes / UI changes — possible by forking the frontend and rebuilding the image, but not officially supported. Read frontend/src/styles/ if you want to dig in.
  • Schema migrations of your own — TravStats applies its own migrations on every boot; adding your own tables to the same database is technically possible but not recommended. Use a separate database in the same Postgres if you need custom storage alongside.

The minimum operations checklist for a public TravStats instance (invite-only or open):

  1. Set up backups. Default schedule (daily) is fine; configure WebDAV or an off-host destination so a host failure doesn’t lose data. See Backups & Restore.
  2. Front it with HTTPS. Public domain or Tailscale + a TLS proxy. See Reverse proxy setup.
  3. Lock down registration. Default is invite-only; flip in Admin → Settings → Registration mode if you actually want public sign-ups.
  4. Configure SMTP. Required for invitations; covered in SMTP.
  5. Verify the health endpoint is reachable from your monitoring (UptimeKuma, Statping, healthchecks.io). It’s at /health, no auth required.

That’s enough to call the instance “production”. Everything else is opt-in.