Skip to content
Aldric Goh
← All projects

Repps

active

Started May 2026

Repps is a mobile app for logging workouts: sets, reps, weight, and rest timers. The problem it solves: most workout-tracking apps either have a focus around a workout routine or program, or is bloated with social features I don't want. Repps is the solution: users can record their workouts on the fly without the need for a locked or restrictive workout routine. As such, Repps is more catered towards gym-goers that are more experienced and know generally which exercises they want/need to do on-the-fly.

AIReact NativeExpoTypeScriptSQLite

Update journal

  1. APK Built

    It’s been a bit of time since my last entry. I’d used Repps a couple of times, and it works as I wanted, but occasionally I would close the app by accident, and would not be able to reopen the app since the app was only temporarily loaded (as opposed to permanently installed through an APK).

    Today, I finally decided it was time to install Repps on my phone, so I went through the process to generate a signed APK on Android Studio.

    And the result: a stand-alone app that works! I no longer had to be conscious of accidentally closing the app - it was now a genuinely installed application on my phone.

    At this point, I would call this the Minimum Viable Product (MVP); I don’t necessarily need any other functionality or aesthetics - the rest of the work to me are nice-to-haves. I want now to pivot into another project that involves data analytics and insights - arguably my main interest. Because of that, I’m considering slowing Repps development and bug fixes, but that won’t mean that I will stop development entirely - updates will simply be made less often.

    Next step: continue developing Repps (i.e. work through Jira tickets) on occasion, to fix bugs and small issues. At a later point, I might consider pushing this to Google Play Store, but at this point, I’m satisfied to use Repps for myself only.

  2. Main Functionality Complete

    I finally completed the main functionality for Repps - I can start a workout, add exercises that I do during the workout, and end and log the session.

    Test Home Page UI

    At this point, I want to genuinely begin using it, instead of my existing workout app that I have been using for years. But at this point it’s still on the emulator on the laptop, and I’m not willing to bring my entire laptop to the gym to record my workout - I’d look a bit psychotic and lose generational aura in the process.

    I looked into this and there are a few options.

    The first option: generate an APK (Android Package Kit; required for installing apps on an android), transfer and install it on my physical android phone. This seems simple, but there seems to be a lot of small intermediary steps that seem complicated.

    The second option: I could temporarily load Repps on my physical android phone and be able to use Repps immediately, but I would have to be careful not to accidentally close the app out of the background, otherwise I would have to reconnect to and re-load the app onto my phone.

    I think I’ll go with this second option (temporarily loading Repps with care not to close it in the background); I’m not willing to wait to start using my own app.

    Next step: Go to the gym.

  3. Jira

    This morning I spent about an hour in a paralysis - an analysis paralysis. I think up to this point, the steps for developing Repps was linear and trivial - it was unambiguous what next steps I had to take to build the app. Firstly was to get an emulator working, then learn version control, then build component after component so that the sample would be complete. And now that I was up to that point, there were suddenly two and a half million things I could develop and think about.

    For example: should I have the user log in to use the app? How would storing data work in the app; would the data be too big and would that need to be considered when building Repps? Do I have to think about data security - when I Go Live, what do I have to do to ensure that users’ data doesn’t get stolen/leaked/exposed? What if users already have existing workout logs; how would I go about importing from other apps? What are the colours that I want to have on my app; what animations should I add; is there a “too much” animations? These were only SOME of the things that looped through my mind.

    But then I realised that I was THINKING and not DOING - I realised that although all these ideas were important, they were not important RIGHT NOW, and I would be able to deal with them later. I simply needed to note these ideas down so that I could revisit them when the time comes.

    So I created a Jira and began logging each of these idas as tickets; epics, stories and tasks to break all these ideas down to manageable pieces. Once I had that in place, I was much less distracted and could begin actually building the main functionality: for the user to be able to record a workout on-the-fly.

    Next step: Build Repps’ main functionality: record a workout on-the-fly.

  4. RAM upgrade and Github

    After a bit of tinkering, I finally got a sort of home page up on the emulator:

    Test Home Page UI

    I also found out that my laptop was constantly eating RAM whenever I had my android emulator running my sample app, which I think may have accounted for part of the slowness that I had been experiencing whenever I was developing the app and testing it on the emulator. I also discovered that I could upgrade my RAM on my laptop, so I researched and bought a SODIMM RAM and installed it into my laptop.

    Suffice to say - everything seems snappier. The emulator seemed quicker to boot, and Google Chrome seems also faster somehow. Alternatively this might all just be a sort of recency or purrchase bias (RAM is expensive), though I’m not willing to remove my upgraded RAM back out and test this hypothesis.

    In any case, as a side project to this side project, I wanted to learn a bit of Git and Github. As an aspiring software engineer, it seemed reasonable for me to learn about version control to be able to minimise losing my progress or rollback any changes that I might not have wanted.

    So the past week was learning about Git and Github; I managed to set a repo up, created some branches, and learned the basic git bash commands - add, commit, switch/checkout. The only thing is that since this is a solo project, there won’t be any conflicts at all, unless I deliberately try to create one.

    Next step: Build the main functionality for Repps - which is what I think will be the final name for this application.

  5. Subscribing to an AI

    After unsuccessful attempts to emulate the set of files that I got from the AI, I was somewhat stuck yet again.

    The main question that I began asking was: should I buy a subscription to an AI? I asked myself this question because it seemed like an inevitable solution to the issues that I was running into.

    Firstly, as I had mentioned in another entry, I’d been encountering issues where there was incongruence between everything - the AI, what was being written in the code, and what I wanted for the app.

    Additionally, my goal from the outset was to learn, especially learn the language that I was coding in - at a bare minimum, I should understand the syntax and be able to make minor changes in the code without aid from AI. This also means that I had been prompting the AI a LOT about syntax to ensure that I understand the architecture and syntax of a mobile app. In doing so, my tokens quickly evaporated, and I always had to wait before further development on my app.

    All these points led me to the decision to buy a monthly Claude AI subscription. This gave me a significantly higher token limit and access to models that are much more effective at troubleshooting and vibe coding.

    After getting the subscription, the AI kept the context close, and it was able to both generate and emulate the app much more quickly.

    Next step: Continue to build the sample app, and play around with React Native. At this point, I might begin making the main functionality.

  6. Minor Pivot

    In my consideration of which framework to use, I consulted my friend (who is a software engineer) who suggested that I use React Native instead of Flutter - I went along with their advice.

    I looked into React Native and found Expo Go, which is an app that seems to make the emulation for React Native apps more seamless and simple, which appeals to me since I’ve been spending a bit too much time troubleshooting the setting-up of Flutter.

    The setup was much easier, though I didn’t have a sample application to run in React Native, which I needed to have, to at least see what the stack would look like.

    I decided to use a screenshot of my current gym-logging application and feed that into AI to get it to produce a sample React Native application, which it did.

    But after downloading the code that it provided, I can’t get it to emulate on my virtual android emulator. Additionally, I’m now confused: I initially expected an app to just be a couple of files, but instead, the AI gave me a set of files with differing extensions. Why do I have only javascript and json files, and why are these relevant for a mobile application? Aren’t these files for websites?

    Next step: Learn more about the purpose of javascript and json, and their relevance in mobile apps. Maybe I don’t yet understand what React Native is.

  7. Continue Flutter or Start React Native?

    I have finally set up an Android Virtual Device (AVD), and got the sample Flutter application to work on it. But there are many questions remaining.

    There were many problems that I encountered which I had to learn about and attempt to fix, with great help from AI. I definitely did not anticipate to have so many hurdles for something so seemingly trivial as opening a sample application on a virtual emulator.

    At a certain point, while setting up the AVD and troubleshooting errors with AI, the AI began providing troubleshooting “solutions” that seemed strangely complex.

    I’m always vigilant about what the AI provides; I found it hard to believe that the problems that I was trying to troubleshoot warranted such complex solutions that the AI was suggesting (such as: significantly changing default settings to get the AVD working).

    In addition, while I was reading the code for the sample Flutter app, although the app was simply a counting widget, the code itself was unintuitive and I was somewhat struggling to understand the syntax.

    So now, I feel as I should reconsider my decision again - should I continue coding and learning Flutter, or should I have a look into React Native?

    Next step: Explore React Native and run a sample React Native application on the AVD.

  8. Foundations of mobile applications

    Brainstorming and tinkering begins - my main goals at this point were to understand what powered the backend of mobile applications and play around with sample code.

    My first decision is what language/framework to write my mobile application with. I’ve decided to go with Flutter, although through my research, both Flutter and React Native are close contenders and equally preferred by developers (https://survey.stackoverflow.co/2024/technology#most-popular-technologies-misc-tech-prof).

    Additionally, Flutter (and React Native) is cross-platform, which means that I wouldn’t need to write two codebases for the app I want to eventually build (i.e. if I didn’t use a cross-platform framework, I would have to learn and write in both Swift for iOS and Kotlin for Android, which would have been double-effort for the same outcome/app).

    Next step: attempt to open a sample Flutter app in a virtual android device.