Play video
Kinoir
LiveOverview
Kinoir is a private, single-owner movie and television journal for recording what I watch and planning what to watch next. The Next.js application combines TMDB search and title data with a personal library, diary, watchlist, ratings, rewatch history, custom lists, and notes.
Its recommendation system blends explicit preference calibration with observed viewing signals, with optional OpenCode Zen reranking. A release calendar, Web Push alerts, Continue Watching progress, and offline logging support the day-to-day viewing workflow. The app also includes statistics across viewing periods and title details down to seasons and episodes.
Kinoir uses Neon PostgreSQL with Drizzle ORM and keeps the product single-owner by design. Its recovery workflow uses encrypted relational backups, pre-upload validation, and isolated verification before restore.
Architecture
Challenges & Solutions
Recommendations need useful signals before a new user has much viewing history.
A preference calibration provides cold-start signals, then observed watches, ratings, rewatches, and viewing states refine recommendations over time.
TMDB catalog details can become stale, while fetching every field on every visit adds unnecessary latency and provider traffic.
The app caches title metadata and refreshes season, episode, and other details on demand with explicit cache-refresh paths.
Personal viewing history needs to remain usable during network interruptions and recoverable after data loss.
Logging can queue bounded offline actions, and relational backups are encrypted and verified before a separate restore drill.
Features
- Private, single-owner library and diary for films and television series
- TMDB-backed discovery, search, title details, seasons, episodes, and catalog refresh
- Watch history with ratings, rewatches, viewing states, and runtime-aware statistics
- Watchlists, custom lists, private notes, tags, and recoverable trash
- Personalized recommendations combining preference calibration and observed viewing signals, with optional model reranking
- Release calendar, release alerts, and Web Push notifications
- Continue Watching progress and bounded offline logging with visible queue state
- Relational encrypted backups with validation and isolated restore verification