A social movie-tracking platform where users can log, rate, and share the films they've watched. CINETRACKER combines personal film statistics with community features and a gamified achievements system.
Authentication & Security
- Email/password sign-up with 6-digit email verification
- JWT authentication via secure HTTP-only cookies
- Password reset via email (1-hour token)
- Google reCAPTCHA v3 on sign-up and password reset
- Guest login for instant demo access without registration
Movie Management
- Live TMDB search to add films to your library
- 5-star personal rating and watch-date tracking
- Edit or delete films (cascades to related posts & activity entries)
Custom Lists
- Create and name personal film collections
- Add or remove movies from any list
Social Features
- Friend system: send, accept, decline, and remove friends via privacy-safe custom IDs (not internal MongoDB IDs)
- Browse a friend's film library and activity feed
Posts & Reviews
- Write film reviews with title, description, and rating
- Like and comment on posts
- Global and user-scoped post feed
Statistics
- Total films watched, combined runtime, average rating
- Best and worst films overall and by year
- Genre distribution with percentage breakdown
- Year-based filter across all stats
Achievements
- Genre-based and quantity-based badges
- Multi-tier difficulty levels
- Unlock tracking with timestamps
| Layer | Technology |
|---|---|
| Frontend | React 18, Vite 6, Chakra UI 2, Zustand 5, React Router 7, Framer Motion |
| Backend | Node.js, Express 4, MongoDB (Mongoose 8) |
| Auth | JWT + HTTP-only cookies, bcryptjs |
| File Uploads | Multer, Cloudinary SDK |
| Mailtrap | |
| External APIs | TMDB, OMDB, Google reCAPTCHA v3 |
- Node.js 18+
- MongoDB Atlas account (or local MongoDB)
- Accounts for: TMDB, OMDB, Mailtrap, Cloudinary, Google reCAPTCHA
# Clone the repository
git clone https://github.com/your-username/cinetracker.git
cd cinetracker
# Install backend dependencies
npm install
# Install frontend dependencies
npm install --prefix frontendCopy .env.example to .env and fill in your credentials:
cp .env.example .env| Variable | Description |
|---|---|
MONGO_URI |
MongoDB connection string |
JWT_SECRET |
Strong random string for JWT signing |
TMDB_API_KEY |
API key from themoviedb.org |
OMDB_API_KEY |
API key from omdbapi.com |
MAILTRAP_TOKEN |
Mailtrap API token for transactional emails |
CLOUDINARY_* |
Cloudinary cloud name, API key, and secret |
GOOGLE_WEBSITE_TOKEN |
reCAPTCHA v3 site key (public) |
GOOGLE_SECRET_KEY |
reCAPTCHA v3 secret key (server-side only) |
CLIENT_URL |
Frontend URL for CORS (e.g. http://localhost:5173) |
PORT |
Backend port (default: 5000) |
# Start backend (with nodemon)
npm run dev
# Start frontend (in a separate terminal)
cd frontend && npm run devnpm run build # builds the frontend into /frontend/dist
npm run start # serves frontend + API from Expresscinetracker/
├── backend/
│ ├── config/ # Database connection
│ ├── controllers/ # Route handlers
│ ├── mailtrap/ # Email templates & config
│ ├── middleware/ # Auth, reCAPTCHA, file validation
│ ├── models/ # Mongoose schemas
│ ├── routes/ # Express routers
│ └── server.js
├── frontend/
│ └── src/
│ ├── components/
│ ├── pages/
│ ├── store/ # Zustand stores
│ └── modules/
├── .env.example
└── package.json
8 MongoDB collections: User, Movie, Post, Comment, Update, List, Achievement, UserAchievement
MIT