← all work

Full-stack · Backend · Mobile

Easy Gym

A full-stack fitness product built solo, end-to-end — Android app, Spring Boot API, and marketing site.

Role
Solo — product, backend, mobile, and infra
Stack
  • Kotlin
  • Jetpack Compose
  • Java 25
  • Spring Boot 4
  • PostgreSQL
  • Docker
  • Astro
Easy Gym app icon

published · Android

Live on Google Play.

Overview

Easy Gym is a fitness app I conceived, designed, built, and published on Google Play — but the app is only the visible tip of it. Behind the scenes I built and operate the entire product as a one-person team: a native Android client, a Spring Boot backend, and a marketing site. It's the clearest single proof that I can own a product from the database all the way to the store listing.

Easy Gym login screen
Login
Easy Gym workouts list
Workouts
Easy Gym exercise with execution video
Exercise + video
Easy Gym weight history chart
Progress history

Demo

The app in action:

What I built

  • Android app — Kotlin, Jetpack Compose (Material 3), offline-first.
  • Backend API — Java 25, Spring Boot 4, Spring Modulith, JDBI, PostgreSQL, Dockerized and self-hosted on a VPS.
  • Marketing site — a static Astro site at easygym.fitness.

Technical highlights

Offline-first mobile architecture

The app treats a local Room database as the single source of truth. The UI reads only from the database via reactive Flow queries, so screens stay instant and fully functional offline. A dedicated sync layer (Retrofit + WorkManager) pushes local changes and pulls server updates in the background, with caching rules that fetch from the API only when the local copy is missing or stale.

Modular backend

The API is organized with Spring Modulith to keep clear boundaries between modules, uses JDBI over a PostgreSQL schema isolated from other apps sharing the database, and runs from Docker on a VPS — with Flyway migrations and an OpenAPI/Swagger spec the mobile client is built against.

End-to-end ownership

Beyond code, I handled the things that make a product real: the Play Store release pipeline, signed release builds, store assets and screenshots, the domain and DNS, and the production deployment. Shipping solo forced deliberate scope and architecture decisions at every layer.

Outcome

Easy Gym is live on Google Play, backed by a running API and a public marketing site — a complete, maintained product rather than a prototype.