Seekly Movies: Hybrid Recommendation Platform
Seekly Movies is a premium discovery platform powered by a four-module recommendation system. Each playlist blends what you like (content signals), what similar viewers enjoy (collaborative), what your network watches (social graph), and what is trending (popularity) to deliver film suggestions that feel personal and alive.
Product Experience
Seekly Movies intentionally feels like a polished streaming product. The interface uses neon accents, soft gradients, and glass panels to keep the focus on artwork while preserving readability in both light and dark moods. Every major surface—Home hero, Discover filters, Social feed, and Player overlay—shares the same spacing system and motion curves so the product feels cohesive.
- Discovery-first layout: A hero search bar, trending rails, and genre chips that instantly filter TMDb data.
- Micro-interaction suite: Hover glows, press states, and modal transitions built with Framer Motion for silky feedback.
- Personal libraries: Users can heart, mark as watched, or “file” titles; those events flow back into the recommendation engine in real time.
- Social feed: Community rails surface Most Watched, Most Favorited, and Top Rated items with live activity counters.
Screens & Micro-interactions
A small peek at the cinematic experience: search hero, Discover filters, movie detail sheet with trailer modal, and community feed.
Platform Architecture
The app is built on the Next.js 14 App Router so every view can mix server components (for fast streaming data) and client components (for rich interactions). Supabase provides authentication, Postgres storage, row-level security, and serverless functions. Zustand manages client-side state, while TMDb feeds the catalog data. Animations rely on Framer Motion, and design tokens are implemented with TailwindCSS.
Beyond the UI, a dedicated Python service (Flask + pandas + scikit-learn) generates recommendation batches, evaluates them, and exposes APIs that the Next.js app consumes. The backend ships with Docker, automated tests, and benchmarking scripts to validate every algorithmic change before deployment.
Hybrid Recommendation Engine
Seekly’s recommendation stack purposefully blends orthogonal signals so the feed never feels repetitive. Four independent modules run in parallel, each returning a ranked list together with diagnostics. A scorer then blends them using configurable weights stored in config/recommendation-weights.json.
Content-Based Module
Jaccard similarity on genres, cosine similarity on cast embeddings, and dot-product comparisons on sentence-transformer vectors. It captures “movies like the one you just watched” without needing other users’ data.
Collaborative Filtering Module
Combines user-user (Jaccard favorites + Pearson ratings) and item-item co-occurrence models. The blend (70% user-user, 30% item-item) is tuned to surface niche picks fast when a cohort of similar people binge the same titles.
Social Graph Module
Leverages the follow graph and normalised ratings from friends to highlight what the community is actually watching. It keeps the product feeling alive and sparks conversations.
Popularity & Quality Module
Balances TMDb vote averages with Seekly engagement counters (favorites, completions). Perfect for surfacing culturally relevant releases without overwhelming the personalised feed.
Score(film) = 0.40 * Content + 0.35 * Collaborative + 0.15 * Social + 0.10 * Popularity
Evaluation & Observability
Each batch run logs Precision@K, Recall@K, NDCG@K, and MAP@K for multiple values of K (10, 20, 50). Target thresholds (Precision@20 > 0.20, Recall@20 > 0.30, NDCG@20 > 0.35, MAP@20 > 0.25) are automatically checked in CI. When a regression is detected, the pipeline flags the offending module and weight combination.
Experiment notebooks (notebooks/recommendation_experiments.ipynb) visualize score distributions, heatmaps, and ablation studies. CLI scripts (e.g., test_reco_single_user.py) make it easy to run focused diagnostics from the terminal.
Experimentation Workflow
- Data readiness: Supabase exports plus TMDb metadata are validated with
check_supabase_data.py. - Notebook prototyping: Iterate on weighting strategies, visualise recommendations, and benchmark cold-start scenarios.
- Batch scoring: Dedicated scripts benchmark the four modules independently before recombining them.
- Deployment: Docker images bundle both the Next.js front-end (served via Vercel or Node) and the Python service for on-prem experiments.
Impact & Roadmap
Seekly demonstrates how product thinking and ML systems can be developed in lockstep. The interface keeps users engaged while every click powers better models. Upcoming work includes multilingual support, episodic content, and on-device embeddings to shrink inference costs.
The platform already powers curated lists for early adopters, and the hybrid engine architecture makes it easy to plug in future models—LLM-based semantic search, retrieval-augmented critiques, or real-time co-watching recommendations.