A real backend, ready for automation.

TourGaze is a proper Spring Boot service for visualizing GPX tracks, paired with a Vue frontend and an OpenAPI-documented REST API you can script against.

Under the hood

The stack

Mature, boring-where-it-counts tools — typed across the boundary by a generated OpenAPI client.

Backend Java 21 · Spring Boot 3

Spring Boot 3Java 21 H2 (embedded file DB)Flyway MapStructspringdoc-openapi GeographicLibGarmin FIT SDK jpx (GPX)metadata-extractor commons-imagingCaffeine

Frontend Vue 3 · TypeScript

Vue 3Vite TypeScriptTanStack Query MapLibre GLECharts Tailwindopenapi-typescript
REST API

Scriptable by design

Every screen talks to the same documented REST API — so anything the app can do, your scripts can do too.

  • OpenAPI spec served at /v3/api-docs
  • Frontend types are generated from that spec — no drift
  • Automate imports, tagging, backups and exports from the CLI
  • Runs locally on :8085 — no keys, no cloud round-trip
  • DTOs at the boundary. Clean wire shapes, never raw entities.
  • Provider-based parsers. Add a format without touching the rest.
  • Flyway-owned schema. Migrations in, surprises out.
  • Single small service. One process, one file database.
Quick start

Up and running in two commands

The quickest way is Docker — one image serves the API and the UI on port 8085, with your library kept in a /data volume.

# 1 — pull
docker pull mschwehl/tourgaze

# 2 — run
docker run -d --name tourgaze -p 8085:8085 -v tourgaze-data:/data mschwehl/tourgaze
# → open http://localhost:8085

…or build from source (for development). Needs JDK 21+ and Node 20+; the Vite dev server proxies /api to the backend.

# clone
git clone https://github.com/tourgaze/tourgaze.git
cd tourgaze

# backend
cd server   && mvn spring-boot:run        # http://localhost:8085

# frontend (new terminal)
cd frontend && npm install && npm run dev  # http://localhost:5173