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

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.