I had been wanting to participate in a hackathon for a while. DevPost contacted me via their newsletter, and from there things escalated quickly. Many of the competition tracks required publishing a fully functional app to common app stores. For this reason, I chose to participate in the Next Gen track. Not having to publish to an app store did not mean I would cut corners. I wanted to build an app that would be shippable in a few days if I ever got access to developer accounts.
The Research
I start a lot of my projects with basic probing and some research. Given the time frame of the competition, I was comfortable with learning an entirely new language if I had to.
Before my real work began, I drafted out my idea. One of the most important restrictions I placed on myself was: no custom servers, no custom backend. This meant the application would ship with all its assets and resources. I would not collect any information from the user, so any payment structures I designed would need to work around that.
From there, I established my project would be a quotes app. Later on, I named it myQuote. The quotes market is over-saturated; I have used a few applications myself. A lot of them are also free. In a way I was reinventing the wheel. My app would differ in the sense that it was an experience. Yes, the quotes remain the center of attraction, but the general design of the interface would contribute meaningfully as well. The main selling points would be:
- Text-to-speech functionality
- Voice customization
- Access to unique themes
- Font customization
- Simplicity
- Customizable notification time
Most phones come with built-in speech synthesis. The application would leverage this capability to make reading or listening to the quotes enjoyable. For more naturalistic voices, the user could switch to Google’s Speech Recognition & Synthesis engine. The main advantage being a wide array of natural voices. Additionally, users could download voice packs from their region, for a more familiar interface. Depending on device and voice engine, speech synthesis can take up to 5 seconds.
Free users would only have access to two themes. Pro users have access to an additional 98 themes. The interface takes inspiration from Teen Titans. The show uses the 60-30-10 color rule. 60% of the screen represents a dominant color, 30% of the screen a secondary color, and 10% of the screen an accent color.
I tried applying the rule as best as I could. I am not entirely familiar with OG Teen Titans, but the little visuals I did see were simply beautiful. To make the app even more aesthetically pleasing, it features a selection of 10 different types of fonts. I feel the customizable fonts only accentuate the best parts of my visual philosophy – but that is for the user to decide. Unfortunately, this feature is locked behind paid access.
Finally, the app is programmed to send simple notifications to the user every day at 9am. For Pro users, this reminder time is customizable.
The most important design element is simplicity. I prefer to keep things simple.


RevenueCat
All entries into the competition need to use the RevenueCat SDK. As such, I decided to do some more research on the framework itself. In doing so, I stumbled across the State of Subscription Apps report. My main focus was the 2025 report.
I read all of it and took notes. A few points stood out for me:
- Longer trials (17–32 days) were associated with higher conversions. The assumption is that more exposure to an application’s value can help drive conversion.
- Habitual use-case apps have good market performance.
- High-value users need to be targeted with personalized experiences.
- Trials should not be hidden.
- Implement a few good trials.
- Implement good retention strategies.
- Use hard paywalls to drive conversions.
- The screen before the paywall must count.
- iOS dominates in premium markets, but Android has global reach.
I chose a 30-day trial; the app is very simple, and users will need time to see its value. On day 30, the user loses access to TTS but keeps basic access. On day 34, the app is completely locked and serves a paywall.


The daily reminders serve as a way to form a habit. The streak tracker serves the same purpose; it counts the number of days a user has opened the app. It also hides an easter egg (same goes for the Pro card in the top right-hand corner).
The application’s entire user interface is customizable, from the voices to the themes. This helps sell it as a personalized experience.



On app launch, free users always see a trial page, politely asking them to choose their plan. They can close the page, but it is highly visible. Plus, there are only three offers to choose from, $0.99/week, $2.99/month, and $29.99/lifetime. I also feel like the Gothic Q logo is eye-catching.

Because the application has no account system, I did not create custom user identities for purchases. RevenueCat generates anonymous App User IDs, and its CustomerInfo object acts as the source of truth for Pro access. This avoids maintaining a second local paid-status flag that could become stale after a subscription expires or a purchase is restored.
Due to implementation constraints, I limited the application to Android devices. Check it (SOSA) out here: RevenueCat – State of Subscription Apps 2025 | Klutch Studio | Work or here (2026): RevenueCat State of Subscription Apps
Building It All Out
This is the part where I was genuinely ready to give up. My machine is old. Don’t get me wrong, for its time – it was decently powerful. However, for modern workloads, it simply falls short.
Initially, I wanted to build the app out in React Native, using the Expo framework. React Native installed perfectly fine, but Expo continuously failed. Naturally, I turned to something else.
Either Kotlin or Kotlin Multiplatform. The Java Development Kit was already present on my machine. I installed Android Studio and began testing, but my machine struggled badly with the workload. At this point, I was defeated. I had already done the research, designed the user interfaces, and even a pricing model.
Luckily, I got a ChatGPT Plus promotional free trial. I had come to the understanding that even compiling the source code on my machine would be a miserable process. So, I had to build the entire app in the cloud.
ChatGPT was very easy to work with. I uploaded my notes and it extracted the essence of my design, translating it into readable code. GitHub Actions served as the build environment for the application. We iteratively tested each build and made refinements.
The application itself is written in Kotlin using Jetpack Compose. Most persistent application state is stored locally using Android DataStore, while the quote corpus ships as a bundled JSON asset. Text-to-speech is handled through Android’s TextToSpeech API, so myQuote does not need its own speech backend. RevenueCat is the major external service: it provides product information, purchase state, entitlement checks, and restoration.
GitHub Actions handled the parts my machine struggled with. Builds could be compiled remotely, tested, linted, and packaged into APK artifacts without forcing my laptop to do all of the work locally. This ended up becoming a major part of the development process rather than just a convenience.
ChatGPT’s Role
The biggest problem that needed solving for a practical build concerns data. Quotes can be found in very large datasets all over the internet. Cleaning this data became a substantial part of the project.
You need to strip away broken entries, lose dramatic quotes, and filter material with unclear provenance or rights status. Copyright law around historical quotations can get surprisingly messy, so I decided to be conservative. ChatGPT automated a large part of this process; building out the tools needed in Python. Regular expressions handle a lot of the structural cleanup.
Check it out here: quotes_of_wisdom/tools
The quote tooling eventually became its own small pipeline. Python scripts normalize candidate datasets, reject malformed entries, remove duplicates, validate the production JSON, and maintain provenance records for accepted quotations. Separate validation scripts also enforce the final corpus format before a build can pass CI.
My AI assistant also built out the project hierarchy and helped me settle on GitHub Actions as the build environment.
We went from ideation to a working prototype in just 6 days. The current public judge release is the final competition build: myQuote v1.0.2. Check it out here: myQuote v1.0.2 (Remember this is a Test Store release for the Next Gen category. The app is completely functional, but all purchases are simulated).
My Opinion
The process has been long, and at times tiring, but I am happy with my results. I am even happier that I finished what I started. A lot of the market research I got from RevenueCat’s SOSA reports will stick with me. It will be especially useful if I ever become a published developer. This competition has helped me learn more about AI-assisted development, color theory, and the various application markets.
