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.

May 13, 2026 | 8 min read

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

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

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

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

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

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

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

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

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.