Learning English offline: the methods and on-device AI behind Hack Não English
Hack Não English teaches 1500 words across iOS, Android, web, and macOS, with an AI pronunciation and grammar coach that runs entirely on the phone. Here are the learning methods and the cross-platform, on-device stack that powers them.
Most English apps are a thin shell over a server: the flashcards, the speech scoring, the grammar feedback all live in the cloud, and the moment you lose signal the app stops teaching. Hack Não English is built the other way around. The vocabulary, the pronunciation practice, and even the AI coach all run on the device, so it works on a plane, on the subway, or on a cheap phone with a spotty connection. This post covers the learning methods it uses, and the cross-platform, on-device engineering that makes them possible.
The learning methods
The app is organised around a simple idea: learn words in context, practise them out loud, and get corrected as you go. Five methods sit on top of that.
Themed vocabulary, not a flat wordlist. The 1500 words are grouped into 14 crawled-and-curated topics: everyday life, family, food, shopping, then the exam sets (TOEIC office / travel / finance, IELTS health / tech / education / environment) and the competition sets (phrasal verbs, idioms, advanced). You study a cluster of related words together, which is far easier to retain than a random list, and you can filter by goal, whether that is TOEIC, IELTS, or general fluency.
A habit loop, not a cram session. The home dashboard is closer to a fitness tracker than a textbook. A streak card counts consecutive study days, a bar chart shows when during the day you actually study, a week picker marks the days you have data, and a daily goal keeps the sessions short and regular. Spacing practice across days beats one long session, and the loop is designed to make that the path of least resistance.
Speaking and pronunciation, on the device. A floating record button captures your voice, runs on-device speech recognition, and lets you play it back, while text-to-speech reads each word so you can shadow the correct pronunciation. Saying words out loud and hearing yourself is the part most apps skip; here it needs no network round-trip.
An AI coach that explains your mistakes. Write or speak a sentence and the AI Coach returns a score, the corrected sentence, a per-error explanation in Vietnamese, and a CEFR level. The explanations are the point: knowing that a sentence is wrong is not learning, understanding why is. And because it runs locally, you can iterate as many times as you like with no cost per correction.
A CEFR placement test. A four-skill test (listening, speaking, reading, writing) spanning A1 to B2 scores automatically, shows the level you reached, saves your history, and exports a PDF you can share. It gives the whole thing a destination: a level to place into and a number to move.
The AI, running entirely on your phone
The coach is a real language model, not a call to someone else’s API. It runs llama.cpp with a GGUF model through flutter_llama, using a FightTech fork of the runtime that rebuilds the native libraries to fit our constraints: 16 KB-aligned libs for the Android 15+ Play requirement, and an iOS build tuned to keep older devices in range.
Grammar analysis lives in a dedicated ai_engine package with a clean seam: an LlmRuntime abstraction drives the on-device model, and a HeuristicLlmRuntime fallback keeps the coach useful even before the model is downloaded or on hardware that cannot host it. A prompt builder and a robust JSON parser turn the model’s output into the structured result the UI shows.
Speech recognition is on-device too, via ML Kit, and it is deliberately pinned to the last version that still targets iOS 12–14 rather than jumping to a build that would drop those devices. The whole design follows the same principle as the rest of what we build: no server dependency, no per-request bill, and a floor low enough that an old phone is still invited in.
One codebase, four platforms
Hack Não English is a single Flutter app that ships to iOS, Android, web, and macOS. The architecture is Clean Architecture with flutter_bloc for state, get_it and injectable for dependency injection, and fpdart for typed error handling. Vocabulary and tests are bundled as JSON assets so the app is fully functional offline on first launch.
The interface adapts to each platform instead of pretending they are all the same: a floating pill navigation bar on Android, a native CNTabBar on iOS and macOS, Liquid Glass effects on iOS 26, Material Design on Android, and a ripple shader on the streak card. It is bilingual (English and Vietnamese) end to end, with four colour presets and light, dark, and system themes.
Why build it this way
The methods and the engineering push in the same direction. Learning a language is a daily habit that should not depend on a connection, a subscription, or a recent phone. So the vocabulary is bundled, the practice is local, the AI runs on the device, and the whole thing works across every screen a learner might already own. The hard part was not any single feature; it was keeping all of it offline and keeping the device floor low while still shipping a real model on the phone.
You can try it right now, no install, in the web app.