The Drive-In is a self-initiated product I designed and developed after noticing a recurring pattern in a Discord community I'm part of — members constantly asking for watch recommendations, sharing lists in chat, and losing track of what the group had already seen. Existing tools felt bloated for what was really a simple need, so I decided to build something purpose-built for it over a weekend. The result uses Discord Single Sign-On as its sole authentication layer, so any group already hanging out on Discord has an immediately familiar way in. Lists can also be shared publicly with anyone — no account or community membership required — keeping recommendations as frictionless as possible to pass around.
The core idea was simple: give a group of friends one shared space to manage everything they want to watch together. I designed the product around community ownership, flexible list organization, and low-friction interaction — supporting multiple communities per user, role-based access, and live updates across all members simultaneously.
UX & Feature Highlights
- Community Spaces: Designed an isolated community model where friend groups each get their own Drive-In — with the ability to belong to and switch between multiple communities without friction.
- Collaborative Lists: Built a flexible list system where communities can organize titles however they want — by genre, priority, or mood — with drag-and-drop reordering and a custom sort that persists across sessions.
- Public Sharing: Any list can be shared via a public link, viewable by anyone without an account or community membership — so recommendations can be passed around a broader Discord thread or posted anywhere without friction.
- Watched Together: Created a watched status system that surfaces who in the group has seen each title, with avatar display and overflow handling — making it easy to see at a glance what's already been covered.
- Episode Tracking: Extended watch tracking to the episode level for TV shows, so groups can follow along season by season rather than just marking a series as done.
- Reactions: Added a lightweight emoji reaction layer keyed to each title's global ID, so reactions carry across every list a movie or show appears in — no duplicate voting.
- Invite Links: Designed a shareable invite system with optional expiration and usage limits, making it easy to bring new members in without over-complicating access management.
Tech Stack Highlights
- React + Vite + React Router v7: The front end is built with React 18 and bundled with Vite for fast iteration. React Router v7 handles navigation across communities, lists, and publicly shared views.
- Supabase: Supabase powers the entire backend — Discord OAuth as the sole authentication method, PostgreSQL for the relational data model, and Postgres change streams for real-time sync that keeps every member's view live without a page reload.
- Row Level Security: All data access is enforced at the database layer through RLS policies, with custom helper functions to handle multi-tenant permission checks without triggering recursive policy loops.
- TMDb API: Movie and TV data, streaming availability, certifications, and episode information all come through The Movie Database API — giving the app rich metadata without managing a media library of my own.
- PWA + CI/CD: Shipped as a Progressive Web App with install support on iOS and Android, standalone mode detection, and automated deployments via GitHub Actions.
What I Learned
This project gave me the clearest picture yet of how much complexity lives below the surface in a multi-tenant application. Designing RLS policies that scale cleanly — and debugging the edge cases where they don't — taught me to think about security as a first-class architectural concern rather than a layer added at the end. Building real-time features with Supabase pushed me to think carefully about subscription lifecycle and how quickly client state can drift from the source of truth. And shipping a PWA that genuinely behaves well on mobile, including the nuances of standalone mode, reinforced how much of a good native-feeling experience is won in the details.