Back to work
iOSBackendWebOwn product · App Store

Tatakae

Training app for calisthenics and strength that you use without touching the phone. A coach guides you through programs and routines you create yourself, tells you which exercise comes next and counts your reps with the camera, and a gesture starts or stops each set. On-device AI with Apple Foundation Models, friends and rankings on my own Java and Spring Boot backend, and a site in four languages.

Tatakae

Overview

This one I did alone, from the idea to the App Store. The idea is that you train without touching the phone. A coach walks you through the programs and the routines you build yourself and tells you which exercise comes next, and a gesture in front of the camera starts or stops each set. The camera also counts your reps while you train, using pose estimation from Vision and a CoreML classifier I trained myself. The AI coach reads your sessions and routines and tells you how you are doing, and it runs on the phone with Apple Foundation Models, so nothing leaves the device. If the iPhone has LiDAR it also scans body measurements. Inside, the app is Clean Architecture with MVVM and SwiftData, using only Apple frameworks. Later the project grew a social side: friends, rankings per exercise by country and worldwide, and a notification when someone passes you. For that I built the backend myself in Java 21 and Spring Boot, on PostgreSQL. It started as my capstone project for Globant and Desafío Latam's Talento Ready program, in the Java Developer track, and I built it test-first from day one with JUnit 5 and Mockito. It follows hexagonal architecture, checks Sign in with Apple tokens against Apple's public keys, sends live updates over Server-Sent Events and pushes through APNs. Flyway runs the migrations, the tests hit a real Postgres through Testcontainers and JaCoCo asks for 100% coverage. It all runs in Docker behind Caddy on a VPS. Only reps counted by the camera reach the rankings, and only if you opt in. The app needed a home outside the App Store, so I built it with Astro, static and on Vercel. It comes in English, Spanish, Portuguese and German, and each language has its own URLs, so a German speaker lands on /de/programme and not on a translated English path. Every training program in the app has its own page. Astro cannot import Swift, so the programs live as content collections, and a Zod schema checks the rules of each format, sets or AMRAP, so a wrong number fails the build instead of reaching the site. The ranking page is static too, but it reads the global and per country boards live from the Spring Boot API I built for the app, and that part has its own tests with Vitest. There is also a page per release with what changed, and a sitemap with hreflang so search engines know which language is which.

More screens

Want to talk about this project?

Get in touch