dundring.com is an in-browser training application created to control and track your training with a smart bike trainer.
dundring.com is available at https://dundring.com ⚡️
dundring.com can control your smart trainer's resistance, giving you the option to set the resistance as you go, or to create a workout program, which will set the resistance at given intervals.
dundring.com currently records power and cadence from you smart trainer, and heart beats per minute from your heart rate monitor. When you're done with your workout, you can download the workout data as a .TCX-file, which can be uploaded to your favorite training diary program, such as Strava.
You can predefine your workouts by using the workout editor. A workout is multiple parts that describe a given target power and a duration. The workouts are based on the active FTP provided, which means that the workout will be saved with parts containing a duration and percent of FTP. This means that as your FTP gets higher, all you have to do is to adjust your FTP on dundring.com, to get the same effort out of your workouts. This functionality makes sharing the workout with a friend easier, and they will get the same effort based on their FTP.
You can create or join a group session to workout together with your friends.
The project is separated into frontend
and backend
, with more in-depth instructions in each directory. The frontend is created with React, TypeScript and Chakra-UI, and the backend is created with Express and TypeScript.
Install dependencies and do the required config. .env
files with empty values are generated in apps/frontend
, apps/backend
and libs/database
. The application will use the default local config if no value is provided in .env
, except for the Strava config; if you want to do testing with the Strava integration, you have to provide your own client id and client secret. You can get your personal client credentials by configuring an app here https://www.strava.com/settings/api.
$ yarn
You can either run both the frontend and backend in parallel, or separately.
# start database and redis
$ docker compose up -d
# start the app
$ yarn start
If you would like to get mocked HR and Power data, you can run the app with
$ yarn mock
# Run the frontend
$ yarn frontend
# Run the frontend with mock-data
$ yarn frontend:mock
# Run the backend
$ yarn backend
Feel free to create issues and pull requests - or join our Slack workspace if you have questions, feedback or feature requests! 🤠