A full-stack movie recommendation platform with personalized content-based filtering, built with .NET 8.0 Web API backend and React TypeScript frontend.
- JWT-based authentication with secure login/register
- User profile management with password updates
- Account deletion with confirmation
- Trending Movies - Currently in theatres with pagination
- Popular Movies - Most popular movies with pagination
- Top Rated Movies - Highest rated movies with pagination
- Personalized Recommendations - AI-powered suggestions based on user preferences
- Advanced Search - Text search and filter-based discovery with multiple criteria
- Like/Dislike System - Heart (like) and thumbs down (dislike) buttons
- Watchlist Management - Save movies for later viewing
- Movie Details - Comprehensive movie information with genres, production companies, keywords
- Trailer Integration - YouTube trailer playback in modal
- Responsive Design - Mobile-friendly UI with Material-UI components
- Content-Based Filtering - Analyzes user's liked movies
- Multi-Factor Scoring - Genres (30%), Production Companies (20%), Keywords (15%), Rating (15%), Year (10%), Popularity (10%)
- Preference Learning - Builds user profiles from interaction history
- Adaptive Algorithm - Recommendations improve as users interact more
- .NET 8.0 Web API - RESTful API with Swagger documentation
- PostgreSQL / SQL Server - Flexible database provider with Entity Framework Core
- JWT Authentication - Secure token-based authentication
- TMDB API Integration - Real-time movie data, images, and metadata
- React 18 with TypeScript - Modern UI framework
- Redux Toolkit - State management with RTK Query
- Material-UI (MUI) - Professional component library
- Axios - HTTP client for API communication
- React Router - Client-side routing
- .NET 8.0 SDK
- Node.js 18+ and npm
- Database: PostgreSQL OR SQL Server (configurable)
- TMDB API key (Get one here)
- Clone and configure:
cd BingeBackend
cp appsettings.Development.json appsettings.json- Configure Database Provider - Choose PostgreSQL or SQL Server:
{
"DatabaseProvider": "PostgreSQL",
"ConnectionStrings": {
"PostgreSQL": "Host=localhost;Database=BingeDB;Username=your_username;Password=your_password",
"SqlServer": "Server=localhost;Database=BingeDB;User Id=sa;Password=YourPassword123;TrustServerCertificate=True;"
}
}- Complete
appsettings.jsonconfiguration:
{
"DatabaseProvider": "PostgreSQL",
"ConnectionStrings": {
"PostgreSQL": "Host=localhost;Database=BingeDB;Username=your_username;Password=your_password",
"SqlServer": "Server=localhost;Database=BingeDB;UserId=sa;Password=YourPassword123;TrustServerCertificate=True;"
},
"Jwt": {
"SecretKey": "your-super-secret-key-here-minimum-32-characters",
"Issuer": "BingeAPI",
"Audience": "BingeClient"
},
"TMDB": {
"ApiKey": "your_tmdb_api_key_here",
"BaseUrl": "https://api.themoviedb.org/3"
}
}- Setup database and run:
dotnet ef database update
dotnet run- Install dependencies and run:
cd binge-frontend
npm install
npm run dev- Access the application:
- Frontend:
http://localhost:5173 - Backend API:
https://localhost:7000 - Swagger UI:
https://localhost:7000/swagger
POST /api/auth/register- User registrationPOST /api/auth/login- User loginGET /api/auth/profile- Get user profilePUT /api/auth/profile- Update profilePOST /api/auth/change-password- Change passwordDELETE /api/auth/account- Delete account
GET /api/movies/trending- Trending moviesGET /api/movies/popular?page={page}- Popular movies (paginated)GET /api/movies/top-rated?page={page}- Top rated movies (paginated)GET /api/movies/tmdb/{tmdbId}- Movie details with videosGET /api/movies/text-search?q={query}&page={page}- Text searchGET /api/movies/discover- Advanced filtering with multiple parameters
GET /api/watchlist- User's watchlistPOST /api/watchlist- Add to watchlistDELETE /api/watchlist/{movieId}- Remove from watchlistGET /api/likelist- User's liked/disliked moviesPOST /api/likelist- Like/dislike a movieDELETE /api/likelist/{movieId}- Remove like/dislike
GET /api/recommendations/personalized?page={page}- AI recommendationsGET /api/recommendations/user-data- User preference analysis
- User Profile Analysis - Extracts preferences from liked movies
- Multi-Dimensional Scoring - Considers genres, studios, themes, ratings, and years
- Production Company Matching - Recommends movies from preferred studios
- Keyword Analysis - Matches movies with similar themes and concepts
- Avoidance Patterns - Learns what users don't like
- Tabbed Search Interface - Separate text search and advanced filters
- Multiple Genre Selection - Checkbox-based genre filtering
- Production Company Filters - Filter by studio preferences
- Keyword-Based Discovery - Find movies by themes and concepts
- Pagination Support - Efficient browsing with page controls
- Comprehensive Details - Genres, production companies, keywords, cast info
- Visual Elements - High-quality posters, backdrops, and trailers
- Interactive UI - Like/dislike buttons, watchlist management, trailer playback
For PostgreSQL:
dotnet ef migrations add MigrationName
dotnet ef database updateFor SQL Server:
# First, set DatabaseProvider to "SqlServer" in appsettings.json
dotnet ef migrations add MigrationName
dotnet ef database update
β οΈ Important: Migrations are database-specific. If you switch providers, you may need to regenerate migrations or maintain separate migration folders for each provider.
npm run build
npm run previewBingeSystem/
βββ BingeBackend/ # .NET 8.0 Web API
β βββ Controllers/ # API endpoints
β βββ Services/ # Business logic & TMDB integration
β βββ Models/ # Database entities
β βββ DTOs/ # Data transfer objects
β βββ Data/ # Database context
βββ binge-frontend/ # React TypeScript app
βββ src/
β βββ components/ # Reusable UI components
β βββ pages/ # Main application pages
β βββ services/ # API integration
β βββ store/ # Redux state management
β βββ types/ # TypeScript definitions
- JWT Authentication - Secure token-based authentication
- Password Hashing - BCrypt for secure password storage
- CORS Configuration - Proper cross-origin resource sharing
- Input Validation - Server-side validation for all inputs
- SQL Injection Protection - Entity Framework parameterized queries
- Responsive Design - Works seamlessly on desktop, tablet, and mobile
- Dark Theme - Modern dark UI with custom color palette
- Smooth Animations - Hover effects, transitions, and loading states
- Intuitive Navigation - Easy-to-use interface with clear visual hierarchy
- Accessibility - ARIA labels, keyboard navigation, and screen reader support
- Lazy Loading - Images and components load as needed
- Pagination - Efficient data loading with page-based navigation
- Caching - TMDB genre caching and optimized API calls
- Code Splitting - Optimized bundle sizes for faster loading
- Responsive Images - Multiple image sizes for different screen resolutions
- Collaborative filtering for user-to-user recommendations
- Social features (reviews, friend recommendations)
- Mobile app with React Native
- Advanced analytics and user insights
- Machine learning model improvements
- Real-time notifications
- Content moderation and admin panel
MIT License - feel free to use this project for learning and development!
Built with β€οΈ using modern web technologies for the ultimate movie discovery experience! π¬β¨