Live

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

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

Realtime roomsAccount-freeDrag-to-swipeMatch + confettiStreaming filtersGenre & runtime filtersDesktop two-paneKeyboard controlsOnboarding tourPWA-style
Next.js 14React 18TypeScriptTailwindFramer MotionSocket.ioNode.jsExpressTMDB API

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.

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.

cine-circle.com

↳ embedded live · desktop @ 1280px · mobile @ 390px

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.