A sleek movie & TV series watchlist to share with your friends.
Track what you're watching, discover new titles, and keep your list perfectly organised.
git clone https://github.com/amorish/CineQ.git
cd CineQ- Create a free account at themoviedb.org
- Go to Settings → API → Create → Developer
- Copy your Read Access Token (the long Bearer token)
- Set it as an Environment Variable named
TMDB_TOKENin your Vercel project settings.
- Go to Firebase Console and create a new project
- Add a Web App and copy the
firebaseConfig - Paste it into
assets/js/app.js(top of file,firebaseConfigobject) - Enable Authentication → Email/Password
- Enable Firestore Database (start in production mode)
Go to Firestore → Rules and paste:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /cineq_users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
match /cineq_watchlists/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
match /{document=**} {
allow read, write: if false;
}
}
}In your Vercel project settings, add the following Environment Variables:
TMDB_TOKEN(From TMDB)FIREBASE_PROJECT_ID(e.g.,cineq-92fea)FIREBASE_WEB_API_KEY(From Firebase Project Settings)UPSTASH_REDIS_REST_URL&UPSTASH_REDIS_REST_TOKEN(From Upstash Redis)RESEND_API_KEY,RESEND_FROM, &FEEDBACK_TO(From Resend)
Open index.html directly in a browser, or deploy free on Vercel.
- Push this repo to GitHub (already done)
- Go to vercel.com → Add New Project
- Import the
CineQGitHub repository - Framework Preset: select Other (it's a static site)
- Root Directory: leave as
/(default) - Build Command: leave empty
- Output Directory: leave as
.or empty - Click Deploy - done! ✅
Vercel auto-deploys on every git push to main.
| Tech | Purpose |
|---|---|
| HTML5 / CSS3 / Vanilla JS | Core frontend - zero frameworks, ultra-lightweight |
| Firebase Auth | Secure user authentication |
| Cloud Firestore | Real-time database for watchlists |
| TMDB API v3 | Movie & TV data (1M+ titles) |
| Lucide Icons | Beautiful SVG icon set |
| Google Fonts | Outfit (headings) + Inter (body) |
| Google Calendar API | Schedule watch events |
| Vercel Edge & Serverless | Secure API proxy and backend email processing |
| Resend | Sending secure emails for verification and feedback |
| Upstash Redis | Rate limiting to prevent spam and abuse |
CineQ/
├── index.html # Main app entry point
├── robots.txt # SEO crawler rules
├── sitemap.xml # SEO sitemap
├── vercel.json # Vercel deployment config
├── package.json # Node dependencies & scripts
├── .gitignore # Git ignore rules
├── LICENSE # MIT License
├── README.md # Documentation
├── api/ # Vercel Serverless Functions
│ ├── feedback.js # Handles bug reports & feedback
│ ├── request-schedule.js # Handles Calendar Schedule approval flow
│ ├── send-verification.js # Handles email verification
│ └── tmdb.js # Secure TMDB API proxy
├── scripts/
│ ├── build.js # Build script to generate env.js
│ └── test_csv.js # Development script for parsing CSV
└── assets/
├── css/
│ ├── style.css # Complete styling with golden theme
│ └── ticket.css # Styling for the ticket export feature
├── js/
│ └── app.js # App logic, TMDB API, Firebase, UI
└── images/ # App logos, posters, and icons
Firebase Authentication with friendly error handling
Per-user data isolation (users can only access their own watchlist)
XSS protection (
escHtml) on all user-facing contentServer-side TMDB API proxy to securely hide API tokens
Email verification layer to prevent unverified accounts from exploiting storage
Disposable/temporary email blocklist on signup
SFW filter enabled by default for search & explore
Firestore security rules enforce server-side access control
No raw error messages exposed to users
- Personal Experience system (5 hearts + notes)
- New Release & Upcoming Episode Notifications
- Search within your own watchlist
- Google Sign-In (one-click login)
- Statistics dashboard & ticket export
- Friend system & shared watchlists
- PWA support (install on phone)
- Import from Letterboxd / IMDb
- Light/Dark mode toggle
- Episode-by-episode progress tracking
- Sort by score, year, name, date added
- FlowMode intelligent sequencing
- Collection watch order guides
Contributions are welcome! Feel free to fork and submit a PR.
- Fork the repo
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open source and available under the MIT License.
Created by @amorish