[updated] - Mkvcinema.online
// 3️⃣ Pull top‑rated movies in those genres not already in watchlist const excludedIds = new Set(watchlist.map(e=>e.movie_id)); const candidates = await db.select('movies') .whereIn('genres', topGenres) // Postgres array containment .andWhereNotIn('id', [...excludedIds]) .orderBy('imdb_rating', 'desc') .limit(15);
-- Movies (existing) CREATE TABLE movies ( id BIGSERIAL PRIMARY KEY, title TEXT NOT NULL, year INT, imdb_id TEXT UNIQUE, poster_url TEXT, genres TEXT[] -- e.g. 'Action','Sci-Fi' -- other metadata … ); mkvcinema.online
// pseudo‑code async function getRecommendations(userId) { const watchlist = await db.select('watchlist') .where(user_id: userId) .join('movies', 'movie_id', 'movies.id'); // 3️⃣ Pull top‑rated movies in those genres
A that not only stores the movies a user wants to see, but also pushes personalized recommendations based on: | 2 weeks | | Offline Sync |
| Feature | Description | Effort | |---------|-------------|--------| | | Use matrix factorization (ALS) or neural nets to generate recommendations beyond rule‑based. | 2–3 weeks (data pipeline) | | Social Watchlists | Let users follow friends and see their public watchlists. | 2 weeks | | Offline Sync | Store watchlist locally on the client, sync when back online. | 1 week | | Premium “Smart Queue” | Auto‑queue next episodes/movies based on watch‑time, with optional ad‑free mode. | 3 weeks | | Gamification | Badges for “First 10 movies watched”, “Sci‑Fi aficionado”, etc. | 1 week |