Sukuwatto

Social fitness platform for web and android.

Screenshot of the users' home feed
Screenshot of the users' home feed

Concept

Sukuwatto, japanese for squat, is one of the most complete strength-training exercises available exercising multiple muscles in the body in a single movement. We, too, strive to make the most complete app available in the health and fitness category. Let me explain how.

There are some great fitness apps out there, but they all seem to have one shortcoming or another:

Geolocation-based cardio apps don’t let you record strength activities. Strength-oriented apps don’t let you log cardio. Sukuwatto is flexible enough to allow both, so athletes don’t have to choose between one type of activity or another or have to use different apps for each.

Training plans and proper strength programming are really important when it comes to progressing in weight-lifting, but most strength-oriented apps are locked to a specific plan or don’t let users make their own plans. Sukuwatto has a built-in plan creator, and since plans are stored on the cloud users can share and adopt each others’ plans.

There’s also some really great and well-designed iphone and android fitness apps out there, but most of them save your data locally on your device, not allowing you to switch to a different phone, tablet or view/plan your workouts on a computer. Sukuwatto has a web-first approach and can be used wherever the user prefers.

Multiple studies have shown that working out in a social context with friends and colleagues helps sustain fitness goals. We agree and that’s why we’ve built sukuwatto around social interactions. Likes, comments, posts, activity sharing and chats are all supported out of the box.

Technical info

Sukuwatto running on android
Sukuwatto running on android

In this project the backend and frontend are completely separated.

For the backend django and django rest framework are combined to create a restful api with jwt being used to authenticate users. Async/websockets components (for the messages and feed notifications, for instance) are handled by django channels.

In the frontend angular is in charge, with d3js being used to create charts and leaflet to display the maps. Some additional cool html apis like the geolocation api and the share api were also employed. The frontend is PWA ready with a service-worker caching app data on supported systems.

Cordova was used to create the android application in conjunction with modules for geolocation (needed to poll gps positions on the background) and for sharing content.

Quality control is handled by jasmine on the frontend and python’s unittest module on the backend. Special care was employed in testing sensitive aspects of the system like resource modification permissions and workout generation.

In the infrastructure side, nginx is serving static data and reverse-proxying two python servers: gunicorn to handle regular HTTP and daphne for the websockets/async components. Postgres and redis are the main data storage applications, with docker and docker compose being used to containerize each element and automate deployment.