Watchly
Manage your own watchlist - fast, easy, free.
Watchly is a watchlist for everyone who watches together: friend groups, families, couples, or just yourself. It keeps track of what you’ve already watched, what you’re watching right now and what’s next, so the list doesn’t live in an Excel sheet or a forgotten note anymore.
What it is
- Entries for movies and series. Each entry has a title, platform, priority and due date, and series keep track of every season on its own.
- Groups. Create a group or join one, and share a watchlist with the people in it. Entries without a group stay private.
- Three states. Everything is either still to watch, currently watching, or done - and the list sorts itself by that.
- IMDb search. Search a title on IMDb (via OMDb) and runtime, seasons, poster and plot are filled in for you.
Why it exists
Watching something together sounds simple until nobody remembers whether you already finished season two, or which of the five recommendations you actually wanted to start. Watchly started as a small project in 2024 to fix exactly that, and got a full redesign in 2026.
Core features
| Feature | What it does |
|---|---|
| 🎬 Movies & series | One list for both, with a separate checkmark per season. |
| 👥 Groups | Shared watchlists for the people you watch with. |
| 🔎 IMDb search | Pick a title and get poster, runtime, seasons and plot automatically. |
| ⭐ Priorities | Low, medium or high, plus a platform and a due date per entry. |
| 📊 Stats | Quick counts of what’s planned, in progress and done. |
| 🔐 Google sign-in | One click to sign in, no separate password. |
Vision
- Keeping track of film series, similar to the seasons of a series.
- Leaving and managing groups.
- Recommendations for new movies and series.
- An Android app.
Technical details
Stack
| Layer | Choice |
|---|---|
| Framework | Next.js 15 (App Router, server components, server actions) |
| Language | TypeScript |
| Styling | Tailwind CSS, Radix primitives, lucide icons |
| Database | PostgreSQL with Drizzle ORM (postgres.js) |
| Auth | Better Auth - Google sign-in, sessions in Postgres |
| Validation | zod, shared between forms and server actions |
| Data | OMDb API for the IMDb title search |
Engineering decisions
- One validation schema for both sides. The same zod schemas check the forms in the browser and the server actions, so the two can’t drift apart.
- Reads with access checks in one place. All server-side reads live in a single module that checks who’s asking, and every mutation is a server action.
- Seasons as an array. Progress is one flag per season (a movie has exactly one), which keeps a series’ progress in the entry itself instead of a separate table.
- Migrations on startup. Pending migrations run when the server starts. If the database can’t be reached, startup fails instead of serving the app on an outdated schema.
Get & use Watchly
Use it
Open watchly.ntrapp.net and sign in with Google.
First run
- Add your first entry - search it on IMDb to fill in the details.
- Create a group, or join one, to share a watchlist.
- Tick off seasons as you go; finished entries move to the bottom.
Watchly - your watchlist, shared.