CineCircle
Swipe through films together until you match. A web app that helps couples and friends decide what to watch tonight.
→ Visit cine-circle.com// 01 · THE PRODUCT
It settles the eternal “what should we watch?”
One person creates a room and shares a code; the other joins. You both swipe through film cards independently, showing only films available on your own streaming services. The moment you both like the same film: a match, with confetti and a direct “watch now on …” button. No account needed.
0
Accounts needed to start
Realtime
Rooms synced over websockets
7 services
Streaming providers filtered
// 02 · HOW IT WORKS
Two people, one match.
❯ room.create()
01 · Create a room
One person opens a room and gets a short code. No sign-up, no friction.
❯ room.join(code)
02 · Your friend joins
They type the code and you are both in, instantly, over a realtime socket connection.
❯ onSwipe()
03 · Swipe, independently
You each swipe through film cards, filtered to the streaming services, genres and runtime you actually have. Swipe up for the synopsis, rating and where to watch.
❯ onMatch()
04 · Match
The moment you both like the same film: a fullscreen match with confetti and a direct 'watch now on …' button.
// 03 · LIVE
Try it yourself.
This is the real cine-circle.com, embedded live. It is mobile first, so the phone on the right is the main event; the desktop frame shows the two-pane version. Click a frame to swipe around in the actual app.
↳ embedded live · desktop @ 1280px · mobile @ 390px
// 04 · MY ROLE
The whole thing, end to end.
I owned the full product and development stack: the UX redesign, the design system and every animation, the realtime backend, and the deployment. That includes integrating the TMDB film database for posters and regional streaming availability, building the matching protocol over websockets, and putting it live on its own domain.
The architecture is split: a Next.js frontend on Vercel and a Node.js / Express + Socket.io backend on Railway, wired together through environment config. Rooms are kept in memory for the MVP, which keeps the account-free, join-by-code flow instant.