← All work Case · App · 2026

A Thai textbook,
with a voice.

CapyTalk teaches Thai from the beginning through 13 topic-based modules, tone practice, spaced repetition and spoken phrases. I turned a language school's paper textbook into a product, from data structures and UX to a Google Play build. The app is now being prepared for release.

Read the story ↓ Preparing for release
Role

Founder and product owner: product, UX, content and AI-assisted development

Period

May–October 2026

Stack

Expo · React Native · RevenueCat · Google Cloud TTS · Make

Languages

Russian, English, German

CapyTalk · Android build 7

Web-build screenshots with demo progress: 1,840 XP and a 12-day streak. The native iOS Liquid Glass effect is not shown. The interface pictured is in Russian.

The product in numbers

Six months.
Textbook → app.

Counted from the project's code and data on 22 October 2026. The app is not yet in stores; these numbers describe the product's scope, not user activity.

13

Topic-based modules built from 12 lessons in the ABC Easy Language School textbook.

700+

Vocabulary words with Thai script, tonal transcription, translations into three languages and an example phrase.

622

Practice exercises: sentence building, multiple choice, listening and tones.

1 610

Google Neural2 audio files bundled with the app for offline playback. Recorded generation cost: ฿0.

438

Vocabulary illustrations generated with AI in a consistent line-art style.

17

Screens, around 16,000 lines of TypeScript and Android build 7 (.aab).

Timeline

The story, month by month

From a scanned textbook to a Google Play build.

May2026

A textbook in your pocket

I was learning Thai at a language school with a paper textbook. Words, dialogues and exercises lived on the page, which made revision awkward. I scanned the book and used OCR to turn it into 20 structured JSON files: vocabulary, grammar, dialogues and exercises. On 12 May I started the Expo project and imported the first lessons. Spaced repetition came next: swipe a card for ‘remember’ or ‘don't remember’, and a forgotten word returns after 30 minutes.

OCR → 20 JSON First lessons Swipe-based SRS
Word cards: Thai script, transcription with a tone contour, translation and example.
Spaced repetition with two answers and a simple swipe.
Textbook grammar with examples of correct and incorrect usage.
June2026

Navigation and the business model

The tab bar mixed app-wide sections with activities inside a lesson, making lesson boundaries unclear. On 18 June I rebuilt navigation as Home → Lesson → Activity. Lesson progress now combines three verifiable steps: vocabulary added, dialogue understood and practice completed. Simply opening a screen no longer counts. The next day I audited the code and mapped out a white-label roadmap for language schools. A week later I changed direction: a B2C freemium launch on Google Play first, followed by a school product using the same code.

Drill-down navigation Progress ring: ⅓ + ⅓ + ⅓ B2B → B2C first
Home: XP, daily streak, Learn and Review, and lesson progress.
The lesson hub gives each activity its own status.
Dialogue completion requires a comprehension check: choose the other person's response.
July2026

Glass, dark mode and native iOS

I built a design system around iOS 26 Liquid Glass, with a blur fallback on older devices, and added light and dark themes. A Make.com workflow started producing word illustrations: spreadsheet → generation → storage. In parallel, I explored a native route by porting the app to SwiftUI. All 14 screens, data and stores were transferred; on 20 July the build passed without errors or warnings and ran in the iPhone simulator. Android release preparation continued in the Expo project, while the SwiftUI port remained a separate native implementation.

Liquid Glass SwiftUI port: 14 screens Make.com → illustrations
CapyTalk · dark mode
Dark mode: the same screens with teal and mango accents. Design system
August2026

A name and a revenue model

On 20 August, the working title Easy ABC became CapyTalk, connecting it to the capybara already used by my Capymapa brand. I integrated RevenueCat with Google Play Billing and StoreKit. No login is required: subscriptions belong to the store account, while the premium entitlement is abstracted so a school licence can be added later. The freemium model includes two permanently free modules and 20 free reviews per day. Premium offers weekly, monthly, annual with a seven-day trial, and lifetime options. I also wrote the terms of use and privacy policy.

Easy ABC → CapyTalk RevenueCat 2 free modules
The paywall shows the price, billing period and renewal terms before purchase.
Six-step onboarding with an interface language choice.
Settings: three languages, automatic audio and relaxed reminders.
September2026

Audio, tones and a build

The surprise was a silent Android device: it had no Thai voice installed, so the audio button did nothing. I wrote a script to collect every Thai string from the data and generate speech through Google Cloud TTS. The result was 1,610 MP3 files bundled with the app, within the free allowance. Then came a core part of learning Thai: five tone contours and a Hear the Difference practice mode. On 12 September I connected real purchases through RevenueCat; on 18 September I produced Android build 7.

1 610 mp3 · ฿0 Tone practice build 7 · .aab
Five contours: the same sounds with a different tone become a different word.
‘Where does the voice go?’ Listen and choose the pitch direction.
Textbook dialogues with audio for every line.
October2026

Content before release

Before store submission, I am finishing the content. Example phrases previously covered only a third of the vocabulary; now every word has one, with 546 examples added in three languages and 530 new phrases prepared for audio. Another 397 words needed illustrations. For abstract concepts such as particles, months and classifiers, I developed visual metaphors and prepared a generation queue. All 397 tasks are currently marked queued. Next comes Google Play, followed by the App Store.

+546 examples 397 illustrations queued Google Play → App Store
assets/images · 438 webp
A random selection of 60 out of 438 illustrations: one style, transparent backgrounds. Today
CapyTalk · review, dictionary, comprehension
Search and categories bring the whole course vocabulary into one dictionary.
Content coverage

The whole textbook.
Lesson by lesson.

Words imported from each textbook lesson. Lesson 12 is the topic-based vocabulary appendix.

What broke

Mistakes are part of the story.

Three places where the first version looked finished but did not work.

01

A silent Android

Before
Audio relied on system text-to-speech. It worked on my phone, but another Android device had no Thai voice installed and the audio button stayed silent.
Change
A script generates every Thai string with Google Cloud TTS and bundles the MP3 files. Later runs generate only new strings, avoiding duplicate requests.
Lesson
Test on the user's device, not just your own.
02

Hard-coded content

Before
Lessons lived in code, the 1–7 list was fixed, and brand colours were repeated across screens. A school could not have added its own material without rebuilding the app.
Change
Modules became views over lesson data: categories can be selected and topics reordered without moving the underlying content. Lists come from data and branding comes from the theme.
Lesson
The data structure shapes the business model.
03

Progress without learning

Before
Opening a screen counted as learning. A lesson star could also become unreachable if a dialogue check could not be generated.
Change
Progress now counts verifiable actions, the star has a fallback path, and grammar is a reference section without a completion tick.
Lesson
Progress should mean the learner can do something.
Next: your project

I imagine, build
and ship.

Video, product, content and automation: from an idea to a working build.

Get in touch ↗ The Capymapa case ↗