Swipe. Match. Watch.
▶ Open the app — no install, just share the room code.
Tindarr is a mobile-first web app for settling movie night with friends. It deals out the unwatched titles from a Jellyfin server as Tinder-style cards, everyone swipes, and elimination rounds whittle the yes-pile down until one title is left standing.
- Pure static SPA — hosted on GitHub Pages, nothing to install, no backend. Can host yourself locally.
- Direct to Jellyfin — the browser talks directly to your Jellyfin server's API. Only the host signs in; guests receive title data and poster images over the webrtc peer connection. Credentials never leave the host's device.
- Peer-to-peer rooms — sessions connect over WebRTC (Trystero), joined with a 4-character room code or a QR code / link.
- The flow — host opens a room → friends join, everyone is provided movie/show options and everyone swipes the list. Titles everyone said yes to go into elimination rounds (each player keeps at most half) → final face-off vote → winner revealed, runners-up listed for next time.
- To use the Github pages version a Jellyfin server reachable from the host's browser over HTTPS. If your jellyfin is only available on http you need to self host this page on your lan. See the Deploying section.
npm install
npm run dev # local dev server
npm run build # static build in dist/
npm run preview # serve the build locallyDocker (for HTTP-only Jellyfin servers) — the same files served over plain HTTP from inside your own network, where the mixed-content rule doesn't apply:
docker run -p 8080:80 registry.home.zxcv.com.au/tindarr:latestThe container is fully self-contained: it bundles its own signaling relay,
proxied at /relay on the same port. By default sessions signal only
through that relay — fully private, no public relay traffic, and LAN sessions
need no internet at all.
Set USE_PUBLIC_RELAY=true to also announce rooms on the public Nostr relay
pool, so guests using the public (GitHub Pages) app can join rooms hosted from
your container:
docker run -p 8080:80 -e USE_PUBLIC_RELAY=true registry.home.zxcv.com.au/tindarr:latestGitHub Pages — push to main; .github/workflows/deploy.yml builds and
publishes dist/. Set the repo's Pages source to "GitHub Actions". The Vite
base is relative (./), so the same build works on a project page, a custom
domain, or any subpath.
.github/workflows/ghcr.yml publishes the image to GHCR on every push to
main.
Vite · Svelte 5 · TypeScript · Trystero (WebRTC)
