Geobud is a simple fun geography quiz app that lets you guess countries from their photos. It is built using the latest technologies and best Modern Android Development practices.
Contributors are highly welcome. Please go through the contributing guidelines here before you start contributing.
Geobud combines education and entertainment, providing the following unique features:
- Guess countries based on photos of places and famous landmarks.
✈️ - Save your favorite photos to your phone storage. ⬇️
- Limited offline capability with photo caching.
- Browse the history of all your past photos and locations. 🖼️
- Dark and light mode. 🌓
- Single activity design.
- Clean and simple Jetpack Compose UI.
- Reset your progress so you can enjoy Geobud once more!
If you simply want to install the app, get the release apk here.
If you'd like to tinker with the source code, all you'll need is an API Key from Pexels, the API that provides photos.
In your local gradle.properties file, add the line:
PEXELS_API_KEY=<Your_API_Key>
- Kotlin - Google's preferred language for Android development.
- Jetpack Compose - Android's recommended modern UI toolkit.
- ViewModel - Lifecycle-aware stateholder class that encapsulates business logic and survives configuration changes.
- Coroutines - Kotlin's solution for asynchronous/non-blocking code.
- Flows - For reactive programming. In addition to Kotlin's flows, Android's StateFlow and SharedFlow APIs were used.
- LiveData - For lifecycle-aware observable data.
- Retrofit - Aids REST API communication.
- Room - Provides an abstraction layer over SQLite for persistent local data storage.
- WorkManager - For guaranteed execution of persistent background tasks.
- Hilt - Dependency Injection library built on Dagger.
- Preferences Datastore - To store small simple datasets persistently in key-value pairs.
- Coil - Image loading and caching library.
- Gson - Java library for JSON conversion.
- Material UI - A set of guidelines and components for building modern user-centric interfaces.
- Lottie - Lightweight JSON animations.
- MediaPlayer - Android library for audio/video playback control.
Please read through CONTRIBUTING.md if you would like to contribute to the project.
- @andy-ife - Idea & Initial work
See also the list of contributors who participated in this project.