No job I have had asked me to be the brand, the designer, the engineer, the tester, the ASO writer, the SEO, the social media person, and the person who clicks Submit for Review.
Thai Sabai did. It is a Duolingo-style app that teaches complete beginners to read and speak Thai — short exercises, audio on every word, a course map, a streak. I took it from a blank page to a listing on the App Store. That is the biggest product experience I have had, more than any role where I owned a slice of someone else's roadmap.
AI helped. It did not ship the app.
Every hat, on purpose
The work was not "write the lesson engine and hand it over". There was no one to hand it over to.
Branding. Name, colour, the elephant, the tone of the copy. What the app feels like when you open it for the first time, and what it looks like as a tiny icon next to Instagram.
Design. Onboarding, the course map, the exercise types, the empty states, the paywall. Not a mock that someone else implemented — the screens the user actually taps.
Development. Session logic so a lesson picks up where you left off. Text-to-speech on every word and sentence. Auth and data on Supabase. A CMS so course content is not hardcoded. Animations and haptics so answering a question feels like answering a question.
Testing. The lesson flow, the purchase flow, restore, renewals, the upgrade from a free user who sees ads to a premium user who does not. The boring paths that only show up after a real App Store receipt comes back.
ASO, SEO, social, launch. The name, the subtitle, the keyword field, the screenshots. The site at thaisabai.app. The posts that have to exist on launch day or the listing goes up in silence.
A job usually gives you one or two of those. Building Thai Sabai meant sitting in all of them long enough to notice where they disagree. The brand wants a calm, premium feel. Ads want inventory. Apple wants a paywall that is honest. ASO wants a screenshot that reads at thumbnail size. You cannot throw any of those over a wall, because you are the wall.
AI helps you build. It does not make you App Store ready.
This is the part I would tell anyone using AI to "just make an app".
The model will scaffold screens. It will draft copy. It will get you a build that runs on your phone and feels, privately, like a product. That is a genuine shift, and it is why a single person can now do what used to take a small team.
The App Store does not grade on whether the build runs on your phone. It grades on whether you understood the rules for the kind of product you actually made — and Thai Sabai is not a simple utility. It has a free tier, a paid tier, third-party ads, a subscription, a trial, and push notifications. Each of those is a guideline, a disclosure, a binary, and a way to get rejected.
Apple is not being romantic about indie developers here. They are being specific.
Third-party advertising
Free and Standard users see ads through Google AdMob. Premium and trial users do not. That sentence is a product decision, an implementation, and a review surface.
You need to know how the ads are requested (non-personalized, in this case), what that means for tracking disclosures, where the privacy nutrition labels have to match the SDK, and that the store listing and the in-app advertising page say the same thing. Thai Sabai has a public advertising page and an app-ads.txt for a reason. Reviewers look. So do ad networks.
If the paywall says "remove ads" and a paid user still sees one, that is not a growth problem. That is a review problem, and a trust problem.
Paywalls and subscriptions
A paywall that "works" in the simulator is not a paywall. StoreKit receipts, restore purchases, a trial that actually ends, a subscription group whose upgrade path makes sense, pricing that matches the screenshot, terms that match the buttons — that is the product.
Apple's subscription guidelines are not optional copywriting. If you sell a subscription you need a way to restore it, a way to manage it, a privacy policy, and copy that does not pretend the price is something it is not. Account deletion belongs in the same bucket if people can sign in. None of this is the fun part of building a language app. All of it is the difference between a project and a listing.
The conversion dashboard I built for Thai Sabai exists because once money is in the app, you cannot keep pricing in your head. You need to see what the paywall is actually doing. That is also not something a generated UI gives you for free.
Notifications, and the rest of the "small" things
Streaks need a nudge or they die. Push notifications are easy to add and easy to get wrong. Purpose strings have to say why you want permission. The first notification cannot be a surprise, and it cannot be a daily advert for the paywall dressed up as a reminder.
Then there is everything around the binary: encryption declarations, the privacy nutrition label, the support URL, the marketing site, the terms, the screenshots that must represent the app you submitted and not the app you meant to build.
Each item is small. Together they are the job.
What I actually learned
I already knew how to design and ship software. What I did not have, in any job, was the obligation to hold the whole thing at once — including the parts that feel like operations, legal and growth rather than product.
Thai Sabai taught me that "I built an app with AI" and "this is on the App Store" are different sentences. The first is a weekend. The second is branding, design, development, testing, store presence, ads, money, notifications, and a review process that does not care how clever the stack is.
That is the work I now know how to do, because I had to do all of it. You can see the result on the Thai Sabai project page, or on the App Store.