Inspiration
Inspiration came from my wife who cannot speak any word in my native Lithuanian language. As a result, I wanted to build something truly meaningful with a big purpose behind it. With a motivating purpose behind it, I set out to build the best Lithuanian language learning app for Android as that is what I am skilled in.
What it does
Once onboarded, the app presents a user with a list of lessons to choose from. Once the user opens a desired lesson, a learning card will be presented with an English word and a translation to Lithuanian. User is able to click the Play button and hear the pronunciation of the Lithuanian word. Along the way, user is able to mark the word as favorite which will then be saved and will be possible to view it in the Favorites tab accessible from the main screen. Once user goes through all of the cards, then a quiz pop up where an English word is given and the user needs to select the correct Lithuanian word from 4 different options. Once selected, either a success or a failure sound is played and the corresponding color lights up. Any of the words that user answered incorrectly will be recorded as words that need to be revised.
The app also has a nice user onboarding flow with simple questions followed by the authentication flow that consists of user registration, sign in and forgot password functionality. However, to reduce the friction, user is allowed to just continue as a guest. Finally, there is a separate screen which has account deletion functionality along with the Privacy Policy.
How we built it
It was built only by me - Mantas Butenas - a solo Android Developer representing the company Kotlisoft MB which is registered in Lithuania. I built it using Kotlin as a main programming language and Jetpack Compose for UI. The only need for a server is for Authentication purposes which was solved by using Firebase Authentication. Also, there is a need for internet connectivity when it comes to payments handling. The reason why it works so well offline is because all of the data is fetched from a static CSV file and stored locally in the database. Database also handles the favorites and revision updates. Images were generated using ChatGPT, while audio and sound effects were generated using ElevenLabs.
Challenges we ran into
The most challenging part was to design the database schema for local data storage. Also, it was some learning curve when it came integrating a paywall into the Android app and eventually testing it.
Accomplishments that we're proud of
I am very proud of the fact that this Android app was built in mind of offline first approach. As a result, the app works great even when there is no internet connection. The only part where network connectivity is needed is the Firebase Authentication flow as well as account deletion flow. I am also very happy that the app looks visually nice and works as expected with payments integration.
What we learned
One of the most important lessons which I learned was that it is very important to ship early and iterate often. Also, it is better to ship early without the app being perfect, but doing something functional and useful. The best is to focus on the core features and leave the authentication towards the end by enabling "Continue as a Guest" option. From technical point of view of view, I was able to learn how to integrate a paywall solution using RevenueCat SDK. Also, I improved my skills in writing a cleaner code with a clean architecture.
What's next for Learn Lithuanian Android App
The list of what's next for Learn Lithuanian Android App:
- Adding in local audio files for the existing Lithuanian words.
- Adding in more icons representing a specific word.
- Developing situational phrases and dialogs functionality.
- Developing a dedicated grammar section.
- Migrating to Kotlin Mobile Multiplatform with the purpose of publishing on iOS as well.
Built With
- android
- android-studio
- chatgpt
- clean-architecture
- clean-code
- elevenlabs
- firebase
- firebase-authentication
- firebase-crashlytics
- hilt
- jetpack
- jetpack-compose
- kotlin
- mvi
- perplexity
- revenuecat
- room
Log in or sign up for Devpost to join the conversation.