Inspiration

Over ten years ago, when I was just starting to learn programming, I built a much simpler version of this game - mostly an excuse to play with shaders. Then I forgot about it. This year it came back to me, and this time I knew why the idea was good: your brain holds on to whatever feels like survival, and typing is the one input you can't fake - no multiple choice, full recall, every letter through your fingers. So the old toy became a real game. Foreign words fall from the sky as enemies; type one, blast it, and it's yours for good.

Then the obvious question came: "I can spell it, but can I say it?" Typing trains recall. Speaking trains the part you actually need abroad. So in 1.4 your voice became a weapon too.

What it does

VocaBurst is a shooter that teaches languages. The loop is simple: you shoot the word, the translation reveals itself, you hear it spoken, you learn - and difficulty grows from single words to whole sentences. You fire with the keyboard, or - new in 1.4 - you tap the MIC key and say the word out loud: real-time, on-device speech to text hears you and the bolt flies. Pick the language you speak and the one you want - 15 languages, 126 pairs, 23,000+ words, voice included in all 15. The campaign spans six galaxies with difficulty rising from A1 all the way to C2, through themed planets, quizzes, SPEAK stations, boss fights and a talking robot co-pilot. Spaced repetition decides what falls next: the game brings each word back as a distress signal right before you'd forget it.

Every run earns credits, and 1.3 brought the HANGAR to spend them in: hulls, trails, turrets, beams, keyboards, pods, even a hat for Boomy the co-pilot - plus the drives that unlock EXPEDITION PLANETS, new planets inside every galaxy with real-life vocabulary you find nowhere else: restaurant, small talk, dating, airport and hotel, office and email, shopping, slang, gaming.

Every language has its own in-game keyboard (Cyrillic, kana or romaji, Hangul, right-to-left Arabic and Hebrew), and every kill plays the word's pronunciation. Runs last 2–4 minutes, work offline, no ads, no account. All of Arcade mode and the first campaign planet are free forever, plus 30 free spoken words to try voice; VocaBurst Pro (monthly, annual with trial, or lifetime - all through RevenueCat) unlocks the full campaign.

How we built it

Solo, in C# on MonoGame (.NET 10). Live on the App Store since August 19. Versions 1.3 and 1.4 together brought the HANGAR shop and voice: both are live on Google Play, while the App Store update is still waiting in review - so for now, iPhone players shoot by typing only. There is no UIKit in the game: every screen, including the keyboards and the paywall, is rendered in-engine. Monetization runs on RevenueCat's .NET bindings (I created open-source RevenueCat bindings for .NET iOS & .NET Android, by the way!) behind a small abstraction, with a stub for desktop dev. Building a desktop version (it almost ran out of the box) also let me build an automated screenshot and video pipeline fairly quickly - it turns out simulators aren't good enough for heavy graphics, and they're slow for screenshot and video capture. A single "VocaBurst Pro" entitlement is the source of truth, and the paywall is driven entirely by RevenueCat Offerings - packages, localized prices, trial eligibility and per-day price math all come from the server, so pricing changes never need a build. Sentry for crashes, Firebase for anonymous analytics, Tenjin as MMP, and a scripted pipeline for art and per-word pronunciation audio served from a CDN. That last part is by design: bundling 15 language packs would make the app too big, and download size kills conversion, especially in tier 2-3 countries.

Voice runs fully on-device: speech to text with no server round trip, so it works offline and no audio leaves the phone.

Everything around the game is automated too. CI pipelines push releases, store metadata in 15 locales, generated screenshot sets and pricing through the App Store Connect and Play APIs. This is a must: there are 63 achievements delivered through Apple Game Center and Play Games, and each one needs to be submitted separately, with assets and metadata. Without automation, preparing a release alone would take at least a few days. No automation = good luck with the Shipaton deadline!

Keyword research runs through Astro, pulling live popularity and difficulty scores per storefront. And the Apple Ads campaigns weren't clicked together in a dashboard - they were specced in the repo and created through the Apple Ads API by script. Each campaign targeted a different country, a different keyword set and a different goal (e.g. competitor brands vs discovery keywords) - also impossible without automation.

