With most of the logic in place, I shifted focus to refining the UI which was the most fun part for me. I quickly realized that I had to be very specific when giving design related instructions to Cursor. It ain’t gonna fix that perfect whitespace on its own. That got me thinking. Maybe designers in the future will play more of a refinement role polishing rough AI generated outputs instead of starting from scratch.
I decided to publish the app online via GitHub Pages, mostly because I wanted to see what it looked like on my phone. It also made it super convenient to access the app from any device. Going live felt exciting!
But shortly after publishing, I received warnings from both GitHub and OpenAI: I had accidentally exposed my API key to the public. At the time, I barely knew what an API key was, let alone how to handle one securely. No one stopped me; I just followed Cursor’s instructions, right?
Still, it didn’t sound good. I immediately deleted the API key, took the app offline, wiped the version history, and tried to remove any trace of the leak. In the cleanup process, I also accidentally deleted version control in Git… which I didn’t realize until much later. Ironically, it turned out the published app didn’t even use the API key. None of the features relied on it, and even if they had, the key was useless since I hadn’t linked any payment method. So I was lucky in the end…
I kept working on the app, but at one point Cursor hit its context limit. I asked for a tiny change, and Cursor rewrote nearly every file, completely ignoring the existing code. The app broke and became unusable. I tried restoring an earlier version from chat history, but Cursor crashed whenever I went too far back. “Maybe I can restore it from version control?” I thought. Nope. Git was gone… So, I rebuilt the app from scratch. Fortunately, it went much faster the second time. I continued improving the UI, especially focusing on making it more mobile-friendly, which can be seen in the image below.