Lexicon: Vocabulary App for Android, iOS & Web

Lexicon is a vocabulary app for Android, iOS, and the web. You save the words you want to learn, review them in short sessions, and your list stays the same on every device. If you have a long text, a PDF, or a screenshot, AI can pull the words out for you.
It's on Google Play and the App Store.
Why I built it
New words end up scattered across notes apps, flashcard apps, and screenshots, and none of them talk to each other. Typing words in from a PDF or a photo by hand is slow, and progress on one device doesn't show up on another. I wanted one app that keeps everything in one place and does the tedious importing for me.
What's in it
- One Compose Multiplatform UI shared by Android and iOS.
- Review sessions that bring words back at the right time, and move them along as you learn them.
- AI imports from pasted text, uploaded files, or screenshots.
- Firebase and KMPAuth for sign-in and analytics on every platform.
- A backend I built with Spring Boot (Kotlin) and PostgreSQL that handles accounts, sync, AI imports and review reminders.
How the code is organized
composeApp- app entry point, dependency injection, platform hookspresentation- Compose screens and navigationdomain- use cases and models in plain Kotlindata- repositories, the SQLDelight database, Ktor clients, and syncplatforms&core- notifications, secure storage, shared helpersdesign-system,resources,utils,test- shared UI components, assets, helpers, and test utilities
Gallery
Under the hood
Lexicon is where I apply the same principles I use at work: scalable architecture and offline-first design. Everything the UI shows comes from the local database first and syncs with the backend in the background, so the app works without a connection. The code follows Clean Architecture, and state flows one way from repositories to the screens, which keeps review sessions predictable and easy to test.
Contributing
- Fork the repository.
-
Clone it:
git clone https://github.com/rezaiyan/Lexicon -
Copy the default configuration:
cp local.defaults.properties local.properties - Open it in Android Studio and run the app.