Challenges we ran into

  • Real-time speech to text, especially on Android. Out of the box it was far too slow for a game where the enemy is already falling. Getting it to real time meant hitting obstacle after obstacle - custom builds, a lot of hacks, and many late nights of optimising. That part stays my secret sauce.
  • Accuracy per language. Recognition started around 70%. Short single words are the hardest case for speech to text, and learners don't sound like native speakers - every language fails in its own way. Hours of per-language tuning later, it's 92–97% in real time, depending on the language.
  • Shipping to two stores at two speeds. Google Play approved 1.4 and it's live; the App Store update is still waiting in review. So right now the same game is two games: Android players shoot with their voice and shop in the HANGAR, iPhone players still type to shoot. Voice was the headline feature of this Shipaton sprint, and one store is still sitting on it.
  • Building keyboards for five scripts inside a game engine - RTL Hebrew and Arabic were the hardest - while keeping every key a real 44pt touch target.
  • A native-feeling paywall drawn in MonoGame: mapping RevenueCat offerings into game UI, and mocking trial data in debug because Test Store products carry no intro offers.
  • Producing and shipping 23,000 words with audio across 15 languages, alone, on a free-for-commercial-use asset budget.
  • Weird App Store rejections: being asked whether $119 lifetime is really the intended price (then waiting days for another review), an update blocked because the website supposedly had no support page, and IAP promotional images - which had already passed review once - bounced for text being too small.
  • Game Center leaderboards: on Apple's side, leaderboards default to ranking from low to high. I submitted v1 to the App Store, and the rankings came out broken. The only fix is to create a new leaderboard and submit a new build - which means another build submission. Fixed :-)

Accomplishments that we're proud of

Voice that actually works in a fast game: say the word, the bolt flies, in 15 languages, on-device and offline - from 70% to 92–97% accuracy in real time. The shader work came full circle: the thing I was toying with ten years ago now carries the whole feel of the game - custom HLSL for bloom, neon glow, screen warp and the planets, so blasting a word actually feels like something. The paywall is custom too: fully rendered in-engine, no native views, yet live-driven by RevenueCat offerings with localized prices, trials and per-day math. And the audio pipeline quietly ships pronunciation for all 23,000+ words in 15 languages, delivered from a CDN with offline packs. All of it solo, in after-work hours :)

What we learned

  • Real-time voice is a different sport. Getting speech to text to "work" was the easy 70%; getting it fast and accurate enough to play with, per language, on real phones, was where all the hours went.
  • RevenueCat's data changed my pricing before launch: lifetime at 1.5× annual is cannibalization pricing - their 2026 guidance says 2.5–4×, and yearly-dominant apps out-earn lifetime-dominant ones roughly 2:1. I repriced.
  • Distribution is the real game. Organic installs at launch were very few (around 80), so paid acquisition was the plan from the start. Apple Ads went first: I ran campaigns across 80 storefronts, all created through the API, and there was no return on investment. My read is that language learning search is crowded with VC-funded apps that can outbid a solo developer on every keyword that matters. That's an answer too - a channel closed with data instead of a hunch.
  • Keyword intuition is measurably wrong. Astro's popularity/difficulty index per storefront replaced my guesses with a real map of every storefront - which is also how I could tell that the keywords worth having were the ones I couldn't afford.
  • Playing audio needs engineering too. Otherwise your sound effects (or pronounced words) get lost under the background music.

What's next for VocaBurst

First, getting 1.4 through App Store review, so iPhone players get voice and the HANGAR too.

Then Meta Ads. Apple Ads answered its question - search traffic for language learning is too expensive for a solo game to buy at break-even. Meta is different: people aren't searching for a language app there, so the ad has to make them stop scrolling, and that is a creative problem, not a bidding war. The first campaign starts on Android in the US, optimised for tier 1 devices - the platform where voice is already live. The app already ships ATT and consent, so the plumbing is done.

The real work now is learning content: building creatives around different hooks for different player profiles - the traveller who wants to speak, the gamer who wants a real game, the learner tired of multiple choice - and finding out which content actually converts, not just which gets views. Voice gives the ads a hook typing never had: "type it, say it" is a very different promise from "typing game". An early test pre-speak-voice-mode (typing only) already gave a small signal: 2 trials, one converted ;-)

Before any ads I have done dozens iterations of the screenshot pipeline, aimed at conversion, and improved my copywriting by selling the outcome - an exercise that benefits every channel.

I also tried organic. TikTok is a dead channel for me - constantly 0 views. On Instagram I created 3 accounts; only one survived, so I deleted the other two. Instagram and YouTube Shorts seem to 'work' - around 200-600 views per video, sometimes 1k. But the current reels are automated: an AI-generated person plus game footage, and the algorithm doesn't seem to like it. Next steps there are account maturity and more real content. It's a 'random search' for what works and what absolutely does not - and the lessons feed straight into the Meta creatives.

Built With

Share this project:

Updates

Submission history