Sukuwatto is a workout tracker with a strong social component and gamification features. It allows users to create workout plans, track and analyze their physical performance, and connect with one another.
| Name | Description |
|---|---|
| Backend | Django WSGI, ASGI and worker applications |
| Frontend | Angular web application |
A complete set up for Sukuwatto assumes a relational database (like postgres), a redis store/message broker and a web server (like nginx) to serve the web application files and reverse proxy a wsgi server serving the rest api and an asgi server handling websockets. At least one worker handling scheduled and/or long running tasks in the background (like sending reset password e-mails) should also be configured.
- A Linux or Windows with WSL system
- Docker compose
Configuration is done via environment variables. To configure the entire system create a .env file in the main project directory and set the following variables:
| Name | Description | Values |
|---|---|---|
| POSTGRES_USER | PostgreSQL database user name | |
| POSTGRES_DB | PostgreSQL database name | |
| POSTGRES_PASSWORD | PostgreSQL database password | |
| DEBUG | Returns additional error information when an exception is raised | 1 / 0 |
| SECRET_KEY | Used to provide cryptographic signing, and should be set to a unique, unpredictable value | |
| HOST | Website host name | |
| WEBAPP_NAME | Web app name, used in e-mail templates | |
| DJANGO_ALLOWED_HOSTS | A list of strings representing the host/domain names that this site can serve | |
| CORS_ORIGIN_WHITELIST | A list of origins that are authorized to make cross-site HTTP requests | |
| CORS_ORIGIN_ALLOW_ALL | If 1, all origins will be allowed. | 1 / 0 |
| CHANNELS_BACKEND | Channel layer storing backend | |
| CHANNELS_HOST | Storing server host name | |
| CHANNELS_PORT | Storing server port | |
| SECURE_SSL_REDIRECT | If 1, the security middleware will redirect all non-HTTPS requests to HTTPS | 1 / 0 |
| CSRF_COOKIE_SECURE | Whether to use a secure cookie for the CSRF cookie | 1 / 0 |
| CSRF_COOKIE_DOMAIN | The domain to be used when setting the CSRF cookie | |
| CSRF_TRUSTED_ORIGINS | A list of trusted origins for unsafe requests (e.g. POST) | |
| AUTH_COOKIE_SECURE | Whether to use a secure cookie for the session cookie | 1 / 0 |
| AUTH_COOKIE_SAMESITE | Whether to set the flag restricting cookie leaks on cross-site requests | Lax / Strict / [Empty] |
| AUTH_COOKIE_DOMAIN | The domain to be used when setting the session cookie | |
| EMAIL_BACKEND | The backend to use for sending emails | |
| EMAIL_HOST | The host to use for sending email | |
| EMAIL_HOST_USER | Username to use for the SMTP server defined in EMAIL_HOST | |
| EMAIL_HOST_PASSWORD | Password to use for the SMTP server defined in EMAIL_HOST | |
| EMAIL_PORT | The port to use for sending email | |
| EMAIL_USE_SSL | Whether to use an implicit TLS (secure) connection when talking to the SMTP server | 1 / 0 |
| DATABASE | Database type | |
| SQL_ENGINE | SQL engine | |
| SQL_DATABASE | Database name | |
| SQL_HOST | The database host | |
| SQL_PORT | The port to use to connect to the database | |
| SQL_USER | The user to use to connect to the database | |
| SQL_PASSWORD | The password to use to connect to the database | |
| HUEY_HOST | Message broker host name to use with huey workers | |
| HUEY_PORT | The port to use to connect to the message broker that huey workers use | |
| DRF_RECAPTCHA_SECRET_KEY | Recaptcha secret key, used for user registrations. Leave unset to disable captcha use |
Check an example configuration file in .env.development.
An additional configuration environment.prod.ts file is also expected on the frontend/src/environments directory, with the following variables set:
| Name | Description |
|---|---|
| useSSL | Specifies whether to use SSL when accessing the API/websockets endpoints |
| recaptchaKey | Same as DRF_RECAPTCHA_SECRET_KEY or null if not used |
| host | Backend host name |
| port | Port to use when accessing the backend |
Inside the project directory run:
$ docker compose up -d
Open http://localhost to access the application.
If it's the first time the project is being ran, do the following configurations:
Update the database schema:
$ docker compose exec wsgi python manage.py migrate --noinput
Seed the initial data for exercises, muscles, metabolic equivalent tasks, etc:
$ docker compose exec wsgi python manage.py loaddata muscles exercises mets skills skills_exercises
$ docker compose exec wsgi python manage.py createsuperuser
Geolocation-based workout tracking uses the geolocation web api. This feature is only available in secure (HTTPS) contexts, and SSL configuration will be required in order for this feature to work.