2026 · 07 · 07
I'm finally wielding magic
Lately, I have been watching a Japanese anime called Witch Hat Atelier. In it, a girl named Coco dreams of being a witch, but she is not from a witch family. Only born witches and wizards can use magic, she is told. The best she can do is admire from the outside.
That was how I felt about software for most of my life. I dreamed of being a developer. My developer friends are like magicians to me. They inscribe arcane glyphs on their computers and, poof, create beautiful websites, helpful apps, and handy automations. I love technology but I had always felt powerless against it.
In my son's first year, my wife and I logged his feeds, pee, and poop on paper. Having such a tracker was helpful. But using physical paper? The room would be dark at night, and we could barely see the paper. We had to keep reprinting the sheets. And, oh, where's the pen? Even for something so close to home, I couldn't pull out a spark of magic from within me to make us an app1.
Maybe the best I can do is admire from the outside? Maybe.
![]()
This year, before my daughter was born, I made us a baby logging app instead. No more scribbling on paper. AI tools like Gemini and Claude Code finally let me turn my product opinions into something real. I could make our own little app, easily and cheaply. Even better, I could customize it exactly to our needs, something generic baby loggers in the App Store could never offer.
Meimei 妹妹
Our app is called Meimei (妹妹, younger sister in Chinese). My wife and I use it more than 20 times every day, and we would be lost without it now.
It has three sections:
- Home: A timeline of her daily logs (feed, activity, poop, pee, sleep)
- Milk: 7-, 14-, and 28-day charts of her daily milk intake
- Growth: Her height and weight trend
![]()
There are also little fun features such as dark mode for night feeds, height and weight percentiles based on WHO's Child Growth Standards, and possible sleep regressions and leaps. We don't need them, but adding them was fun and easy. I designed them so they would never get in the way of what actually mattered: logging.
![]()
Because it's our app, we can easily and constantly customize it; not in the sense of toggling various settings but actually editing the code and changing the app. For example, about a month in, my wife and I decided to follow Tracy Hogg’s E.A.S.Y. (Eat. Activity. Sleep. You.) routine. So, I added an Activity log option and reordered the options to the E.A.S.Y. sequence in just a few minutes. (I share more about the technical aspect in the next section.)
![]()
Something I'm proud of is that Meimei loads instantly on launch. Most apps nowadays take a few seconds to load. How has that become acceptable? At 3 a.m., after a night feed, I just want to get back to sleep. Those few seconds feel like minutes.
(It’s technically unfair to compare my simple app with complex apps like Notion and Obsidian. This comparison is just to show how much of a difference it can be.)
More than a logging app, Meimei has been a great communication tool between my wife and me. We don't have to frustrate each other with endless "when was the last feed?" or "when did she wake up?" because the information is all in the app. In the first few months, we took turns looking after our daughter for half the night each. The person on the second shift could know how the first half went by checking the app. The person on the first shift could head to bed without having to hand over.
Looking back, I'm amazed we made do with the printed tables for our son. They feel so primitive to us now. Of course, paper is not always bad. I still use paper notebooks. But this is a good example of how technology can improve our lives when used right.
The magic
(This section is technical. Feel free to skip ahead if you are not interested.)
I initially made this app with Booplet, an AI app builder I was building with my former cofounder SK. But after we paused the project, my baby logging app kept having issues and took a long time to load. That pushed me to rebuild it with Claude Code.
This is the tech stack I used:
- NextJS for the frontend and app logic
- Supabase for the user authentication, database, realtime, and storage
- Vercel for hosting and deployment
- Cursor and Claude Code for coding
Within an afternoon, I managed to get a rough yet functional version up for my wife and me to use. At first, I tried generating a coding prompt with Gemini by providing multiple screenshots of the original app and explaining thoroughly what the app does. But Gemini gave me an outdated prompt ("Act as a Principal Frontend Engineer..."). So I let Claude Code handle both the planning and implementation instead. I had already used Supabase and Vercel for previous projects, so I was comfortable using them and could set them up relatively quickly. I also added a button in the original app to export the data as a JSON file, so I could import it into my new app.
In the following few days, I fixed the bugs and styled the app mostly with the Claude iOS app on my phone while I was out and about. For simple changes such as changing the default feed amount, I directly edited the code with the GitHub iOS app. Whenever I pushed a change, Vercel automatically deployed it, which made working on my phone a breeze. I have edited Meimei several times while feeding my daughter in the middle of the night.
I made Meimei a web app, instead of a native iOS app, because going through the App Store process felt like too much hassle and I didn't need any native features2. I also made it a Progressive Web App (PWA), which feels just like a native mobile app.
Meimei loads fast thanks to the local-first approach. The app and cached data load instantly on launch while the app fetches any new data in the background, which usually takes less than a second (Stale-While-Revalidate). When a new activity is added, it (technically a temporary entry) appears instantly in the app even before it is added to the database (optimistic update). When the entry is successfully added to the database, the app will reconcile the local and database data, ensuring there's no duplicates or omissions (conflict resolution).
Even though Meimei is only for my wife and me, I used the opportunity to practice building the app as though others might use it. Also, since my wife and I both use it on our own devices, it can't be entirely local on my computer. This means security and privacy are essential. For example, only users in a family can access and edit the same data and cached data is wiped on logout.
All I paid was a $30 Claude subscription, which I also used for other projects.
Learning from reality
I thought I knew exactly what the app should have. After all, I spent years shaping products at startups, I was building the app for us, and my wife and I had been through this newborn phase before. But the initial app didn't work well for how we actually used it or what we actually wanted. Our preferences and behavior only became apparent after our daughter was born and we started using the app.

