Devblog
Building mainiø in 8 weeks
A casual build journal about making mainiø, an AI literacy app that teaches better judgment through real scenarios and short daily missions.
We started mainiø with an empty Xcode project and a product idea that felt more useful than polished. The goal was never to make another AI explainer. We wanted an app that helps people make better decisions with AI in real work.
This is not a guide to building the app. It is the build journal. Eight weeks, a lot of scope, a lot of design decisions, and the point where the thing started to feel real.
Week 1 · From zero to working app
March 4 to March 11, 2026
The first week was pure scaffolding. Models, themes, architecture, state, persistence, backend hooks. SwiftUI on the front end, SwiftData locally, Supabase behind it, MVVM throughout.
We made one early rule that paid off fast. No raw colors or spacing values inside views. Everything goes through tokens. It feels strict at the start, then three weeks later you realize it saved you from a lot of cleanup.
By the end of the week the app already had a progress system, a badge engine, a mission player, and the first AI feedback loop. That pace was slightly unhinged, but it gave the product a backbone almost immediately.
What shipped
- App scaffold
- SwiftData models
- XP and level system
- Badge engine
- Mission player
- Claude feedback loop
- Daily Quest system
- Supabase auth
Week 2 · Commerce, competition, and a character
March 12 to March 17, 2026
Week two moved closer to the real product. Leaderboard went in. Push notifications got wired up. StoreKit 2 for subscriptions followed. That was the first moment where the app stopped feeling like a prototype and started feeling like something that could be shipped.
The most important decision that week was the mascot. The original version was called Mimo and looked more like a generic character concept. We scrapped that. The app is mainiø, so the mascot became the ø itself. That gave the brand a center of gravity it did not have before.
Niø ended up being less like a mascot costume and more like an expressive piece of typography. Color, motion, and timing did the emotional work. That felt much more right for the product.
What shipped
- Leaderboard
- Push notifications
- Paywall with StoreKit 2
- Niø character first version
- Subscription management
Week 3 · The design system grows up
March 19 to March 24, 2026
This was one of the messiest weeks and probably one of the most important. The app icon, Finnish localization, and light mode all landed around the same time, which forced a lot of unresolved design decisions into the open.
The brand palette finally settled. We moved away from a colder accent direction and locked into near-black, forest green, and sage mint. That instantly made the product feel more grounded and more like itself.
Localization turned out to be more technical than it looked on paper. Light mode was another full pass in its own right. The important part is that both now feel like native parts of the app rather than bolt-ons.
What shipped
- App icon
- Poppins font setup
- Finnish localization
- Light mode system
- AI Translate for news
- Badge inspect sheet
- Rive integration
Week 4 · Content gets serious
March 26 to April 3, 2026
This was the point where we had to admit the content was lagging behind the product shell. The app looked better than the learning experience inside it, which is always dangerous.
Two additions changed that. ToolMatch made tool choice feel more intuitive and less like trivia. RealWorldUsecase missions finally pushed the app toward the thing it was meant to teach, which is judgment in actual work situations.
The semantic color system also got locked here. Green means active or correct. Red means wrong. Amber means done. Once that was settled the interface got cleaner because color stopped behaving like decoration.
What shipped
- ToolMatch mission type
- RealWorldUsecase mission type
- Content tag badges
- Semantic color system
- Track service
- XP first-completion bonuses
Week 5 · AI Skill Map goes live
April 8, 2026
The Skill Map was always one of the bigger bets in the product. If mainiø is supposed to help people make better decisions with AI, it needs to understand what kind of work they actually do.
Getting that live was mostly plumbing and product judgment. Claude analyzes a role and learning goal input, then returns a path that is stored locally and surfaced back into the app. The harder problem was not generation. It was staleness.
Once someone has completed a meaningful number of missions, an old plan starts to feel stale even if it was good when created. The fix was a regeneration nudge. Small feature, but it makes the system feel much more alive.
What shipped
- AI Skill Map
- Plan persistence
- Staleness nudge
- Recommended path badges
- Settings integration
- Debug reset
Week 6 · Launch profile and onboarding
April 13, 2026
This week was about hardening and first-use quality. A launch profile went in to catch missing config early, which is exactly the kind of boring feature you only appreciate when it saves you later.
The bigger change was onboarding. Step 6 became a real lesson instead of a thin transitional screen. That mattered because onboarding should prove the product, not just explain it.
Niø also got upgraded from a more makeshift implementation to a proper SVG-based version. Small detail on paper, noticeable difference in polish inside the app.
What shipped
- LaunchProfile diagnostics
- Step 6 lesson hook redesign
- Onboarding upsell screen
- Daily limit sheet
- Niø SVG
- Neutral emotion state
- XP chart improvements
Week 7 · The typography moment
April 26, 2026
Inter had done its job, but the app still felt closer to a clean prototype than a finished product. Switching to Poppins changed that faster than expected.
Typography changes are sometimes overstated. This one was real. The home screen headlines suddenly had more identity and more confidence. The rest of the interface followed.
That same stretch also locked the M24.2 design language across the product. The result was less about a single font swap and more about the whole app finally feeling internally consistent.
What shipped
- Poppins typography
- M24.2 design language
- Onboarding rebuild
- Paywall rebuild
- SkillMapResultView rebuild
- SkillConstellationView
- LessonCard component
- LanguagePickerView
- ReviewService
Week 8 · News, notifications, and going bilingual
April 28, 2026
The AI News feature had existed before, but it was not yet behaving like a real product surface. This week gave it a proper backend, caching, and notification flow.
The more important hidden work was bilingual lesson content. Earlier content decisions had left some parts of the app drifting into the wrong language depending on state. Fixing that meant normalizing content structure and shipping a migration for missed installs.
By the end of this week the app felt much closer to something submit-ready. Not finished forever, obviously, but real enough that the question changed from can we build this to how soon can we ship it.
What shipped
- NewsService and Supabase integration
- News notifications
- Bilingual lesson content
- Migration v11
- Notification copy overhaul
- Auth improvements
What it added up to
We started on March 4 with an empty Xcode project. By late April the app had 24 feature modules, five mission types, subscriptions, localization, a live AI skill map, a real brand system, and a content model that finally matched the product idea.
The build strategy mattered as much as the features. One focused module at a time. Tight scope. Verification before moving on. When something went sideways, we stopped after a few failed attempts and reset instead of grinding forward blindly.
Now the interesting part starts. Building the app is one thing. Putting it in people’s hands is where we find out if the idea actually holds up.