A full-stack Movie & TV Show Tracker with AI-powered recommendations and a stunning Liquid Glass UI.
- Secure sign-up/sign-in with Supabase Auth
- Password reset flow with email verification
- Persistent user sessions
- Add, remove, and organize movies & TV shows
- Track watched status for movies
- Episode-level progress tracking for TV series
- View by genre, rating, or media type
- Content-based filtering using TF-IDF vectorization
- Cosine similarity matching across 10,000+ titles
- Learns from your watchlist preferences
- Real-time updates when you add new content
- Liquid Glass (Glassmorphism) design system
- Smooth animations and micro-interactions
- Fully responsive (mobile β desktop)
- Dark theme with purple/cyan accents
- Coverflow search with keyboard navigation
| Dashboard | Detail Page | Search |
|---|---|---|
| Bento grid layout with popular movies, shows, watchlist, and AI recommendations | Dynamic backgrounds, ratings, cast, trailers, and streaming providers | Coverflow navigation with real-time filtering |
| Technology | Purpose |
|---|---|
| React 19 | UI framework |
| Vite 7 | Build tool & dev server |
| React Router | Client-side routing |
| Framer Motion | Animations |
| Supabase JS | Auth & database client |
| Axios | HTTP requests |
| Technology | Purpose |
|---|---|
| Python 3.11+ | Runtime |
| Flask | REST API framework |
| Scikit-learn | TF-IDF & cosine similarity |
| Pandas/NumPy | Data processing |
| TMDB API | Movie/TV metadata |
| Feature | Implementation |
|---|---|
| Glassmorphism | backdrop-filter: blur() with rgba backgrounds |
| Color Palette | Primary: #5F099E, Accent: #00E5FF |
| Typography | Orbitron, Outfit, Oxanium, Inter |
| Responsive | Mobile-first with 7 breakpoints |
CineVision/
βββ frontend/
β βββ public/ # Static assets (videos, images, SVGs)
β βββ src/
β β βββ styles/ # Modular CSS system
β β β βββ design-system.css # Variables, utilities, animations
β β β βββ components.css # Reusable component styles
β β β βββ layouts.css # Page layout structures
β β β βββ search.css # Search page specific
β β β βββ responsive.css # All breakpoints
β β β βββ index.css # Main entry point
β β βββ App.jsx # Router & main app
β β βββ DashBoard.jsx # Home page
β β βββ Movies.jsx # Movies browse
β β βββ Shows.jsx # TV shows browse
β β βββ Search.jsx # Coverflow search
β β βββ Detail.jsx # Movie/show detail
β β βββ Watchlist.jsx # User watchlist
β β βββ Recommendation.jsx # AI recommendations
β β βββ Login.jsx # Sign in
β β βββ Signup.jsx # Register
β β βββ supabaseClient.js # Supabase config
β βββ .env.example # Environment template
β βββ package.json
β
βββ backend/
β βββ app.py # Flask API
β βββ recommender.py # ML recommendation engine
β βββ requirements.txt # Python dependencies
β βββ artifacts/ # Generated ML models (gitignored)
β
βββ .gitignore
βββ LICENSE
βββ README.md
- Node.js 18+ and npm
- Python 3.11+
- Supabase account (free tier works)
- TMDB API key (free at themoviedb.org)
git clone https://github.com/NikanEidi/CineVision.git
cd CineVisioncd frontend
npm installCreate a .env file:
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
VITE_TMDB_API_KEY=your_tmdb_api_key
VITE_API_BASE=http://127.0.0.1:5178Start the dev server:
npm run devcd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtCreate a .env file:
TMDB_API_KEY=your_tmdb_api_keyStart the Flask server:
python app.pyNavigate to http://localhost:5173 π
| Method | Endpoint | Description |
|---|---|---|
GET |
/healthz |
Health check |
POST |
/recommend |
Get AI recommendations |
POST |
/rebuild |
Rebuild ML artifacts |
{
"watchlist": [
{ "media_type": "movie", "media_id": 550 },
{ "media_type": "tv", "media_id": 1399 }
],
"limit": 20
}The CSS follows a modular architecture:
/* Import order in index.css */
@import './design-system.css'; /* Tokens & utilities */
@import './components.css'; /* Reusable components */
@import './layouts.css'; /* Page structures */
@import './search.css'; /* Search-specific */
@import './responsive.css'; /* Breakpoints (LAST) */:root {
/* Glass Effects */
--glass-bg-medium: rgba(255, 255, 255, 0.06);
--blur-md: blur(16px);
/* Colors */
--color-primary: #5F099E;
--color-accent-cyan: #00E5FF;
/* Typography */
--font-display: 'Orbitron', sans-serif;
--font-heading: 'Outfit', sans-serif;
}| Breakpoint | Width | Behavior |
|---|---|---|
| Mobile SM | < 480px | Single column, hidden nav text |
| Mobile | 480-599px | Compact cards |
| Mobile LG | 600-767px | Stacked actions |
| Tablet | 768-1023px | Bottom nav bar |
| Tablet LG | 1024-1199px | Side nav returns |
| Desktop | 1200-1599px | Full layout |
| Desktop XL | 1600px+ | Maximum content width |
This product uses the TMDB API but is not endorsed or certified by TMDB.
Movie and TV data provided by The Movie Database.
Nikan Eidi
Full-stack developer specializing in AI/ML-powered web applications.
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ and lots of β