A modern movie discovery application built with React, JavaScript, Tailwind CSS, Vite, and the OMDb API.
CineVault is a responsive single-page movie discovery application designed to provide a smooth and interactive way to explore movies, search for titles, view movie details, manage a personal watchlist, and compare movies with a rule-based recommendation system.
- ๐ Movie Search โ Search for movies using the OMDb API.
- ๐ฌ Movie Details โ View detailed information about selected movies.
- โค๏ธ Watchlist โ Add and remove movies from your personal watchlist.
- โ๏ธ Movie Comparison โ Select movies and compare their details.
- ๐ค Smart Recommendation โ Rule-based recommendation system that evaluates selected movies and suggests one based on available movie attributes.
- ๐๏ธ Genre Browsing โ Explore movies through genre-based categories.
- ๐ Dark / Light Mode โ Switch between dark and light themes.
- โก API Caching โ Cache movie detail responses to reduce unnecessary API requests.
- โจ๏ธ Debounced Search โ Reduce unnecessary API calls while typing search queries.
- โณ Loading States โ Skeleton loading UI while data is being fetched.
- โ Error Handling โ User-friendly error states when requests fail.
- ๐ญ Empty States โ Clear feedback when no results are available.
- โจ Interactive Animations โ Smooth transitions and UI interactions.
- ๐ฑ Responsive UI โ Designed to work across different screen sizes.
| Technology | Purpose |
|---|---|
| React | Component-based user interface |
| JavaScript | Application logic |
| Vite | Development and build tooling |
| Tailwind CSS | Styling and responsive design |
| OMDb API | Movie data and information |
CineVault is divided into reusable React components to keep the application modular and maintainable.
Examples include:
NavbarHeroMovieCardMovieSectionSearchBarMovieModalCompareModalGenreChipsLoadingErrorMessageEmptyStateFooter
React state is used to manage application data and UI interactions such as:
- Search queries
- Search results
- Selected movies
- Watchlist
- Comparison list
- Theme
- Loading state
- Error state
- Modal visibility
Movie information is retrieved dynamically from the OMDb API instead of relying only on static movie data.
The application handles asynchronous API operations using concepts such as:
async / await- Promises
Promise.all()- Error handling
Search input is debounced so that API requests are not sent for every keystroke.
This reduces unnecessary network requests and improves the search experience.
Movie detail responses are cached using an in-memory JavaScript Map.
When cached information is available, the application can reuse it instead of requesting the same movie data again.
The interface responds to different application states:
User Action
โ
Loading
โ
โโโโโดโโโโโ
โ โ
Success Error
โ
Display Data
โ
If no results
โ
Empty State
Tailwind CSS utility classes are used to create a responsive interface that adapts to different screen sizes.
CineVault/
โ
โโโ public/
โ
โโโ src/
โ โ
โ โโโ components/
โ โ โโโ Navbar/
โ โ โโโ Hero/
โ โ โโโ MovieCard/
โ โ โโโ MovieSection/
โ โ โโโ ComingSoonCard/
โ โ โโโ GenreChips/
โ โ โโโ SearchBar/
โ โ โโโ MovieModal/
โ โ โโโ CompareModal/
โ โ โโโ Loading/
โ โ โโโ ErrorMessage/
โ โ โโโ EmptyState/
โ โ โโโ Footer/
โ โ
โ โโโ services/
โ โ โโโ omdbApi.js
โ โ
โ โโโ data/
โ โ
โ โโโ App.jsx
โ โโโ main.jsx
โ โโโ index.css
โ
โโโ .env.example
โโโ .gitignore
โโโ package.json
โโโ vite.config.js
โโโ README.md
โโโโโโโโโโโโโโโโโ
โ User โ
โโโโโโโโโฌโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโ
โ React UI โ
โโโโโโโโโฌโโโโโโโโ
โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโ
โผ โผ โผ
Search Watchlist Compare
โ
โผ
โโโโโโโโโโโโโโโ
โ OMDb API โ
โโโโโโโโฌโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโ
โ Cache โ
โโโโโโโโโโโโโโโ
Make sure you have installed:
- Node.js
- npm
git clone https://github.com/Priya76843/Cinevault.gitcd Cinevaultnpm installCreate a .env file in the project root:
VITE_OMDB_API_KEY=your_omdb_api_keynpm run devOpen the local URL provided by Vite in your browser.
CineVault uses an environment variable for the OMDb API key.
VITE_OMDB_API_KEY=your_omdb_api_keyThe actual .env file should not be committed to GitHub.
A .env.example file can be used to show the required environment variable without exposing the actual API key.
CineVault uses several techniques to reduce unnecessary work and improve the user experience:
- Debounced search to limit unnecessary API requests.
- In-memory caching to reuse previously fetched movie details.
- Reusable components to keep UI logic modular.
- Conditional rendering to display only the appropriate application state.
- Loading and error handling to provide clear feedback during asynchronous operations.
The project was developed to demonstrate practical frontend development concepts including:
- React component architecture
- API integration
- State management
- Asynchronous JavaScript
- Search optimization
- Client-side caching
- Responsive UI development
- Error and loading state management
- Interactive UI design
Possible future enhancements include:
- Personalized recommendation models
- User authentication
- Cloud-synchronized watchlists
- Advanced filtering and sorting
- Pagination or infinite scrolling
- Movie ratings and reviews
- More advanced recommendation algorithms
- Progressive Web App support
Priya Hegde
M.Tech Computer Science & Engineering
GitHub: @Priya76843
This project was developed for educational and portfolio purposes.