All projects

MovieHouse

Live

Full-stack movie discovery app powered by the TMDB API, with search, filtering, and server-side rendering.

MovieHouse

Stack

  • Node.js
  • Express.js
  • EJS
  • Tailwind CSS v4
  • Zod
  • TMDB API

The problem

Built as a hands-on project during a full-stack web development course, with a deliberately real-world brief: a movie-discovery app that feels production-ready, not a toy CRUD exercise — fast search, meaningful filtering, and details worth reading, all on top of a third-party API with its own rate limits and quirks.

Approach

Solo build, backend-first: Express serves server-rendered EJS views, with a dedicated service layer wrapping the TMDB API so the rest of the app never talks to it directly. Every user input — search terms, filters, pagination — is validated with Zod before it reaches that layer.

Key decisions

  • 5-minute response caching (node-cache) in front of TMDB, so repeated searches and popular-lists don't re-hit the upstream API on every request.
  • Rate limiting and Helmet security headers, so the app behaves well under load and is reasonably hardened by default.
  • Advanced filtering (genre, year, rating, sort order), horizontal carousel sliders for popular/top-rated titles, and deep-links out to streaming services.
  • Custom 404/500 pages and sanitized error messages in production, instead of leaking stack traces.

Result

Deployed on Render and running as a public demo. Roadmap items I've deliberately left for later — TV shows, genre pages, watchlists — are tracked openly in the repo rather than left unspoken.

Hosted on a free tier — the first request takes ~30s to wake the server.

Want something like this? Get in touch