Native android application that transforms exam .xlsx
files into user-friendly study interfaces. Built with Kotlin and Jetpack Compose with a focus in best practices, clean architecture, and robust testing to ensure a stable and scalable product.
- Multi-Module Project Structure: Organized codebase for scalability and maintainability.
- Jetpack Compose UI: Modern, declarative UI toolkit for responsive and intuitive interfaces.
- Model-View-Intent (MVI) Pattern: Predictable state management for consistent user experiences.
- Clean Architecture: Separation of concerns for easier testing and feature enhancements.
- Unit Testing: Comprehensive testing suites written with the purpose of preserving robust logics over time.
- UI Testing (screenshot testing): User action flows covered with screenshot tests to ensure a stable user experience after continuous development
- GitHub Actions Integration: Automated unit and ui testing, code coverage reports using JaCoCo and code sanity checks with Detekt.
The app follows the Clean Architecture paradigm, integrating the MVI pattern in the presentation layer.
- Presentation Layer: Handles UI rendering with Jetpack Compose and state management with a single source of truth, as part of the MVI design pattern integration.
- Domain Layer: Contains business logic and use cases.
- Data Layer: Manages data sources, including Excel file parsing and data repositories, database and web service communications.
- JDK 17
- Min version 26
- Target version 35
- SDK version 35
- Kotlin version 1.9.25
- Gradle version 8.6.1
Just install the app, navigate to the exam creation screen and provide an xlsx file like this one following this specific format:
- The first row must be the exam name.
- The second row must be the exam description.
- The third row must be the image described with a string like one of these.
- NIGHT_SKY
- SPACE_ROCKET
- BURGER
- BABY_BUDGIE
- FOREST
- BEACH
- VIDEO_GAME
- BOOKS
- CUPCAKE
- FIRST_ROBOT
- SECOND_ROBOT
- CAR
- CUPCAKE_BRIGHT
- MIC
- CANDY
- All subsequent rows will be questions, where the first row will be the question itself, the second row the right answer, and all the other rows the wrong answers.