Neil Mahajan
Personal Project
Sept 2025 - Oct 2025

Watchlist Notify

Track your personal movie & TV show watchlist across streaming platforms and automatically get email alerts when titles become available on the services you already subscribe to.

Next.js 15
React
TypeScript
Go
Gin
MongoDB Atlas
Upstash Redis
Auth0
TMDb API
Postmark
Google Cloud Run
Vercel
Docker
Cloudflare
Watchlist Notify Dashboard

Project Overview

Watchlist Notify is a full-stack web application designed to solve a common problem: you maintain a list of movies and TV shows you want to watch, but you rarely know when they become available on the streaming services you already pay for. Instead of manually checking multiple platforms or paying for rentals of content that's already included in your subscriptions, Watchlist Notify centralizes your watchlist and subscription information to automatically notify you via email when content becomes streamable.

The application features a modern Next.js frontend deployed on Vercel with Auth0 authentication, a high-performance Go backend API deployed as a serverless function on Google Cloud Run, and a scheduled digest worker that sends personalized email notifications through Postmark. The system integrates with The Movie Database (TMDb) API for comprehensive movie and TV show metadata and streaming availability information.

Built with production-grade infrastructure including MongoDB Atlas for data persistence, Upstash Redis for caching TMDb API responses, and Cloudflare for DNS management and CDN, Watchlist Notify demonstrates modern cloud-native architecture patterns and best practices for scalable web applications.

Key Features

  • Auth0 Authentication: Secure multi-provider authentication with Google OAuth and username/password login, using JWT tokens stored in HttpOnly cookies.
  • Watchlist Management: Add, update, and delete movies and TV shows with rich metadata from TMDb including posters, release dates, and descriptions.
  • Streaming Service Subscriptions: Track which services you subscribe to (Netflix, Max, Prime Video, Apple TV+, Disney+, Hulu, and more).
  • Real-time Availability Checking: Instantly see which watchlist items are available on your subscribed services with up-to-date provider information from TMDb.
  • Scheduled Email Notifications: Receive digest emails at your preferred frequency (daily, weekly, or monthly) when new content becomes available on your services.
  • Customizable Notification Preferences: Configure notification intervals, choose which email to receive alerts at, and test emails before scheduling.
  • Advanced Search: Search The Movie Database with real-time results, filtering by movies or TV shows, with detailed metadata display.
  • Redis Caching: Upstash Redis caches TMDb API responses for improved performance with graceful fallback to direct API calls.
  • Profile Management: Update display name, email preferences, and profile picture through an intuitive settings interface.

System Architecture

Watchlist Notify utilizes a modern, cloud-native architecture with clear separation of concerns between frontend, backend, and background jobs:

Frontend (Vercel)

Next.js 15 with App Router, React 19, TypeScript, and Tailwind CSS. Deployed on Vercel with Cloudflare DNS/CDN for global edge distribution. Integrates Auth0 Next.js SDK for seamless authentication flows.

Backend API (Google Cloud Run)

Go 1.25+ with Gin web framework, deployed as a containerized serverless function on Google Cloud Run. Handles authentication, user management, watchlist operations, and TMDb API integration. Validates JWT tokens from Auth0 and maintains session state via HttpOnly cookies.

Digest Worker (Cloud Run Jobs)

Scheduled Go application triggered hourly by Google Cloud Scheduler. Queries MongoDB for users with active notification preferences, checks TMDb for streaming availability, and sends personalized digest emails via Postmark API.

Data Layer (MongoDB Atlas & Upstash Redis)

MongoDB Atlas provides multi-region data persistence with automated backups for user profiles, watchlist items, subscriptions, and notification preferences. Upstash Redis caches TMDb API responses with configurable TTL to reduce external API calls and improve response times.

External Integrations

Auth0: Multi-provider authentication and user management.
TMDb API: Movie/TV metadata, search, and watch provider availability data.
Postmark: Transactional email delivery for digest notifications.
Cloudflare: DNS management, CDN, and DDoS protection.

Technical Implementation

Backend Architecture (Go + Gin)

