Recursivity
All projects
Open source

TheTrades

Movies, TV, and the people who make them

View on GitHub
LanguageSwift 6 / SwiftUI · Kotlin / Compose
PlatformiOS 17+ universal, and Android
DataTMDB
LicenseMIT
  • Discover: trending this week, popular movies, and popular TV, over one search across titles and people.
    Discover: trending this week, popular movies, and popular TV, over one search across titles and people.

TheTrades browses movies, TV shows, and the people who make them, built on TMDB — universal for iPhone and iPad, and on Android too.

It exists for one feature. Every cast member's age when the title came out, shown inline on the cast row — the thing you always want to know halfway through a film and never want to leave the app to find out. Everything else is in service of getting you to that row quickly.

Features

No account, no tracking, no analytics

Saved data lives in UserDefaults on device, and the bundled privacy manifest declares no data collection. There is nothing to sign into, so there is nothing to leak.

Testing without the network

Twenty-nine tests across five suites, written with Swift Testing, and none of them touch the network. A MediaFetching protocol is the seam; the test support layer injects a stub client and an isolated UserDefaults suite. The app builds, runs in the simulator, and passes its tests on a fresh clone with no TMDB token and no Apple Developer account — without a token it simply shows an error card where the data would be.

On Android

TheTrades is on Android as well, written in Kotlin with the interface in Jetpack Compose. Same TMDB endpoints, same one reason to exist — every cast member’s age when the title came out, inline on the cast row — and the adaptive layout rebuilt in Compose so a tablet gets the wide arrangement rather than a stretched phone screen.

Stack

UISwiftUI, @Observable state, NavigationStack with typed destinations
AndroidKotlin with Jetpack Compose, adaptive for phone and tablet
ConcurrencySwift 6 with SWIFT_STRICT_CONCURRENCY: complete; the TMDB client is an actor
NetworkingURLSession + Codable — no networking dependency
ImagesNuke / NukeUI
PersistenceUserDefaults
ProjectXcodeGen; roughly 3,100 lines of app code
ReleaseOne script archives and uploads to TestFlight, defaulting the build number to the commit count