Skip to content

About

Flutter app for learning English vocabulary with spaced repetition (Leitner + FSRS): 10 study modes including pronunciation checks, decks, a reader, detailed stats, reminders and cloud sync. English and Arabic UI, light and dark themes.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Lexora logo

Lexora

Learn English vocabulary that sticks.
A spaced-repetition vocabulary trainer for Android, built with Flutter.

Release Flutter Dart Android flutter_bloc Hive CE

Features · Tech stack · Getting started · Screenshots


Overview

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.

Features

Learn

  • 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.

Organize

  • 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.

Track

  • 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.

Personalize

  • 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.

Tech stack

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

Architecture

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

Getting started

Prerequisites

  • Flutter 3.38.1 or newer (Dart 3.10+)
  • The Android SDK, and a device or emulator

Run

git clone https://github.com/aymansalkhatib/lexora-mobile.git
cd lexora-mobile
flutter pub get
flutter run

Configuration

Sign-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.

Development

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/.

Author

Ayman Al-Khatib · @aymansalkhatib

Screenshots

Taken from a debug build with a demo library, inside Device Preview's Pixel 9 frame.

Light theme

Home screen in the light theme: today's goal ring at 16 of 20, due and new cards, streak and totals A multiple-choice review card answered correctly, light theme The library with entry types, meanings and filters, light theme Statistics in the light theme: total reviews, accuracy, daily activity and accuracy by box

Dark theme

Home screen in the dark theme A multiple-choice review card answered correctly, dark theme The library, dark theme Statistics, dark theme

Home, a multiple-choice review, the library and statistics.

More screens: decks, the reader, Pronounce mode, reminders and the Arabic interface

Color-coded decks with mastery and due counts, light theme The reader highlighting library words in a pasted paragraph, light theme A Pronounce card with the microphone and the Type it instead button, light theme Reminder settings with three daily times, light theme

Decks, dark theme The reader, dark theme A Pronounce card, dark theme Reminder settings with three daily times, dark theme

Decks, the reader, a Pronounce card (with the switch to typing) and several daily reminder times.

Home screen in Arabic, right to left, light theme A review card in Arabic, light theme Home screen in Arabic, dark theme A review card in Arabic, dark theme

The same app in Arabic, right to left.

About

Flutter app for learning English vocabulary with spaced repetition (Leitner + FSRS): 10 study modes including pronunciation checks, decks, a reader, detailed stats, reminders and cloud sync. English and Arabic UI, light and dark themes.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages