Self-hosted running training platform. Runners can create training plans, log workouts, track progress, and connect with running clubs -- all self-hosted, all private, and free.
Cadence is an open-source alternative to commercial running apps. Deploy it on your own server, keep your data under your control, and run without subscriptions, ads, or tracking.
- Training plans with periodized schedules for 5K, 10K, Half Marathon, Marathon, and custom distances
- Workout logging with planned vs. actual comparison, perceived effort, and notes
- Weekly calendar view with inline done/skip controls
- Dashboard with mileage charts, pace trends, streak tracking, and personal records
- Mobile apps for iOS and Android built with React Native (Expo)
- Offline-first mobile experience with local database and background sync
- Social features: clubs, friends, activity feed, comments, and direct messaging
- Admin panel for user management, server health monitoring, database backups, and logs
- Web dashboard with auth-protected routes, login page, and admin pages
- Docker Compose deployment for simple self-hosting
# Clone the repository
git clone https://github.com/benharvey1985/Cadence.git
cd Cadence
# Copy environment template and edit configuration
cp .env.example .env
# Start all services with Docker Compose
docker compose up -d
# Run database migrations
docker compose exec backend npx drizzle-kit migrate
# Access the application at http://localhost:3000| Layer | Technology |
|---|---|
| Backend | Express 5, TypeScript, Drizzle ORM |
| Database | PostgreSQL 17 |
| Web App | React 19, Vite 8, react-router-dom 7, Recharts |
| Mobile App | React Native (Expo SDK 55+), Victory Native, WatermelonDB |
| Deployment | Docker Compose |
Cadence/
├── packages/
│ ├── backend/ # Express API server (TypeScript)
│ │ ├── src/
│ │ │ ├── db/ # Drizzle schema, migrations, seed
│ │ │ ├── routes/ # REST API route handlers
│ │ │ └── server.ts
│ │ └── ...
│ ├── web/ # React web dashboard (Vite)
│ │ ├── src/
│ │ │ ├── components/ # Shared UI components
│ │ │ ├── contexts/ # AuthContext (login/session)
│ │ │ ├── pages/ # Route pages + admin pages
│ │ │ └── App.tsx # Root with auth-protected routes
│ │ └── ...
│ └── mobile/ # React Native app (Expo)
│ ├── app/ # Expo Router screens
│ ├── components/
│ └── ...
├── docker-compose.yml # Production stack (PostgreSQL + backend + web)
├── Dockerfile # Backend container build
├── Dockerfile.web # Web dev container build (Vite dev server)
├── .env.example # Environment variable template
└── package.json # Workspace root
MIT -- free to use, modify, and distribute.
See the docs/ directory for detailed guides on architecture, development setup, testing, and deployment.