Saying Goodbye to "Fragmented Memory" at the Gym: Building a Custom Android Training Tool with VibeCoding
事例紹介 Android開発 10 min read

Saying Goodbye to "Fragmented Memory" at the Gym: Building a Custom Android Training Tool with VibeCoding

Struggling with lost counts or missed rest intervals at the gym? An Android engineer shares how they developed "GymPlayer," a custom fitness app built using VibeCoding and Codex. This post details the technical stack, including Kotlin, Jetpack Compose, and Firebase, used to resolve common pain points like audio/timer interference and flexible workout tracking. It is a personal case study on optimizing fitness routines through custom software development.

Goodbye "Brain Farts" at the Gym: I Built an Android Workout Tool Using VibeCoding

The scariest thing about going to the gym isn't the jelly legs after squats; it's... "Wait, which set was I on?"

Immersing yourself in music with noise-canceling headphones often means you'll miss the reminder that your rest period is over. If the gym you frequent is as crowded as mine in the evenings, having to change your plan on the fly because equipment is occupied often ruins your training progress in an instant. Paper records are too cumbersome, and existing apps on the market are often bloated with redundant features and lack flexibility.

As an engineer, the best way to solve these "pain points" is, of course, to write one yourself. So, on a sunny Sunday, I used VibeCoding and Codex to develop an Android fitness app: GymPlayer.

image

Why did I "reinvent the wheel"?

At the beginning of development, I didn't chase a massive list of features. Instead, I tried to solve the small, frustrating details that actually happen at the gym:

  • A "Duet" of Music and Timer: Most music and timer apps fight for dominance when used together. One of GymPlayer's core goals is to let users enjoy music without missing the reminder at the end of each rest set.
  • Flexible Training Flow: The gym is not a laboratory. Due to equipment availability, you often need to adjust your training order. GymPlayer allows you to select multiple pieces of equipment at once and dynamically manage the completion progress of each during your training.
  • Data Closed-Loop: From basic weight and sets to pre-workout blood pressure and pulse, and post-workout body composition data (weight, body fat percentage, muscle mass, etc.), these details are quickly forgotten if they only stay in your head. GymPlayer digitizes everything through a local Room database and Firebase synchronization.

An Engineer's "Deconstruction": The Core of GymPlayer

Although this was a "weekend project," I maintained the geeky standards I hold for technical choices and didn't cut any corners on the architecture. Here is its core technology stack:

  • UI/UX Core: Built using Kotlin and Jetpack Compose, ensuring smooth interface responsiveness and modern code.
  • Media Control: Leveraging Media3/ExoPlayer and MediaSession, it not only handles music playback but also perfectly supports Bluetooth headphone control commands. More importantly, it overlays the rest countdown reminder while music is playing, completely solving the awkwardness of "not hearing the alarm."
  • Data Persistence and Cloud Sync: Uses Room for local storage, ensuring training data remains safe while offline; handles authentication via Firebase Authentication and implements cross-device training record synchronization using Cloud Firestore.
  • State Management: Uses DataStore for configuration data, ensuring a lightweight and type-safe storage solution.

The Developer's Perspective: Building "Order"

What excited me most about developing this app wasn't just the implementation of features, but the process of "turning chaos into order."

Through the full development logic flow, you can see a complete development logic cycle: from user login and synchronizing equipment profiles, to real-time interaction during training, and finally to recording body metrics.

In the future, I also plan to add:

  • Data Visualization: Using the massive amount of data on Firebase to generate trend charts, allowing you to see changes in weight and body composition at a glance.
  • Smart Recommendations: Providing "optimal alternatives" for equipment based on crowding levels.
  • Data Integration: Supporting more convenient CSV or spreadsheet import/export functions.

For engineers, the essence of a tool is to extend their capabilities. GymPlayer is not just a logging app; it is a "command center" in the gym that allows me to focus on the movements themselves rather than getting distracted by tedious recording and environmental factors.

If you are also an Android developer troubled by "gym nitpicks," perhaps you can try writing your own training assistant. After all, there is nothing cooler than optimizing your life with code you wrote yourself.

image
Github: https://github.com/perfact-tang/gymplayer/

VIBECODING

Readable articles from the intersection of AI and real-world development.

© 2026 VibeCoding Japan, Inc. All Rights Reserved.