logo

Recommendation Web App

Movie Suggestion

Movie Suggestion helps users move from vague viewing intent to a practical watchlist. It is designed for people who know the mood, genre, or style they want but do not want to scroll endlessly through catalogs.

Type

Recommendation Web App

Timeline

Built as a focused recommendation product with emphasis on discovery, filtering, and quick feedback.

Focus

Product engineering

Movie Suggestion project cover

Overview

The project was built around a familiar frustration: most users do not need every movie, they need a small set of good options that match the moment. Movie Suggestion treats this as a ranking and presentation problem instead of a simple search page.

The core experience is intentionally lightweight. A user expresses preferences, receives a curated set of recommendations, and can refine from there without facing a wall of filters.

Technical Details

  • React: Powers interactive preference selection, recommendation cards, and fast UI updates.
  • Next.js: Structures the app as a production-ready web product with optimized routing.
  • TypeScript: Models movie objects, filter inputs, and API responses with fewer runtime surprises.
  • Tailwind CSS: Creates responsive movie grids, compact cards, and consistent visual states.
  • Movie Data APIs: Provide film metadata, images, ratings, and category signals for recommendations.

Data Flow

01

The user selects preferences such as genre, mood, or viewing intent.

02

The app translates those preferences into query parameters or ranking criteria.

03

Movie data is fetched, filtered, and ordered for relevance.

04

The UI renders a short list of choices with enough metadata to support a decision.

Features & Functionality

  • Personalized Recommendations: The product returns movies based on user preference rather than only popularity.
  • Movie Cards: Each recommendation includes visual and textual context.
  • Preference-Based Filtering: Users can narrow results around the kind of movie they want.
  • Responsive Discovery Grid: Recommendations remain easy to scan on desktop and mobile.

Performance Optimizations

Image Loading

Movie posters are visual-heavy assets, so sizing and lazy loading improve perceived speed.

Client-Side Refinement

Lightweight refinements can happen without forcing full page transitions.

Result Limits

Showing a focused set improves decision-making and reduces rendering work.

Loading Feedback

Recommendation requests need visible progress so latency does not feel like failure.

Development Process

  1. 1

    The first decision was how much preference input the user should provide before seeing value.

  2. 2

    The prototype focused on fetching reliable metadata and rendering a clean result grid.

  3. 3

    Filtering and ranking were refined so the experience felt closer to guidance than basic search.

  4. 4

    Final polish focused on responsiveness, visual consistency, and a fast exploration loop.

Challenges

Working Around Rate Limits

One of the most frustrating parts of the build was dealing with movie API rate limits while testing recommendation flows. Repeated searches, filter changes, and poster lookups could quickly hit request ceilings, so the app needed a more careful request strategy: avoid unnecessary refetches, reuse already-fetched results where possible, limit how many movies are requested at once, and design the UI so users still get useful feedback when the API slows down or refuses a request.

Handling Incomplete Data

Movie APIs can return missing posters or metadata, so the UI needs fallbacks.

Recommendation Quality

Ranking rules need to support user intent, not just raw popularity.

Deployment

  • Vercel: The app fits Vercel because the frontend and lightweight server routes can ship together.

Future Improvements

User Profiles

Profiles would let the app learn from previous choices instead of starting over each session.

Streaming Provider Filters

Availability filters would make recommendations immediately actionable.

Explainable Recommendations

Showing why a movie was recommended would build trust in the ranking.

Lessons Learned

  • Discovery Needs Constraints: A smaller, better-ranked list often beats an endless catalog.
  • Data Quality Shapes UX: Fallback states are essential because external movie metadata is not always complete.
  • Rate Limits Shape Architecture: I spent a lot of time fighting the movie API rate limits while testing the app. At first I was just fetching again whenever a filter changed, but that quickly became a problem. This taught me to be more careful with repeated requests, reuse results when I already had them, and show better fallback states instead of letting the app feel broken when the API pushed back.
  • Personalization Is Iterative: Recommendation logic improves when refinement is easy.

Final Thoughts

Movie Suggestion is a compact project with a clear product lesson: good discovery is not about showing more choices, it is about helping the user make a better choice faster.