Work Case study

Mahou Learning

A Japanese learning app built around flashcards, writing practice and a companion that lives on your home screen.

Completed
  • React Native
  • Expo
  • TypeScript
  • NativeWind
  • SQLite
  • Reanimated
  • Skia
Role
Interface and interaction work: the app’s theming system, its move to NativeWind, the home screen, the Mahou companion screen, the memory minigame, and the settings and cards screens.
Team
Team project, one of several contributors
When
May 2026 to Jul 2026
Status
Team project · contributions through July 2026

01

The Idea

Japanese is hard to start because the writing system comes first. Mahou Learning is a flashcard app aimed squarely at that wall: learn the alphabet faster, practise writing it by hand, and pick up grammar once the characters stop being noise.

02

The Design

Screens from the build. The companion, the shops and the minigames are the reason to come back; the flashcards are the reason it works.

03

The Build

What the app is made of, and which parts of it I worked on.

Platform
React Native via Expo, file-based routing with expo-router
Styling
NativeWind, Tailwind syntax in React Native
Storage
expo-sqlite, on device
Motion & drawing
Reanimated, Gesture Handler, Skia canvas for stroke practice
Scheduling
An SM-2 spaced-repetition schedule drives when a card comes back
Dictionary
JMdict and KanjiDic, parsed and searched on device

My own work sat on the interface side. I built the theming system the rest of the app reads its colours from, moved styling over to NativeWind, and built the home screen, the settings and cards screens, the Mahou companion screen with its hunger and happiness state, and the Kanji Memory minigame.

This was a team project. The stack above describes the whole app; the paragraph above describes the part I contributed.

04

Challenges

Getting theme switching to hold across the whole app was the harder of the two. A theme is only real if every screen reads its colours from the same place. One hard-coded value and the app half-changes, which looks worse than not having themes at all. That is what the theme provider exists to prevent, and it meant going back through screens that already worked.

The other was the home page. It is the screen that has to earn attention in the first few seconds and give someone a reason to come back tomorrow, so what it leads with (the companion, progress, the way straight into a session) went through several passes before it felt right.

05

What I Learned

Everything I owned on Mahou was interface and experience work, and that is where the lessons are. Deciding what a learner sees first, keeping the app consistent from screen to screen, and making practice feel like something other than a chore did more for whether a session got finished than any single feature did.

It also taught me how much of UX is maintenance rather than invention: a theming system, a shared button, a screen layout that other people build on top of are all decisions that either hold up across a team or quietly come apart.