Volver a proyectos
iOSBackendWebProducto propio · App Store

Tatakae

App de entrenamiento de calistenia y fuerza que se usa sin tocar el teléfono. Un coach te guía por programas y por rutinas que tú mismo creas, te dice qué ejercicio sigue y cuenta las repeticiones con la cámara, y con un gesto empiezas o terminas cada serie. IA en el mismo dispositivo con Apple Foundation Models, amigos y rankings sobre mi propio backend en Java y Spring Boot, y una web en cuatro idiomas.

Tatakae

Resumen

Esta la hice solo, desde la idea hasta la App Store. La idea es que entrenes sin tocar el teléfono. Un coach te lleva por los programas y por las rutinas que tú mismo armas y te dice qué ejercicio sigue, y con un gesto frente a la cámara empiezas o terminas cada serie. La cámara además cuenta las repeticiones mientras entrenas, con estimación de pose de Vision y un clasificador CoreML que entrené yo. El coach IA lee tus sesiones y rutinas y te dice cómo vas, y corre en el mismo teléfono con Apple Foundation Models, así que nada sale del dispositivo. Si el iPhone tiene LiDAR además escanea medidas corporales. Por dentro la app es Clean Architecture con MVVM y SwiftData, solo con frameworks de Apple. Después el proyecto creció hacia lo social: amigos, rankings por ejercicio por país y a nivel mundial, y una notificación cuando alguien te pasa. Para eso construí el backend yo mismo en Java 21 y Spring Boot, sobre PostgreSQL. Nació como proyecto integrador del programa Talento Ready de Globant y Desafío Latam, en el track Java Developer, y lo desarrollé con TDD desde el primer día con JUnit 5 y Mockito. Sigue arquitectura hexagonal, valida los tokens de Sign in with Apple contra las llaves públicas de Apple, manda actualizaciones en vivo con Server-Sent Events y notificaciones push por APNs. Flyway corre las migraciones, los tests pegan contra un Postgres real con Testcontainers y JaCoCo exige 100% de cobertura. Todo corre en Docker detrás de Caddy en un VPS. Al ranking solo llegan las repeticiones que contó la cámara, y solo si tú quieres. La app necesitaba una casa fuera de la App Store, así que la armé con Astro, estática y en Vercel. Está en inglés, español, portugués y alemán, y cada idioma tiene sus propias URLs, así que alguien que habla alemán llega a /de/programme y no a una ruta en inglés traducida. Cada programa de entrenamiento de la app tiene su página. Astro no puede importar Swift, así que los programas viven como content collections, y un schema de Zod revisa las reglas de cada formato, series o AMRAP, para que un número mal puesto rompa el build en vez de llegar al sitio. La página del ranking también es estática, pero lee los rankings global y por país en vivo desde la API en Spring Boot que hice para la app, y esa parte tiene sus propios tests con Vitest. Además hay una página por versión con lo que cambió, y un sitemap con hreflang para que los buscadores sepan qué idioma es cuál.

Más pantallas

¿Hablamos de este proyecto?

Escríbeme