A pixel-perfect, enterprise-grade Netflix clone featuring real-time movie data, infinite scrolling, and a fully responsive design. Built entirely with vanilla JavaScriptβno frameworks, just modern web development best practices.
Features β’ Demo β’ Quick Start β’ Documentation β’ Contributing
- β¨ Features
- π― Why This Project?
- π Live Demo
- π οΈ Tech Stack
- π¨ Design System
- π API Integration
- βΏ Accessibility
- πΈ Screenshots
- π Quick Start
- π Documentation
- π§ͺ Testing
- π Browser Support
- π’ Deployment
- π€ Contributing
- π Acknowledgments
- π§ Contact
|
π― Dynamic Content
|
π¨ Rich UI/UX
|
|
π± Responsive Design
|
β‘ Performance
|
|
βΏ Accessibility
|
π§ Technical Excellence
|
This Netflix Clone demonstrates enterprise-level frontend engineering skills:
- β Framework-Free Mastery β Proves deep JavaScript understanding without framework dependency
- β API Integration β Real-world RESTful API consumption with error handling
- β Scalable Architecture β BEM methodology, component-based design, separation of concerns
- β Production-Ready β Performance optimized, accessible, and deployment-ready
- β Best Practices β Follows industry standards for HTML, CSS, and JavaScript
Perfect for showcasing to recruiters, hiring managers, and development teams.
Note: This is a frontend-only application. No authentication is required to browse content. All movie data is fetched in real-time from the TMDB API.
Try these features:
- π¬ Browse trending and popular movies
- π Search for your favorite titles
- π± Test responsive design on different devices
- β¨οΈ Navigate using keyboard only (Tab, Enter, Escape)
| Technology | Version | Purpose |
|---|---|---|
| HTML5 | Semantic markup and structure | |
| CSS3 | Styling, animations, and responsive design | |
| ES2020+ | Application logic and interactivity | |
| API v3 | Real-time movie data and images |
| Tool | Purpose |
|---|---|
| Git | Version control |
| VS Code | Code editor |
| Live Server | Local development server |
| Vercel / Netlify | Production deployment |
| Chrome DevTools | Debugging and performance profiling |
- BEM (Block Element Modifier) β Scalable naming convention
- CSS Custom Properties β Design tokens and theming
- CSS Grid & Flexbox β Modern layout systems
- Mobile-First Approach β Progressive enhancement
- Component-Based Styling β Modular and reusable
- ES6+ Syntax β Modern JavaScript features
- Async/Await β Clean asynchronous code
- Event Delegation β Efficient event handling
- Custom State Management β Vanilla JS state system
- Module Pattern β Organized code structure
/* Primary Brand Colors */
--netflix-red: #e50914;
--netflix-black: #141414;
--netflix-dark-gray: #181818;
/* Background Colors */
--bg-primary: #141414;
--bg-secondary: #181818;
--bg-tertiary: #2f2f2f;
/* Text Colors */
--text-primary: #ffffff;
--text-secondary: #e5e5e5;
--text-muted: #808080;
/* Status Colors */
--color-success: #10b981;
--color-warning: #f59e0b;
--color-error: #ef4444;
--color-info: #3b82f6;
/* Overlay & Shadow */
--overlay-dark: rgba(0, 0, 0, 0.7);
--shadow-medium: 0 4px 12px rgba(0, 0, 0, 0.5);/* Font Family */
--font-primary: "Netflix Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
/* Font Sizes */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 2rem; /* 32px */
--text-4xl: 2.5rem; /* 40px */
--text-5xl: 3rem; /* 48px */
/* Font Weights */
--font-light: 300;
--font-normal: 400;
--font-medium: 500;
--font-semibold: 600;
--font-bold: 700;--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px */
--space-5: 1.5rem; /* 24px */
--space-6: 2rem; /* 32px */
--space-8: 3rem; /* 48px */
--space-10: 4rem; /* 64px *//* Mobile First */
--breakpoint-sm: 640px; /* Small devices (phones) */
--breakpoint-md: 768px; /* Medium devices (tablets) */
--breakpoint-lg: 1024px; /* Large devices (laptops) */
--breakpoint-xl: 1280px; /* Extra large (desktops) */
--breakpoint-2xl: 1536px; /* 2X large (large desktops) */This project uses The Movie Database (TMDB) API for real-time movie data.
| Endpoint | Purpose | Parameters |
|---|---|---|
/trending/all/{time_window} |
Fetch trending content | time_window: day or week |
/movie/popular |
Get popular movies | page, language |
/movie/top_rated |
Fetch top-rated movies | page, language |
/movie/upcoming |
Get upcoming releases | page, region |
/movie/{movie_id} |
Get movie details | movie_id, append_to_response |
/genre/movie/list |
List all genres | language |
/discover/movie |
Discover movies by filters | with_genres, sort_by |
/search/movie |
Search movies by title | query, page |
- Create a free account at TMDB
- Navigate to Settings β API
- Request an API key (developer account)
- Copy your API key and add it to
.env
TMDB_API_KEY=your_api_key_hereThis project follows Web Content Accessibility Guidelines (WCAG) 2.1 Level AA standards:
- β
Semantic HTML5 β Proper use of
<header>,<nav>,<main>,<section>,<article>,<footer> - β ARIA Labels β Screen reader support for interactive elements
- β Keyboard Navigation β Full site navigation via keyboard (Tab, Enter, Escape, Arrow keys)
- β Focus Management β Visible focus indicators on all interactive elements
- β Color Contrast β Minimum 4.5:1 contrast ratio for text
- β Alt Text β Descriptive alternative text for all images
- β Skip Links β Skip to main content for screen reader users
- β Responsive Text β Text scales appropriately for readability
| Key | Action |
|---|---|
Tab |
Navigate forward through interactive elements |
Shift + Tab |
Navigate backward through interactive elements |
Enter / Space |
Activate buttons and links |
Escape |
Close modals and overlays |
Arrow Keys |
Navigate within content sliders |
Explore detailed views of the application across different devices and features.
Hero Section & Content Rows |
Interactive Movies |
Tablet Responsive Layout |
Mobile-Optimized Interface |
Before you begin, ensure you have:
- Node.js (v14.0.0 or higher) (Optional) β Download here
- Git β Download here
- TMDB API Key β Get one free here
- A modern web browser (Chrome, Firefox, Safari, Edge)
# 1. Clone the repository
git clone https://github.com/mujeebdev3/netflix-clone-vanilla-javascript
# 2. Navigate to project directory
cd netflix-clone
# 3. Create environment file (Optional)
cp .env.example .env
# 4. Add your TMDB API key to .env
## Update this with your actual API key if running a server/backend.
TMDB_API_KEY=your_actual_api_key_here
# 5. Open with Live Server or any local server
# No build process needed - it's vanilla JavaScript!Option 1: VS Code Live Server (Recommended)
- Install the Live Server extension
- Right-click
index.html - Select "Open with Live Server"
Option 2: Python HTTP Server
# Python 3
python -m http.server 8000
# Python 2
python -m SimpleHTTPServer 8000Option 3: Node.js HTTP Server
npx http-server -p 8000Then open http://localhost:8000 in your browser.
For detailed documentation, please refer to:
- π SETUP.md β Complete setup and configuration guide
- π€ CONTRIBUTING.md β How to contribute to this project
- π‘οΈ CODE_OF_CONDUCT.md β Community guidelines
- π SECURITY.md β Security policy and reporting vulnerabilities
- Navigation bar is sticky on scroll
- Hero banner auto-rotates every 5 seconds
- Movie cards display hover effects
- Modal opens/closes correctly
- Search functionality works
- Content loads dynamically from API
- Responsive design works on mobile, tablet, desktop
- Keyboard navigation functions properly
- Error states display appropriately
Tested on:
- β Chrome 90+
- β Firefox 88+
- β Safari 14+
- β Edge 90+
- β Opera 76+
- Lighthouse Accessibility Score: 95+
- WAVE Web Accessibility Evaluation: 0 errors
- Keyboard Navigation: Fully functional
| Browser | Version | Status |
|---|---|---|
| 90+ | β Fully Supported | |
| 88+ | β Fully Supported | |
| 14+ | β Fully Supported | |
| 90+ | β Fully Supported | |
| 76+ | β Fully Supported |
- CSS Grid & Flexbox
- CSS Custom Properties (CSS Variables)
- ES6+ JavaScript (Arrow functions, async/await, template literals)
- Fetch API
- IntersectionObserver API (for lazy loading)
| Platform | Difficulty | Build Time | Custom Domain | HTTPS | CDN |
|---|---|---|---|---|---|
| Vercel | β Easy | ~1 min | β | β | β |
| Netlify | β Easy | ~1 min | β | β | β |
| GitHub Pages | ββ Medium | ~2 min | β | β | β |
| Cloudflare Pages | ββ Medium | ~2 min | β | β | β |
Contributions, issues, and feature requests are welcome!
Feel free to check the issues page or submit a new issue.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Please read our Code of Conduct before contributing.
- Follow BEM naming convention for CSS
- Use ES6+ JavaScript features
- Write meaningful commit messages (use Conventional Commits)
- Test across multiple browsers before submitting PR
- Ensure accessibility compliance (WCAG 2.1 AA)
- Update documentation for new features
- The Movie Database (TMDB) β For providing the excellent movie database API
- Netflix β Design inspiration and UI reference
- MDN Web Docs β Web development documentation
- CSS-Tricks β CSS techniques and best practices
- JavaScript.info β Modern JavaScript tutorials
- Web.dev β Performance and accessibility guidelines
- Stack Overflow β Problem-solving and debugging
- GitHub β Open-source collaboration platform
- The open-source community for inspiration and guidance
- TMDB for their generous free API tier
- All contributors who help improve this project
Created by AbdulMujeeb
Have feedback, suggestions, or questions? I'd love to hear from you!
- π Report Issues - Open an Issue
- π‘ Share Ideas - Start a Discussion





