An open-source endurance training app for tracking and analyzing athletic activities.
Cadent is a full-stack, cross-platform application for endurance athletes. It supports recording activities (running, cycling, etc.) with detailed metrics including distance, elevation, speed, and GPS routes. Data can be imported via FIT or GPX files.
Stack:
- Backend: Go + chi router, PostgreSQL 17
- Mobile: Flutter (iOS & Android)
- Web: React 19 + TypeScript + TailwindCSS
- Go 1.25+
- Flutter 3.9+
- Node.js 20+
- Docker (for local PostgreSQL)
- Make
make dev-upcp .env.example .env
# Edit .env with your valuesmake install-depsmake run-apiThe API server starts on port 8080 by default. The web app is embedded and served at /.
make run-web-devmake run-appmake build # Backend + mobile APK
make build-api # Backend only (embeds web app)
make build-web # Web app only
make build-apk # Mobile APK onlymake docker-build-api # Build Docker imagemake test # All unit tests
make test-e2e-api # End-to-end API tests (requires running server)E2E tests use Hurl and live in the tests/ directory.
cadent/
├── backend/ # Go REST API
│ ├── internal/ # Handlers, models, DB, storage, geo utilities
│ └── migrations/ # PostgreSQL migrations
├── app/ # Flutter mobile app
├── web/ # React web app
├── tests/ # E2E tests (Hurl)
├── Makefile
├── Dockerfile
└── docker-compose.dev.yaml
All API routes are prefixed with /api:
| Prefix | Description |
|---|---|
/api/auth/* |
Authentication (JWT) |
/api/avatar/* |
Avatar management |
/api/v1/* |
Protected endpoints (activities, users, training plans) |
See .env.example for all available configuration options including database connection, JWT secret, storage backend, and service URLs.
- Fork the repository
- Create a feature branch
- Submit a pull request
See LICENSE for details.