Learn English vocabulary that sticks.
A spaced-repetition vocabulary trainer for Android, built with Flutter.
Lexora helps you build a vocabulary that lasts. You add words, phrases and whole sentences; Lexora brings each one back just before you would forget it, using Leitner boxes or the FSRS memory model, and tests you in ten different ways. The interface is in English and Arabic (right to left), in a light or dark theme, and your library syncs to your account.
- Spaced repetition that adapts to you. Cards move through five Leitner boxes whose intervals stretch or shrink with an SM-2-style ease factor. Switch to FSRS-4.5 and set a target retention instead. Missed cards return later in the same session, and words you keep failing are flagged as leeches.
- Ten study modes. Flashcard, multiple choice, reverse (meaning to word), typing, fill in the blank, anagram, listening (dictation), free recall, matching, and pronounce, where you say the word aloud and speech recognition checks it. Use one mode or let Lexora mix them.
- Sessions on your terms. Study what is due, study ahead, or cram without touching the schedule. Narrow a session to a deck, a tag, an entry type or your leeches. Undo a grade, note why you missed a card, and rate your confidence before the answer appears.
- Rich entries. IPA, CEFR level, example sentences, notes, a mnemonic, collocations, tags, and links to synonyms, antonyms, word family and easily confused words.
- A fast library. Accent-insensitive search, filters, sorting, multi-select actions, and bulk add from pasted lines.
- Decks. Color-coded groups with mastery and due counts, each with its own study session.
- Reader. Paste any English text: the words already in your library light up, and any other word is one tap away from becoming an entry.
- Statistics that explain your memory. Streaks, a seven-day forecast, mastery by box, daily activity, accuracy by box, type and tag, the hour you study best, your hardest words, and a confidence-calibration chart.
- Achievements for milestones such as streaks, library size and total reviews.
- Listening and speaking. Words are read aloud with text-to-speech at the speed and accent you choose. Pronounce mode uses the platform's online speech recognizer; if it does not work on your device (for example behind a VPN), switch it off in Settings and it leaves the mode list and mixed sessions. Any pronounce card can also switch to typing.
- Reminders at up to five times a day.
- Account and sync. Sign in with email (verified by a one-time code) or with Google. The library is stored on the device and synced in the background, so it comes back when you sign in on another phone. JSON export and import (merge or replace) are built in.
- Two languages, two themes. English and Arabic with full right-to-left layout, and light, dark or system theme with a circular reveal transition.
| Layer | Technology |
|---|---|
| UI | Flutter (Material 3), Almarai and Open Sans fonts |
| State management | flutter_bloc (Cubit) |
| Dependency injection | get_it |
| Local storage | Hive CE, schema-versioned |
| Models | freezed and json_serializable |
| Networking | dio with interceptors that refresh the session |
| Speech | flutter_tts and speech_to_text |
| Notifications | flutter_local_notifications with timezone |
| Sign-in | Email and password with a verification code, google_sign_in |
Lexora follows Clean Architecture, one folder per feature (domain, data, presentation,
di). A single reactive repository owns the library: every change is written to Hive first,
then a fresh snapshot is broadcast, so all screens stay in step without depending on each
other.
The learning logic is plain Dart with unit tests: Leitner and FSRS scheduling, the session queue, answer checking, distractor selection and the statistics. Sync runs in the background: local changes are pushed after a quiet period, and signing in restores the library from the server.
| Path | Contents |
|---|---|
lib/app/ |
MaterialApp and AppCubit (theme and language) |
lib/core/ |
Dependency injection, networking, routing, Hive storage, themes, shared widgets, and services for speech, notifications and reminders |
lib/features/vocabulary/ |
Entities, scheduling and statistics logic, and the reactive repository |
lib/features/review/ |
Study sessions and the ten modes |
lib/features/*/ |
Dashboard, library, decks, entry editor, reader, statistics, achievements, settings, guide, onboarding, authentication and sync |
assets/translations/translations.json |
Every interface string, in English and Arabic |
helpers/ |
Code generators for translations and assets |
test/ |
Unit tests for the learning logic and the review session |
- Flutter 3.38.1 or newer (Dart 3.10+)
- The Android SDK, and a device or emulator
git clone https://github.com/aymansalkhatib/lexora-mobile.git
cd lexora-mobile
flutter pub get
flutter runSign-in and sync go through Lexora's REST API. The API base URL and the Google OAuth client
ID live in lib/core/constants/environment_config.dart;
point them at your own backend and Google Cloud project if you run a fork.
| Task | Command |
|---|---|
| Regenerate Freezed, Hive and JSON code after changing an entity | dart run build_runner build --delete-conflicting-outputs |
Regenerate language files and LocaleKeys after editing translations.json |
dart helpers/translation_codegen.dart |
| Regenerate asset and font constants | dart helpers/asset_codegen.dart |
| Static analysis | flutter analyze |
| Unit tests | flutter test |
Every string lives once in assets/translations/translations.json, with an en and an ar
value. Generated code is committed, so a fresh clone runs without code generation.
To preview the app on other screen sizes, set isDevicePreviewActive to true in
lib/core/constants/app_settings.dart and run a debug
build. Device Preview then frames the app, and its
toolbar includes a Take Screenshot tool that saves to Download/Lexora/screenshots.
More commands are in COMMANDS.md. The coding rules used with Claude Code are in
CLAUDE.md and .claude/skills/.
Ayman Al-Khatib · @aymansalkhatib
Taken from a debug build with a demo library, inside Device Preview's Pixel 9 frame.
Light theme
Dark theme
Home, a multiple-choice review, the library and statistics.



















