π¬ Streamovie, an application to explore movies, create favorites lists, and discover new content via TMDB API.
π Roadmap Β |Β π Pages structure Β |Β ποΈ Project Architecture Β |Β πΈ Techs Β |Β βοΈ TMDB (API)
- Base structure with React + Vite + TypeScript
- Explore popular movies from the TMDB API
- Movie listing, search, and favorite functionality
- Create custom favorite lists
- Routing and navigation with React Router
- Global state management with Redux Toolkit
- Full responsiveness with Tailwind CSS
- Error handling and loading states
- Clean code organization and architecture
- Unit testing with Vitest and Testing Library
- Production deployment
π Home (/)
πΉοΈπ€
- Fixed header with logo, global search bar, and navigation menu
- Responsive grid displaying popular movies
- Paginated movie listing
- Each movie card displays:
- Title
- Poster (
https://image.tmdb.org/t/p/w300/{poster_path}) - TMDB rating
- Favorite icon
ποΈ Move details (/movie/:id)
πΉοΈπ€
- Large image on the left and content on the right
- Displays title, genres, release date, rating, and synopsis
- Button to add or remove from favorites
β€οΈ Favorites (/favorites)
πΉοΈπ€
- Grid layout similar to the Home page
- List of favorited movies
- Trash icon to remove a movie from favorites
- Sorting filters by:
- Title (AβZ / ZβA)
- Rating (ββ)
- Empty state with image, info message, and call-to-action
π Search (/search?q=termo)
πΉοΈπ€
- Synchronized search bar
- Results displayed in a grid layout
- Highlight of the searched term
- Paginated search results
/src
/assets
/components
/ui
/layout
/config
/features
/home
/movieDetails
/favorites
/pageNotFound
/search
/routes
/services
/stores
/tests
/types
/utils
This project was developed with the following technologies:
| dependencies | Description |
|---|---|
| Vite | Fast and optimized bundler |
| React 19 | Tha main library of the application |
| Redux Toolkit | Global state management |
| React Router DOM | Pages routing |
| ShadCN UI | Custom accessible components |
| Radix UI | Accessible components |
| TailwindCSS | Easy to style and create responsive app |
| Embla Carousel | Lib to handle carousel application |
| React Hook Form | Easy to deal with form handler |
| Lucide React | Lightweight and modern icons |
| Axios | To make API HTTP request |
| TMDB API | The Movie Database API |
| Zod | Data validation |
| devDependencies | Description |
|---|---|
| TypeScript | Static type to be more readable |
| Vitest + React Testing Library (RTL) | Unit tests |
| Others | Description |
|---|---|
| VS Code with Biome | Visual Studio Code (IDE) with Biome as linter |
The application consumes the API do TMDB to list, search, and display detailed information about movies. You need to create a free account and generate your own API Access Token.
Main Endpoints:
| Endpoint | Description |
|---|---|
/movie/popular |
List of popular movies |
/search/movie?query={termo} |
Movie search |
/movie/{id} |
Details of a specific movie |
Before running this project locally, you need to have:
Make sure you have a valid TMDB API Access Token and your environment set up.
- Create a free account: TMDB
- Generate an API Access Token: TMDB API
- Create a
.envfile based on.env.examplewith your API Access Token
VITE_TMDB_API_ACCESS_TOKEN=your_api_access_token
VITE_TMDB_API_URL=https://api.themoviedb.org/3From your command line follow these steps...
git clone https://github.com/caiohenrique-developer/streamovie
cd streamovieyarnnpm installyarn devnpm run devYou'll be able to see the URL http://localhost:{port} on your command line.
So open them and just enjoy this project! ;)
Don't forget to create your .env file based on .env.example
π Or go to streamovie-psi.vercel.app to see the project in a production environment.
βAlways running in search of new movies!β
Done with β by Caio Henrique π Get in touch!
