Thanks for your interest! TourGaze is AGPL-3.0; by contributing you agree your changes are licensed under the same terms.
- JDK 25+, Node 20+.
- Backend:
cd server && mvn spring-boot:run(http://localhost:8085). - Frontend:
cd frontend && npm install && npm run dev(http://localhost:5173, proxies/api→ 8085).
# Frontend types + lint
cd frontend && npx vue-tsc --noEmit && npm run lint
# Backend build/tests
cd server && mvn verify
# End-to-end (needs a running backend with some data)
cd frontend && npx playwright testCode style is enforced by Spotless on the backend (mvn spotless:apply).
Full details in README-dev.md. The essentials:
- Database: Flyway owns the schema (
V1__baseline.sql, generated from the entities); Hibernateddl-auto=validateonly checks it. Add an@Entity/field (+@Index) and ship a forwardV2+migration — never edit V1. - API types:
src/types/schema.ts+src/enums/generated/are generated from the backend OpenAPI —cd server && mvn -Pspec verify -DskipTests, thencd frontend && npm run generate. Don't hand-edit them. - DTOs only out of controllers; entity→DTO via MapStruct mappers in
service.mapper. - New ride formats: implement
TrackFileParserinio.github.tourgaze.parserand register it as a bean (provider pattern) — no format conditionals elsewhere. - Distance: use
util.Geo(backend) /src/lib/geo.ts(frontend), not haversine. - Keep new code in the style of the surrounding code; comments explain why.
Open an issue with steps to reproduce, the ride file format if relevant, and console/server logs. Never attach files containing private location data you don't want public.