- Bearer token. This is set in the App. You can paste it into Google Keep (Google Notes) to copy paste it more easily into your device
- Minimum Android version: 11 (API level 30)
- Movie List Screen
- Paginated list of movies
- Each item displays:
- Movie title
- Original title
- Release date
- Vote average
- Load more pagination
- Loading state
- Movie Detail Screen
- Movie backdrop image using: https://image.tmdb.org/t/p/w500{backdrop_path}
- Movie title
- Original title
- Release date
- Vote average
- Vote count
- Movie overview/description
- Additional movie information (popularity, language, etc.)
- Back navigation to list
- Mandatory (Must Have)
- βοΈ Kotlin implementation with proper language features
- βοΈ Jetpack Compose UI with Material Design 3
- βοΈ Clean Architecture with proper layer separation
- βοΈ MVVM/MVI pattern with StateFlow state management
- Valorized (Nice to Have)
Hilt dependency injection with multiple modules
- βοΈ Repository pattern with proper abstraction
- βοΈ Use Cases for business logic encapsulation
- βοΈ Compose Navigation with type-safe routing
- βοΈ Comprehensive error handling and loading states
- βοΈ Efficient pagination and data loading
- βοΈ Responsive and accessible UI design
Note
No library was indicated for the HTTP Client. So I chose Ktor. JFYI: Some legacy projects use Hilt with the anottation processor KAPT. The standart is now KSP which is 2 times faster.
No library was indicated for loading Images from the API. There is still no built-in way to load non-local-app Images. So I chose Coil
I'm more used to and prefer Koin for Kotlin Injection. It's my first time using Hilt
I used version catalog of the dependencies which is now the standard for organizing dependencies
All dependencies added are followed by "Added:"
Kotlin version used: 2.2.0 (set in gradle/libs.versions.toml)
I added a unit test to test the API in an initial phase (was done before starting the UI)
- API rate limiting: 50 req/s - https://developer.themoviedb.org/docs/rate-limiting
- https://developer.themoviedb.org/reference/movie-now-playing-list
- Challenge submitted to me at 11:27 (thursday) 31/7/2025
- Deadline date: 4/8/2025 (monday) in the evening
- Finished date: 2/U/2025 (saturday)
- Submission date: 4/8/2025 (monday) at 11:06
|
|
|
|
|---|
In addition to meeting all the requirements and evaluation criteria, I also added a section in the individual movie screen that can contain up to 5 random movies in a horizontal carousel format (sometimes it appears empty because it may be requesting a (random) ID that no longer exists in the API).
The app includes a navigation drawer that allows access to the movies screen and the Bearer token configuration screen so you can use the TMDB API.
The composables (UI) are well-structured, scalable, and dynamic based on the state of the data and its values. These are also abstracted from the View Model, allowing for previews (Compose Previews) of the screens in Android Studio. And the app's theme (color palette) is based on the [company] theme.
- https://developer.android.com/training/dependency-injection/hilt-android
- https://kotlinlang.org/docs/ksp-quickstart.html
Tip
I had greats interviews with the HR recruiter, senior Android developer in the technical interview (nailed this interview) and with the CTO of the start-up. The company is not a B2B, it develops it's own product.
Didn't get in, because they found someone with better "technology and experience" level. Even though the senior Android dev told me they really needed people (multiple persons).
I was said that:
There was some difficulty in making a decision, as we had several good candidates in the process. The team really enjoyed meeting you, and the feedback was positive. They said you stood by your work and provided good solutions to problems. You did several "extras" during the challenge, and you were very focused on safety, which left a good impression.
Fun fact: in the technical interview, when the senior dev opened up his emulator, out of the multiple "movie" apps installed in his grid of apps, mine was the only one with an icon. This, plus UI/UX concerns, composable previews, extra screen for secret token setup, scalable architecture, video preview shared and doing the app in 3 days (with git history shared for proof) were apparently not enough.
I am extremely proud of my work and commitment to this job assignment, but dissapointed with the lack of foresight someone saw in me, after proving that I deliver high quality work, quickly and that I even went beyond what was requested.



