Inspiration

You just finished watching The Wire, you loved it, you love such series and they give you that feeling you can't quite put down in a single word genre like action, drama, adventure but you would like to find something similar. Underseen lets you describe it in your own words and you'll get a recommendation. _ street level drug crews and power shifts _ throws Top Boy or _ ...like the wire _ returns The Corner. That's it! Normal human interaction and not necessarily having a critic's eye.

What it does

Underseen combines a large offline movie catalogue with an on device recommendation engine. Users can choose films they like, describe their mood, or build a search profile using signals such as genre, pace, focus, and company. The app turns those choices into a recommendation without sending their personal taste data to a server. The catalogue and recommendation model live on the device. We use a compact embedding model to represent films and user descriptions mathematically, then search the bundled SQLite catalogue for films with similar meaning. This makes the recommendation process private, fast, and usable without a network connection

How we built it

The project has two main parts: A catalogue-building engine that prepares movie metadata, genres, synopses, artwork, search facets, and embeddings. An Expo and React Native mobile app that bundles the catalogue and model and performs recommendation search on the phone. The engine prepares the movie data before it reaches the app. The mobile app does not need to call an AI API for every recommendation. Instead, it embeds a user’s description locally and searches the precomputed film vectors inside SQLite. The app learns from several types of signals: Films selected during onboarding. Mood and preference choices. Films the user likes, dislikes, or marks as watched. Natural-language descriptions such as “something funny but a little sad.” Multi-select Tonight filters such as genre, pace, focus, and company. These signals are combined into a search request that returns a ranked shortlist. The app then presents one recommendation as the main result, with related films and the reason it was selected.

Challenges we ran into

The largest challenge was making a recommendation engine useful at mobile scale while keeping it private and offline. A large catalogue creates pressure on storage, startup time, memory, and search performance. We had to make careful choices about model size, vector dimensions, SQLite storage, and how much work happens during a recommendation request.

Movie data also proved more complicated than expected. Metadata came from multiple sources, and artwork was inconsistent.

Accomplishments that we're proud of

We built Underseen as a private, local-first movie recommendation app rather than another endless scrolling catalogue. We’re proud that: Recommendations are generated on the device using an embedding-based AI engine. The app can understand qualities people like, such as “patient crime storytelling” or “complex characters” instead of relying only on genres and ratings. User preferences, likes, watched titles, and selections remain local to the device. We built a complete mobile product around the engine, including onboarding, Discover, Tonight, profiles, poster browsing, movie details, rewarded ads, and Pro subscriptions. We connected RevenueCat to support a sustainable free-and-paid model without compromising the core recommendation experience.

What we learned

We learned that building an AI product is not only about choosing a model. The surrounding data, user experience, privacy model, and failure handling matter just as much.

One of the most important lessons was that personalization should not feel like permanent onboarding. Users should answer enough questions to create a useful starting point, then move into a discovery experience where the app quietly improves over time.

What's next for underseen

Next, we’re focusing on making Underseen feel excellent in everyday use. Expand and improve the movie catalogue, metadata, genres, posters, and availability information. Continue improving onboarding so the app learns someone’s taste quickly without making the process feel like a questionnaire. Improve personalisation over time using likes, skips, watched films, and saved preferences.

Share this project:

Updates

Submission history