For instance, I thought logging activities with one tap would be a helpful shortcut. For example, I could tap "Wet" and get a log with the current time on the timeline immediately. But it turns out, well, I can't press a button while changing a diaper. So we have been logging after the fact. Despite it being a "shortcut", I had to tap "Wet", get the log, tap to edit the log, change the time, and tap "Save". Eventually, I changed the logging flow to show the new log modal and set the time to the current time, which I could easily change.
The initial app, with its timeline of logs, was just a digital version of our printed sheets. Besides being more portable, it wasn't that much more helpful than paper. When I noticed my wife and I were constantly doing mental arithmetic (When's her next feed? How long has she been up? How much did she drink each day?), I realized the app could easily automate the calculations and surface more helpful information at a glance. These features were trivial to add yet offered the most value. This reminded me that valuable features don't always have to be complex or hard to build.
There were also small details that weren't apparent until we started using the app. For instance, if I log the start of a sleep last night and I open the app again this morning at 2 a.m., should the incomplete log from yesterday appear in today's timeline? My answer is yes. It's a cross-day log, which technically falls on the new day too. And from a user experience's point of view, it's easier to set the end time without having to navigate to the previous day.
As powerful as AI coding tools are, they weren't always thoughtful about such user experiences unless I prompted them specifically (though this could change in the future). But on the other hand, because it's so easy and cheap to add new features to the app, I could have easily bloated it if I were not intentional. Product taste becomes doubly important as coding becomes easier. What to cut feels as critical as what to include.
Wielding magic
In a world where magic is reserved for those born into witch families, Coco finds another way to be a witch. It isn't a path the insiders approve of. But Coco eventually proves that magic isn't meant to be a guarded possession but a tool for everyone. Her master, Qifrey, believes the fundamental purpose of magic is to bring joy, help people in their everyday lives, and create a shred of hope.
I feel the same about software.
My journey has taken more than a decade. Many years of trying and giving up to finally feeling confident enough to Google for help and read Stack Overflow, to abandoning WordPress and coding my personal site with Lee Robinson’s videos, to creating websites and testing our products while working with SK, to now making apps with AI.
While I made several little apps such as Augment Notes, Alfie, and Magic Blocks, nobody actually used and liked them3. Myself included! Meimei is the first app I made myself that has brought joy, helped people (my wife and me!) every day, and made me feel ever hopeful about technology.
I'm finally wielding magic.
If you'd like to read more essays like this on making personal software with or without AI, here are some of my favorites:
- Robin Sloan's An app can be a home-cooked meal
- Julie Zhuo's How life was different during the early Internet
- Craig Mod's Software Bonkers
Footnotes
-
We didn't even consider looking for apps on the App Store probably because we assumed they would be all paid apps, we didn't want to enter our baby's information into someone else's server, or we were too tired. Or all of the above. ↩
-
The one thing that annoys me is that the activity time picker, which uses the iOS time-picker sheet from UIKit, only respects the OS-level dark mode. I could roll my custom time picker but it felt unnecessary. ↩
-
When I was working with SK on our startup, he built the products, such as Pebblely, Dashibase, and Booplet. ↩
Recent essays
- 2025·09·11
- 2025·08·07
- 2025·07·03