A full-stack recommendation platform with secure accounts, intelligent discovery, and personal watch tracking.
MovieRec helps users stop scrolling and start watching.
- Personalized recommendations driven by user behavior
- Powerful discovery tools by genre, rating, year, and sort
- Secure authentication and protected user routes
- One personal hub for favorites, wishlist, and ratings
| Capability | Outcome |
|---|---|
| JWT Auth | Secure sign up and login flow |
| Smart Discovery | Faster filtering and better exploration |
| Personalized Feed | Recommendations shaped by user choices |
| Profile Library | Favorites, watchlist, and ratings in one place |
| Responsive UI | Smooth experience across desktop and mobile |
- React 18
- Vite
- Tailwind CSS v4
- React Router
- Axios
- Lucide Icons
- Node.js
- Express.js
- MongoDB with Mongoose
- JWT Authentication
- bcrypt
- TMDB API Integration
git clone https://github.com/Omanshsingh/MovieRec.git
cd MovieReccd movie-app-backend
npm installCreate env file:
Windows:
copy .env.example .envmacOS/Linux:
cp .env.example .envSet env values:
TMDB_API_KEY=your_tmdb_api_key
PORT=5000
MONGODB_URI=your_mongodb_connection_string
JWT_SECRET=your_generated_jwt_secretGenerate a secure JWT secret:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Start backend:
npm run devcd ../movie-app-frontend
npm installCreate env file:
Windows:
copy .env.example .env.localmacOS/Linux:
cp .env.example .env.localUse:
VITE_API_URL=http://localhost:5000/apiStart frontend:
npm run dev- Frontend: http://localhost:5173
- Backend API: http://localhost:5000
| Variable | Required | Purpose |
|---|---|---|
| TMDB_API_KEY | Yes | TMDB API access key |
| PORT | Yes | Backend port |
| MONGODB_URI | Yes | Database connection URI |
| JWT_SECRET | Yes | JWT signing secret |
| Variable | Required | Purpose |
|---|---|---|
| VITE_API_URL | Yes | Backend API base URL |
- POST /api/auth/register
- POST /api/auth/login
- GET /api/movies/trending
- GET /api/movies/top-rated
- GET /api/movies/:id
- GET /api/movies/:id/recommendations
- GET /api/genres
- GET /api/discover
- GET /api/user/recommendations
- POST /api/user/favorites
- DELETE /api/user/favorites/:movieId
- POST /api/user/wishlist
- DELETE /api/user/wishlist/:movieId
- POST /api/user/rate
- DELETE /api/user/ratings/:movieId
MovieRec/
|-- movie-app-backend/
| |-- middleware/
| |-- models/
| |-- server.js
| |-- fallback-data.js
| |-- test-tmdb.js
| `-- package.json
|-- movie-app-frontend/
| |-- src/
| | |-- api/
| | |-- components/
| | |-- context/
| | |-- hooks/
| | `-- pages/
| `-- package.json
`-- README.md
Backend:
cd movie-app-backend
npm run devFrontend:
cd movie-app-frontend
npm run devTMDB test:
cd movie-app-backend
node test-tmdb.js- Verify MONGODB_URI format and credentials
- Whitelist your IP in MongoDB Atlas
- Confirm DB user permissions
- Verify TMDB_API_KEY
- Check internet connection
- Retry after rate limit cooldown
- Confirm backend is running on port 5000
- Check VITE_API_URL in .env.local
- Confirm backend CORS configuration
- JWT-based authentication
- bcrypt password hashing
- Protected API routes
- Environment-variable-based secret management
- No secrets committed to source control
Pull requests are welcome. For major changes, open an issue first.
MIT