A React-based movie exploration app with Firebase authentication, Firestore integration, and a dynamic UI powered by Mantine and NextUI.
- π Features
- π Tech Stack
- π¦ Installation
- βοΈ Configuration
- π§ Usage
- π Project Structure
- πΈ Screenshots
- π£ API References
- π― Future Enhancements
- π License
- π© Contact
- π© AIBuild using ai in 1 dayπ€£π€£π€£π€£
βοΈ Movie Details Page β View full details, ratings, summary.
βοΈ Carousel & Hero Section β Dynamic movie carousels with a featured section.
βοΈ Authentication β Firebase authentication with role-based access control.
βοΈ Firestore Integration β Store user preferences, watchlists, and favorites.
βοΈ Dark Mode β Customizable theme switching.
βοΈ Mantine Components β Modern UI elements from Mantine & NextUI.
- React.js β UI library
- Mantine v6 β UI components
- React Query β Data fetching & caching
- TypeScript β Strict type checking
- Zustand β State management
- Framer Motion β Animations
- Firebase Authentication β Secure login
- Firestore Database β NoSQL data storage
Before you begin, ensure you have the following installed:
- Node.js (v20+) β
- Yarn or npm β
- Firebase CLI β
git clone https://github.com/tim177/movie-app.git
cd movie-appyarn install
# OR
npm installyarn dev
# OR
npm run devYour app should now be running at http://localhost:3000 π
- Create a Firebase project at Firebase Console.
- Enable Authentication (Email & Password).
- Set up Firestore with required collections.
- Copy your Firebase config and add it to
.env.local:
NEXT_PUBLIC_FIREBASE_API_KEY=your-api-key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-auth-domain
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project-id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-storage-bucket
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your-messaging-sender-id
NEXT_PUBLIC_FIREBASE_APP_ID=your-app-id- Click on any movie to see its full details, including rating, description, and trailers.
- Users can sign up, log in, and manage their watchlists.
π¦ movie-app
β£ π src
β β£ π api # Functions for API requests and data fetching
β β£ π assets # Static assets like images, icons, and fonts
β β£ π components # Reusable UI components (buttons, cards, modals, etc.)
β β£ π config # Configuration files (e.g., app settings, API base URLs)
β β£ π constants # Global constants and enums used throughout the app
β β£ π contexts # React Context API implementations for global state
β β£ π hooks # Custom hooks for reusable logic (e.g., fetching, authentication)
β β£ π pages # Page components used in React Router
β β£ π routes # Application routing setup and protected routes
β β£ π services # Business logic and API service functions
β β£ π store # Zustand state management setup
β β£ π style # Global and component-specific styles
β β£ π theme # Theme configurations (colors, typography, Mantine/Styled Components)
β β£ π types # TypeScript interfaces and type definitions
β β£ π util # Utility functions and helpers
β β£ π App.tsx # Main App component handling global layout and providers
β β£ π main.tsx # Entry point that renders the App component
β β π index.css # Global styles and CSS resets
β£ π .env.local # Environment variables for API keys and secrets
β£ π package.json # Project dependencies, scripts, and metadata
β π README.md # Project documentation and setup instructions
email: user1@use.com password: password
Example screenshot of homepage UI

Example screenshot of movie details page

This app uses the TMDB API for fetching movies.
- π
GET /trending/all/weekβ Fetch trending movies & shows - π
GET /popular/all/weekβ Fetch popular movies & shows - π
GET /top-rated/all/weekβ Fetch top-rated movies & shows - π¬
GET /movie/{movie_id}β Get movie details - πΊ
GET /tv/{tv_id}β Get TV show details
API Docs: TMDB API Documentation
πΉ User Reviews & Ratings β Allow users to submit reviews.
πΉ Chat Service β Useres can comment and give review about movie.
πΉ Google Based Auth β User can authenticate using google account.
πΉ Home Page β Come up with ideas to design the homepage completely.
πΉ Integrate Stripe β Just to test and have funβπ».
This project is licensed under the MIT License.
π§ Email: timaraw18@gmail.com π GitHub: tim177
