A full-stack movie and TV show discovery platform with authentication and a personalized watchlist.
Live Demo: https://film-pulse.netlify.app/
Frontend: https://github.com/gitmarah/filmpulse
Backend: https://github.com/gitmarah/filmpulseserver
- Search for movies and TV shows
- Browse movies and TV shows
- View detailed information about titles
- View descriptions, posters, ratings, release dates, budgets, status, and other metadata
- TMDB API integration
- User registration
- User login
- User logout
- Email verification
- Profile editing
- Profile image upload
Authenticated users can:
- Save movies and TV shows
- View their saved titles
- Mark saved titles as watched
- Remove titles from their favorites
Each favorite belongs to the authenticated user.
FilmPulse uses JWT-based authentication.
The authentication system includes:
- Access tokens
- Refresh tokens
- HTTP-only refresh-token cookies
- Protected API routes
- Password hashing with bcrypt
- JWT verification middleware
- User-specific authorization
| Category | Technologies |
|---|---|
| Frontend | React, TypeScript, Vite |
| State Management | Redux Toolkit, RTK Query |
| Routing | React Router |
| Styling | Tailwind CSS, Styled Components |
| Backend | Node.js, Express |
| Database | MongoDB, Mongoose |
| Authentication | JWT, bcrypt |
| Nodemailer | |
| File Upload | Multer |
| Image Processing | Sharp |
| Cloud Storage | AWS S3 |
| External API | TMDB API |
| Deployment | Netlify |
FilmPulse consists of a React frontend, a Node.js/Express backend, MongoDB for application data, AWS S3 for profile images, and the TMDB API for movie and TV show information.
┌──────────────────┐
│ TMDB API │
│ Movies & TV Shows│
└────────▲─────────┘
│
│
┌─────────────────────┐ │
│ FilmPulse │ │
│ Frontend │───────────┘
│ │
│ React + TypeScript │
│ Redux Toolkit │
│ RTK Query │
└──────────┬──────────┘
│
│ REST API
▼
┌─────────────────────┐
│ FilmPulse Server │
│ │
│ Node.js + Express │
│ JWT Authentication │
└──────────┬──────────┘
│
┌────┴─────┐
▼ ▼
┌──────────┐ ┌──────────┐
│ MongoDB │ │ AWS S3 │
│ │ │ │
│ Users │ │ Profile │
│ Favorites│ │ Images │
└──────────┘ └──────────┘
FilmPulse uses JSON Web Tokens for authentication.
- User submits their email and password.
- The backend verifies the credentials.
- The server generates an access token.
- The server generates a refresh token.
- The refresh token is stored in an HTTP-only cookie.
- The access token is used for protected API requests.
- The backend verifies the JWT before processing protected requests.
User
│
│ Sign In
▼
FilmPulse API
│
├── Verify credentials
│
├── Generate access token
│
└── Generate refresh token
│
▼
Authenticated User
│
│ Protected Requests
▼
JWT Verification Middleware
│
▼
Protected Resource
FilmPulse allows authenticated users to maintain a personal collection of movies and TV shows.
| Operation | Description |
|---|---|
| Add | Save a movie or TV show |
| View | Retrieve the user's saved titles |
| Check | Mark a saved title as watched |
| Delete | Remove a title from the favorites |
The backend uses the authenticated user's identity from the verified JWT rather than trusting a user ID supplied by the client.
This ensures that users can only access and modify their own favorite items.
FilmPulse uses the TMDB API as its external source for movie and TV show data.
The application retrieves information such as:
- Titles
- Descriptions
- Posters
- Release dates
- Ratings
- Genres
- Budgets
- Status
- Other available metadata
The TMDB API key is stored in an environment variable and is not committed to the repository.
Users can manage their personal profiles.
Profile functionality includes:
- First name
- Last name
- Profile image
- Profile editing
- Email verification
Profile images are processed using Sharp and stored using AWS S3.
The frontend is built with React and TypeScript.
Main areas include:
- Components
- Pages
- Redux state
- RTK Query API services
- Assets
The backend is maintained in a separate repository and contains:
- Controllers
- Models
- Routes
- Middleware
- Authentication
- Database configuration
- Services
You will need:
- Node.js
- npm
- TMDB API key
- FilmPulse backend
Clone the repository:
git clone https://github.com/gitmarah/filmpulse.git
cd filmpulseInstall dependencies:
npm installCreate a .env.local file in the project root:
VITE_TMDB_API_KEY=your_tmdb_api_keyNever commit
.env.localor any file containing secrets.
npm run devFilmPulse is deployed on Netlify.
Live Application:
https://film-pulse.netlify.app/
The backend API responsible for:
- Authentication
- User management
- Favorites
- Protected API operations
- Database operations
- Profile image handling
https://github.com/gitmarah/filmpulseserver
Full-Stack Developer
- GitHub: https://github.com/gitmarah
- LinkedIn: https://www.linkedin.com/in/abubakarr-marah-638648377/
- Portfolio: https://bokari.netlify.app/
FilmPulse is a deployed full-stack project demonstrating practical experience with:
- React
- TypeScript
- Redux Toolkit
- RTK Query
- Node.js
- Express
- MongoDB
- JWT authentication
- REST APIs
- External API integration
- AWS S3
- User authorization
- Cloud deployment
This project was created as a personal full-stack development project.




