Swipe on movies and TV shows with your partner until you find a match.
- Install dependencies
npm install- Build the title deck from your CSVs
npm run build:titles- Configure Firebase
- Create a project at Firebase Console
- Enable Authentication → Sign-in method → Email/Password
- Create a Firestore database (start in production mode, then paste rules from
firestore.rules) - Add a Web app and copy the config values
- Copy
.env.example→.envand fill in theVITE_FIREBASE_*values
- Run the app
npm run dev- Each person creates an account with a unique alphanumeric display name and a password (6+ characters).
- On another phone or browser, use Sign in with the same name + password.
- One person types the other’s display name on the Sync screen.
- Swipes sync under a shared couple document. Mutual Yup or either person’s You Gotta See It creates a match splash and saves to Matches.
Name-only accounts (no password) won’t work with Sign in. In Firestore, delete old docs under users/ (and related couples/ if you want a clean slate), then create fresh accounts with passwords.
- Push this repo to GitHub.
- In the repo: Settings → Pages → Source: GitHub Actions.
- Add repository secrets for each
VITE_FIREBASE_*value (same names as in.env). - Push to
main(or run the Deploy to GitHub Pages workflow manually).
Optional local deploy without Actions:
npm run deploy(Uses gh-pages; requires GitHub auth.)
Paste the contents of firestore.rules into Firebase Console → Firestore → Rules → Publish.
| Script | Purpose |
|---|---|
npm run dev |
Local Vite server |
npm run build:titles |
Merge/dedupe CSVs → public/titles.json |
npm run build |
Titles + TypeScript check + production build |
npm run preview |
Preview production build |
npm run deploy |
Publish dist/ via gh-pages |
The deck is built from:
IMDb_Top_250_Movies.csvIMDb_Top_250_TV_Shows.csvIMDb_Top_100_Most_Popular_Movies.csvIMDb_Top_100_Most_Popular_TV_Shows.csv
Titles are deduped by IMDb Title ID and tagged with which list(s) they came from.