The backend API is built with Go 1.25+ using the Gin web framework for high-performance HTTP routing. The application follows a clean architecture pattern with distinct layers for handlers, services, and data access. JWT authentication is implemented using HMAC signing with tokens stored in HttpOnly cookies for security against XSS attacks.

MongoDB integration uses the official Go driver with connection pooling and automatic index creation on startup. The Redis cache layer uses go-redis client with graceful fallback to direct TMDb API calls when cache is unavailable, ensuring high availability.

Frontend Architecture (Next.js 15)

Built with Next.js 15 App Router and React 19, leveraging server-side rendering for optimal performance and SEO. The Auth0 Next.js SDK handles OAuth flows seamlessly with automatic token refresh and session management. TypeScript provides type safety across the entire frontend codebase.

Tailwind CSS 4 powers the responsive design system with custom components for search, watchlist cards, and settings panels. Next.js Image component optimizes poster and profile images with automatic lazy loading and format conversion.

Digest Worker & Email System

The digest worker is a standalone Go application deployed as a Cloud Run Job, triggered hourly by Cloud Scheduler. It queries MongoDB for users with active notification preferences, determines which items in their watchlist are newly available on their subscribed services, and generates personalized HTML emails.

Postmark API handles email delivery with high deliverability rates and detailed tracking. Users can configure notification frequency (daily, weekly, monthly), test emails before enabling notifications, and choose which email address receives alerts.

Deployment & DevOps

The backend is containerized with Docker and deployed to Google Cloud Run for automatic scaling and zero-downtime deployments. Container images are stored in Google Artifact Registry. The frontend is deployed on Vercel with automatic builds from the main branch. Cloudflare manages DNS with CNAME records pointing to both Vercel and Cloud Run, providing edge caching and DDoS protection.

Data Model

The application uses MongoDB collections to store user data, watchlist items, and notification preferences:

Users Collection

Stores user profiles with Auth0 ID, email, display name, profile picture, and timestamps. Indexed on auth0_id for fast authentication lookups.

Watchlist Items

Each item contains TMDb ID, media type (movie/TV), title, overview, poster path, release date, and availability status. Compound index on user_id and tmdb_id ensures unique entries per user.

Streaming Subscriptions

Tracks which streaming services each user subscribes to, storing provider IDs that map to TMDb's watch provider data (e.g., Netflix=8, Prime Video=9, Disney+=337).

Notification Preferences

Contains user-specific settings including enabled status, notification frequency (daily/weekly/monthly), email address for alerts, and last notification timestamp.

Application Workflow

1

Authentication: User logs in via Auth0 (Google OAuth or username/password), receives JWT cookie, and is redirected to dashboard.

2

Subscription Setup: User selects their streaming service subscriptions from the settings page (e.g., Netflix, Hulu, Disney+).

3

Watchlist Building: User searches TMDb database for movies/TV shows and adds items to their watchlist with one click.

4

Availability Detection: Frontend fetches watch provider data from TMDb (cached in Redis) and displays availability badges on watchlist items.

5

Notification Configuration: User enables digest emails, sets frequency preference, and tests email delivery.

6

Scheduled Digests: Cloud Scheduler triggers digest worker hourly; worker checks each user's notification schedule, queries available content, and sends emails via Postmark.

Screenshots

Watchlist Notify - Landing Page
Watchlist Notify - Search Page
Watchlist Notify - Watchlist Page
Watchlist Notify - Settings: Streaming Services
Watchlist Notify - Settings: Notification Preferences
Watchlist Notify - Profile Page

Future Enhancements

  • Regional Support: Extend availability checking to international markets beyond the US with region-specific streaming services.
  • Multiple Notification Channels: Add push notifications and SMS alerts alongside email digests.
  • Instant Alerts: Per-item toggle for immediate notifications when specific titles become available.
  • Browser Extension: One-click watchlist addition directly from Netflix, Hulu, and other streaming sites.
  • Social Features: Public shareable lists and collaborative watchlists for families and friends.
  • AI Recommendations: Personalized content suggestions based on viewing history and preferences.
  • Advanced Filtering: Sort and filter watchlist by genre, release date, rating, or availability status.
  • Price Tracking: Monitor rental/purchase prices across platforms and alert on price drops.