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 got us to a real product direction, but the timeline below is still a simplification. A lot of planning, rewrites, and polishing happened between and after the headline milestones.

Week 1 · Foundation, onboarding, and first structure

The first week was mostly foundation work. Project structure, theme tokens, architecture choices, state, persistence, and lots of planning and design back-and-forth before features looked real.

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.

At this stage we were not done with auth, mission systems, or AI feedback loops. The main outcome was a clear skeleton and direction for the next phases.

What shipped

  • Project foundation
  • Onboarding first pass
  • Home screen base with streak and XP shell
  • Learning path direction and structure

Weeks 2 to 5 · Mission player and learning core

The middle stretch was where the app became a product instead of a shell. We built the mission player core first, then added concrete mission types one by one so the learning model could be tested with real usage.

The cadence was practical. Build, test in context, then rework copy, UX, and progression rules when it felt wrong. Most of the speed came from this loop, not from one-shot implementation.

By the end of this phase, the app could actually teach and track progress instead of only presenting static structure.

What shipped

  • Mission player core
  • Quiz, flashcard, and prompt mission types
  • Hallucination spotting and tool-match lessons
  • Progression system and progress screen

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

Final stretch · Polish, rewrites, and release prep

This is the part that is easy to underestimate from the outside. In the final stretch, we spent more time polishing, refactoring, and reshaping content than we had spent in earlier feature pushes.

We revised lesson structure, changed mission content, streamlined onboarding, tuned animation and interaction details, and fixed many design inconsistencies that only show up after repeated real use.

In practice, this phase did most of the work required to make mainiø feel launchable. The feature list got us to a demo. The polish phase got us much closer to a product people can trust daily.

What shipped

  • AI mentors and daily quest system
  • Badges, AI News Decoded, and skill mapping
  • Push notifications, premium/paywall, and profile improvements
  • Design system pass, analytics, and animation polish
  • Extended content and onboarding refinement
  • Leaderboard and badge work continued post-v1

What it added up to

We started on March 4 with an empty Xcode project. By late April the app had mission variety, progression, localization, premium infrastructure, and a clearer product identity. Then came a longer polish phase that reshaped a lot of what users actually feel in the app.

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.