Disclaimer: This is an unofficial, fan-made project and is not affiliated with Short of the Week.
An unofficial Android application for Short of the Week, built with modern Android development practices. This app provides a native experience for browsing, searching, and watching the incredible collection of short films curated by the SotW team. I hand parse the Articles that are written with the films instead of a webview due to the complexities.
- Dynamic Home Feed: A mixed feed of the latest films and news, similar to the website.
- News Section: A dedicated tab for articles and industry news.
- Advanced Search: Full-text search with a history of recent queries.
- Local Bookmarks: Save your favorite films for offline viewing.
- Seamless Video Playback: Integrated YouTube and Vimeo players that support fullscreen.
- Shared Element Transitions: Smooth, animated transitions from film thumbnails to the detail screen for a polished user experience.
- Parallax Detail Screen: A visually engaging film detail screen where the article content scrolls over the hero image.
- Efficient Caching: A robust caching layer (memory and disk) to minimize network usage and provide a fast, offline-first experience.
- Modern Tech Stack: Built entirely with Jetpack Compose and the latest Android architecture components.
- UI: 100% Jetpack Compose for a declarative and modern UI.
- Shared Element Transitions: Implemented with
SharedTransitionLayoutfor seamless navigation. - Material 3: For theming and UI components.
- Shared Element Transitions: Implemented with
- Architecture: Follows a MVI/Redux-like pattern using a custom
ViewModelReducerclass.- State: Single source of truth for each screen's state.
- Actions: Events triggered by the UI or system.
- Reducer: Processes actions and produces new states.
- Effects: Side-effects for one-off events like navigation.
- Asynchronous Programming: Kotlin Coroutines and Flow are used extensively for background tasks, network calls, and database operations.
- Dependency Injection: Hilt for managing dependencies throughout the app.
- Navigation: Compose Navigation for all screen-to-screen routing.
- Networking:
- Data Persistence:
- Image Loading: Glide (Compose Integration) for efficient loading and caching of images.
- Video Playback:
- Android-YouTube-Player for a robust, lifecycle-aware YouTube player.
WebViewfor the embedded Vimeo player.
The project is organized by feature, promoting separation of concerns and scalability.
com.cortlandwalker.shortoftheweek
├── core/ # Core components: ViewModelReducer, helpers, navigation
├── data/ # Data models, caching (Room), and preference stores
├── features/ # Individual feature packages (home, news, search, detail, bookmarks)
│ └── home/
│ ├── Home.kt # State, Action, Effect definitions
│ ├── HomeScreen.kt # Composable UI
│ └── HomeReducer.kt # ViewModel logic
├── networking/ # Retrofit API interface and repository implementation
│
└── ui/ # Global UI components, theme, and custom views
- Clone the repository:
git clone https://github.com/cortlandd/ShortoftheWeek-android-2.git - Open the project in Android Studio.
- Let Gradle sync the dependencies.
- Run the app
Q: you work there?
A: nah, i just like the website
