So, for the past couple of months, I’ve been using a habit tracker I built for myself called “Nothing Done.” The name is a bit of a joke, and the look is a direct nod to the minimalist Nothing aesthetic. I had just bought the new CMF Phone Pro 2 and wanted to build an app that felt like a native part of its design. The name is also a jab at my own productivity. The goal was simple: create a dead-simple, private, on-device habit tracker for my Android phone because, let’s be real, most of the apps out there are just too much.
But here’s the twist: I didn’t build it alone. I had a sidekick, an AI coding assistant in the form of GitHub Copilot. My role was more of a project manager, guiding the AI, and my own direct coding was minimal. The result? A functional app, a messy codebase, and some hard-earned lessons about the future of development.
The “Why”: An App for Me, by Me (and an AI)
I’ve been a Type 1 diabetic since 2013, and I’m pretty used to tracking things—blood sugar, insulin, carbs, you name it. But I wanted something for the other parts of my life, the simple, recurring habits that build a routine. Things like “walk the dog”, “eat lunch” or “take insulin”. The apps on the Play Store felt bloated, with features I’d never use. I just wanted something that looked cool, was easy to use, and didn’t have a full infrastructure to maintain with authentication, databases etc.
So, “Nothing Done” was born. A simple, black-and-white app with a pinch of red that lives entirely on my phone (and partially in the Google Play Console in internal testing phase).
The “How”: Letting Copilot Take the Wheel
From the get-go, I decided to lean heavily on Copilot. I’d use the sidebar chat in “Agent” mode, and the AI would reason with itself, modify the code, from time to time ask to execute a command. It was… fast. Incredibly fast and I was just a bystander. Components, hooks, UI elements—they all came together in a fraction of the time it would have taken me to write them from scratch. The initial version of the app was up and running within the first couple of hours of off-and-on work. My friends and family got to test the app the same day I started building it, and I was able to iterate quickly based on their feedback - all without writing much code myself. There were instances where I had to step in and modify some code to reach pixel perfection, but for the most part, Copilot handled the heavy lifting.
But speed comes at a cost.
The Good, the Bad, and the AI-Generated Ugliness
Working with Copilot was like having a brilliant but slightly unhinged intern. It’s great for boilerplate and simple logic, but it lacks context and, frankly, good taste sometimes. Here’s the breakdown:
The Good:
- Speed: I can’t overstate this. Getting from zero to a working prototype was insanely quick.
- Boilerplate Be Gone: Setting up components, contexts, and basic functions was almost instantaneous.
- Recovering After Mistakes: If Copilot made a mistake, it would often suggest a fix and rewrite the code to correct it.
The Bad:
- Trash Code: The AI has a tendency to generate code over time that’s… well, trash. Unused variables, overly complex logic for standard solutions, abandoned mechanisms and files.
- Duplicate Logic: This was the biggest issue. Copilot doesn’t have a great memory of the entire codebase. If you keep pushing it to fix a more difficult issue, it could at some point write two completely separate (and slightly different) implementations of the same logic, or even worse, it would write a new implementation of the same logic in a different file, leaving the old one behind. This led to a lot of duplicated code and unnecessary complexity.
The Ugly (and Broken):
- The Notification System: This is where things really fell apart. I have at least two, maybe three, different implementations of the notification logic in the app. One in
app/_layout.tsx
, another in a dedicatedscripts/NotificationService.ts
module, and who knows where else. The result? A notification system that’s buggy, unreliable, and a perfect example of AI-generated chaos. It schedules, cancels, and clears notifications in a way that’s so convoluted, even the AI is not sure what it’s doing half the time.
Two Months In: The Verdict
So, after two months of using “Nothing Done,” what’s the verdict?
Honestly, it’s been great. For all its flaws, the app works. I’ve been consistently tracking my habits, and it’s been genuinely helpful. The simple, clean UI is exactly what I wanted, and the fact that it’s 100% private is a huge plus.
But every now and then, I’m reminded of the AI-generated mess under the hood. A notification that doesn’t fire or fires 5 times in a row, habit notes disappear, a moment where I think, “I should really refactor that.”
The “What’s Next”: A Human Touch
The next step for “Nothing Done” is a human intervention. I’m tempted to go back and refactor the entire app (maybe with help of Claude Sonnet 4
which I had great experience with lately), starting with that disaster of a notification system. It’s a good reminder that AI is a powerful tool, but it’s not a replacement for a developer with a clear vision and a bit of discipline.
I’ll probably still use Copilot for the cleanup, but this time, I’ll be the one in charge. The AI can be the intern, but the final code review is on me.
A Quick Technical Dive
For those interested, here’s a look at the tech stack for “Nothing Done”:
- Framework: React Native with Expo
- Language: TypeScript
- UI: React Navigation, React Native UI Lib
- State Management: React Context with custom hooks
- Data Storage: AsyncStorage
- And, of course: A whole lot of GitHub Copilot
Check It Out
The repository can be found on GitHub. It’s open-source, so feel free to take a look, contribute, or just laugh at the mess I’ve made. The app is not on Google Play Store yet, but if you want to give it a spin, you can use the APK (if you’re not scared to install from unknown source): Download APK.
It’s been a fun, weird, and educational journey. And I have a feeling this is just the beginning of what it means to build software in the age of AI. Now, if you’ll excuse me, I have a habit to mark as “Done.” And a whole lot of code to fix.