A Netflix-inspired family movie voting app with weekly phases, PIN authentication, live search, rating system, and cinematic UI.
- Each family member sets a unique 4-digit PIN
- Auto-login with session persistence
- Personal user icons (60+ emoji options)
- Secure, simple, no passwords needed
-
Monday-Wednesday: Nomination Phase ๐ฌ
- Each person nominates 1 movie
- Auto-advances when all 4 nominate
- Browse 16+ genre categories
-
Thursday-Friday noon: Voting Phase ๐ณ๏ธ
- Everyone votes for their top 2 picks
- Can't vote for own nomination
- Live countdown timer to deadline
-
Friday evening-Sunday: Results Phase ๐
- ๐ฅ 1st place = Friday movie
- ๐ฅ 2nd place = Saturday movie
- Special gold/silver styling
-
Auto-reset every Monday - Previous weeks archived
- Horizontal scrolling movie rows
- Big cinematic 16:9 banners
- TMDb ratings & metadata
- Smooth hover animations
- Dark theme optimized for viewing
- Mobile-responsive design
- Live autocomplete - Suggestions appear as you type
- 16 Genre Categories: Action, Comedy, Thriller, Crime, Drama, Romance, Horror, Sci-Fi, Fantasy, Animation, Family, Mystery, and more
- Search categories: Trending, Popular, Top Rated, In Theaters
- Movie banners with ratings and years
- Rate movies 1-5 stars after watching
- See average ratings from all family members
- "My Ratings" tab shows your personal rating history
- Track what everyone thought of each movie
- View past winners & votes
- Week-by-week history
- Rate previous weeks' movies
- Keep track of what you've watched
- Node.js (v14+)
- TMDb API key (free)
-
Clone the repository:
git clone https://github.com/erix/movie-night-app.git cd movie-night-app -
Install dependencies:
npm install
-
Get a TMDb API key:
- Go to https://www.themoviedb.org/settings/api
- Sign up for a free account
- Copy your API key
-
Create .env file:
cp .env.example .env
-
Add your TMDb API key to
.env:TMDB_API_KEY=your_actual_key_here PORT=3000
-
Start the server:
npm start
Or for development with auto-reload:
npm run dev
-
Open in browser:
http://localhost:3000
On your local network:
http://192.168.1.100:3000 (wired)
http://192.168.1.101:3000 (wireless)
Everyone can vote from their phones, tablets, or computers!
- Open the app
- Click "First time? Set up your PIN"
- Select your name
- Create a 4-digit PIN
- Choose your personal icon
- Log in with your PIN
- Browse movie categories or search by title
- Click a movie to see details
- Click "Nominate This Movie"
- Wait for others to nominate
- Log in
- Vote for your top 2 picks (can't vote for your own)
- Watch the countdown timer
- Change votes anytime before deadline
- See the winners:
- ๐ฅ Gold = Friday movie
- ๐ฅ Silver = Saturday movie
- Watch your movies!
- Rate them 1-5 stars after watching
- Check "Previous Weeks" tab for history
- Erik
- Timea
- Jรกzmin
- Niki
(Configured in server.js - customize for your family!)
All data stored in data.json:
- User PINs and icons
- Current week nominations & votes
- Movie ratings
- Previous weeks archive (last 12 weeks)
- No database required!
- Backend: Node.js + Express
- Frontend: Vanilla HTML/CSS/JavaScript
- APIs:
- TMDb (search, browse, metadata)
- RPDB (high-quality movie posters)
- Storage: JSON file
- Fonts: Bebas Neue (Google Fonts)
| Day | Phase | Actions |
|---|---|---|
| Monday | Nomination | Propose 1 movie |
| Tuesday | Nomination | Propose 1 movie |
| Wednesday | Nomination | Propose 1 movie |
| Thursday | Voting | Vote for 2 movies |
| Friday (until noon) | Voting | Vote for 2 movies |
| Friday (afternoon) | Results | Winners announced |
| Saturday | Results | Movie night! |
| Sunday | Results | Archive & prepare reset |
Every Monday at midnight, the system:
- Archives last week's data to history
- Calculates final ratings
- Resets nominations & votes
- Starts new nomination phase
- Keeps last 12 weeks of history
- 1 nomination per person per week
- Must vote for exactly 2 movies
- Can't vote for your own nomination
- Voting closes Friday at noon
- Winners determined by vote count
- Rate movies anytime after watching
- Type to search - suggestions appear instantly
- 300ms debounce for smooth typing
- Up to 8 suggestions with movie banners
- Click any suggestion to view details
Action, Comedy, Thriller, Crime, Drama, Romance, Horror, Sci-Fi, Fantasy, Animation, Family, Mystery, Trending, Popular, Top Rated, In Theaters
- Click 1-5 stars to rate
- See average rating + number of votes
- "My Ratings" tab shows your history
- Ratings persist across weeks
- Touch-friendly buttons (44px+)
- Responsive grid layouts
- Optimized font sizes
- Proper viewport settings
- Works on phones, tablets, desktops
Change in .env:
PORT=8080Edit server.js to add/remove users:
const initialData = {
users: {
'Your Name': { icon: '๐ค', pin: null },
// ... add more
},
// ...
};- Netflix-style logo with popcorn bucket
- Phase indicator banner
- Nominated movies grid
- Browse categories
- Live autocomplete dropdown
- Movie banners with ratings
- Click to view details
- Previous weeks archive
- Star ratings
- Average ratings display
This is a personal family project, but feel free to fork and customize for your own family!
MIT License - Feel free to use and modify for your family!
Built with โค๏ธ for family movie time ๐ฟ๐ฌ
Version 2.0 - Netflix UI + Weekly Phases + PIN Auth + Ratings