← All case studies
Case study · Product build Oluko Live on iOS & Android

A Yorùbá learning app that treats the tone marks as sacred.

Yorùbá has around 45 million speakers and almost no learning tools that handle its tonal diacritics correctly. Oluko is the one that does — native-speaker audio, diacritic-insensitive search, and full offline support across two stores from one core.

React Native Haskell PostgreSQL Offline-first DigitalOcean
01Identify

We identified a documented gap

Yorùbá is a tonal West African language: the tone marks aren't decoration, they carry meaning. Change a diacritic and you change the word. Yet the mainstream language-learning apps are built around European phonology, and the ones that do exist for Yorùbá are thin — a scattering of word lists with no audio, no retention model, and search that silently fails the moment a learner types an accented character.

The gap, stated plainly

No dedicated Yorùbá learning tool that gets the tones right — in search, in audio, and in display — and still works with no signal.

A learner typing ọ̀gá into the existing tools was getting nothing back. The vocabulary they most needed to practice was exactly the vocabulary the software couldn't find.

02Investigate

We investigated why the gap persists

The gap isn't neglect — it's three hard constraints the generic tools were never built to hold at once.

i

Diacritics break naïve search

Yorùbá tone marks are essential to meaning, so they can't be stripped from display — but a learner won't type them perfectly. A tool has to normalise tone marks for lookup while keeping them sacred in display. Most search implementations do one or the other, not both.

ii

Tonal audio doesn't compress like speech

The tone is the lesson. Aggressive audio compression that's fine for a podcast smears exactly the pitch contour a learner is trying to hear — so file size and tonal clarity pull against each other on a mobile budget.

iii

Offline is the norm, not the edge case

Learners study on commutes and in places with patchy connectivity. An app that assumes the network is a demo, not a tool. Full offline use with clean sync-on-return had to be designed in from the first schema, not bolted on.

03Intervene

We built the tool the language deserved

Oluko is a mobile-first flashcard app built specifically for Yorùbá: 239 curated flashcards with English translations, native-speaker audio for accurate tonal learning, spaced repetition to schedule review at optimal intervals, progress tracking, category organisation, and an admin panel so the content set can grow without a redeploy.

Pillar 01

Tone-correct search

Diacritic-insensitive lookup that normalises tone marks for matching while keeping them intact in every display.

Pillar 02

Native-speaker audio

Recordings compressed to a mobile budget without smearing the pitch contour the learner is training their ear on.

Pillar 03

Offline by default

Full study offline, with a sync strategy that reconciles progress cleanly the moment connectivity returns.

Frontend. React Native with Expo for rapid cross-platform development — one codebase, two stores — with smooth animations and navigation tuned for one-handed study.

Backend. Haskell on the Scotty framework, chosen for type safety and a functional core; a RESTful API handles authentication, flashcard delivery, and progress sync. Data lives in PostgreSQL on DigitalOcean, with a schema shaped around diacritic-insensitive search from the start. Infrastructure deploys on DigitalOcean App Platform straight from GitHub, for zero-downtime updates.

For the technically curious (optional depth)

The recognisable engineering call is the split between lookup form and display form: text is normalised to a tone-insensitive key for matching and indexing, while the original fully-marked string is what the learner always sees. Audio was tuned per-clip rather than batch-compressed, trading a little pipeline convenience for the tonal clarity that is the entire point of the recording. And the offline model treats the local store as the source of truth during a session, reconciling on return rather than blocking on the network — the boring, correct choice. The stack is deliberately unflashy: the judgment is in the language handling, not the framework list.

04Document

We documented the outcome

Oluko launched on iOS and Android, giving Yorùbá learners a dedicated, culturally-aware tool where the tone marks are handled correctly end to end — in search, in audio, and on screen. It runs on one Haskell-backed core serving both stores, and it keeps working with no signal. The content set continues to grow through the admin panel, with expanded vocabulary and community features on the roadmap.

Swappable configuration
The language & script
The card set
The audio corpus
Category structure
Branding
The reusable system
Diacritic-aware search
Spaced-repetition engine
Offline sync layer
Cross-platform shell
Content admin panel

The same core re-fits any under-served tonal or diacritic-heavy language whose learners have been handed tools built for someone else's phonology — configured to the language, not rebuilt from zero.

Try Oluko →
Have a gap of your own?

An under-served language, or an under-served anything.

If there's a problem the off-the-shelf tools keep getting wrong for the people who need them most, tell us the one sentence. We'll tell you whether it's worth building.

Start a conversation
Or see more work

Every engagement we take on is documented to the same framework you just read.

All case studies