Skip to content

mattmook/cv

Repository files navigation

CV sample app

Overview

The project demonstrates a Kotlin Multiplatform Mobile app with list-detail views.

Only the Android app currently functions. I will implement the iOS app later.

Setup instructions

Open the project in Android Studio 4.1.2, or execute ./gradlew installDebug from the command line.

Run tests and static analysis with ./gradlew check. Run espresso tests with ./gradlew connectedCheck.

Approach

Architecture

The project uses Kotlin Multiplatform Mobile for the shared repository layer of the app. This layer users Ktor for networking and SQLDelight to cache responses in a database.

The Android app is built using MVI with the Orbit MVI library that I co-authored.

Dependency injection is setup using Dagger Hilt.

Views use RecyclerViews and Groupie to help build reusable shared components configured to match a design system.

Animations have been implemented through AnimatedVectorDrawable created using Shape Shifter and MotionLayout.

Testing

ViewModels logic tests use the Orbit Unit Testing module, which allows testing the interactions in isolation.

The network layer has an integration test to verify the contract with the backend.

Future improvements

  • Implement iOS application

  • Investigate MotionLayoutSavedStateViewModel for memory leaks, potentially using lifecycle aware components for binding

  • Additional testing

    • Implement screenshot/interaction tests once Orbit MVI has support
  • Setup CI

  • Add additional content

    • Education section
    • Medium blog posts
    • Conference talks
    • Open-source software
  • Migrate to Jetpack Compose

  • The app currently doesn't log any data or exceptions, and could potentially use Timber.