A modern, responsive movie browsing app built with Next.js App Router. Explore curated titles, view details, and manage a watchlist with a polished UI.
# 1) Install dependencies (use your preferred manager)
npm install
# or
yarn
# or
pnpm install
# 2) Run the dev server (http://localhost:3000)
npm run dev
# 3) Create a production build, then start
npm run build && npm start- dev: Start Next.js in development mode
- build: Build the production bundle
- start: Start the production server
- lint: Run Next.js lint (ESLint)
Scripts come from package.json and target Next.js 14.
- Framework: Next.js 14 (App Router, TypeScript, image optimization disabled for local assets)
- UI & Styling: Tailwind CSS v4, Radix UI primitives,
lucide-react,geistfonts - Forms & Validation:
react-hook-form,zod,@hookform/resolvers - Charts & Carousels:
recharts,embla-carousel-react - State/Theme:
next-themes - Analytics:
@vercel/analytics
app/
layout.tsx # Root layout, fonts, providers, navbar/footer, analytics
page.tsx # Home route -> movie browser
login/page.tsx # Login page
signup/page.tsx # Signup page
title/[id]/page.tsx # Title detail page (dynamic)
watchlist/page.tsx # Watchlist page
components/ # UI and feature components (cards, rows, modals, navbar, etc.)
components/ui/ # Reusable UI primitives built on Radix + Tailwind
data/movies.json # Seed movie data
lib/ # Types and utilities
public/ # Static assets (posters, placeholders)
styles/ # Global styles
/— Home, shows featured content and rows/title/[id]— Movie details page populated fromdata/movies.json/watchlist— User watchlist (local client state)/login,/signup— Auth UI pages (form-only scaffolding)
- Responsive UI with Tailwind CSS and accessible Radix components
- Movie details view with hero backdrop, metadata, and poster
- Watchlist link entry point and navigation via
Navbar - Client-side data via
data/movies.jsonand image assets inpublic/ - Theming via providers and
next-themes - Analytics integrated in root layout
next.config.mjsimages.unoptimized: true(serves local images without Next Image Optimization)eslint.ignoreDuringBuilds: true,typescript.ignoreBuildErrors: true(developer convenience)
tsconfig.json- Strict TypeScript settings, path alias
@/*to project root
- Strict TypeScript settings, path alias
- Fonts are loaded in
app/layout.tsx(Poppins,GeistMono). - Global shell is provided by
Providersinapp/providers.tsx, withNavbarandFooterwrapped inSuspense. - Home route renders
components/home-browser. - Title details page reads from
data/movies.jsonusing the dynamic route param.
- Movie posters live under
public/images/posters/*.jpg. - Placeholder images exist in
public/for missing assets. - Sample data structure is defined with TypeScript types in
lib/types.ts.
- Uses Radix primitives for accessible components.
- Keyboard-friendly navigation and focus states via Tailwind.
This app can be deployed to any Node-compatible host or to Vercel.
# Build
npm run build
# Start
npm startOn Vercel, import the repo and build settings are detected automatically for Next.js.
MIT — see LICENSE (add a license file if you plan to open-source).
- UI primitives from Radix UI and Tailwind CSS community
- Icons by
lucide-react - Analytics via Vercel Analytics