An open API service indexing awesome lists of open source software.

https://github.com/elyse502/quickshow

Full Stack Movie Ticket Booking App
https://github.com/elyse502/quickshow

back-end-development front-end-development full-stack-web-development mern-stack-development

Last synced: 10 months ago
JSON representation

Full Stack Movie Ticket Booking App

Awesome Lists containing this project

README

          

# QUICKSHOW 🎬🍿πŸŽ₯

*Seamless Video Discovery. Effortless Entertainment Experience*

![Last Commit](https://img.shields.io/badge/last%20commit-today-brightgreen)
![JavaScript](https://img.shields.io/badge/javascript-98.8%25-yellow)
![Languages](https://img.shields.io/badge/languages-3-blue)

**Built with the tools and technologies:**

![Express](https://img.shields.io/badge/Express-000000?style=for-the-badge&logo=express&logoColor=white)
![JSON](https://img.shields.io/badge/JSON-000000?style=for-the-badge&logo=json&logoColor=white)
![NPM](https://img.shields.io/badge/NPM-CB3837?style=for-the-badge&logo=npm&logoColor=white)
![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white)
![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)

![Nodemon](https://img.shields.io/badge/Nodemon-76D04B?style=for-the-badge&logo=nodemon&logoColor=white)
![React](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)
![Vite](https://img.shields.io/badge/Vite-B73BFE?style=for-the-badge&logo=vite&logoColor=FFD62E)
![Stripe](https://img.shields.io/badge/Stripe-008CDD?style=for-the-badge&logo=stripe&logoColor=white)
![ESLint](https://img.shields.io/badge/ESLint-4B32C3?style=for-the-badge&logo=eslint&logoColor=white)


## 🎦 LIVE - DEMO 🌐

**UI** πŸ‘‰ [LINK](https://quickshow-sigma-roan.vercel.app/)

![alt text](screencapture-quickshow-sigma-roan-vercel-app-2025-07-04-07_02_38.png)





**Admin Dashboard** πŸ‘‰ [LINK](https://quickshow-sigma-roan.vercel.app/admin)

![alt text](screencapture-quickshow-sigma-roan-vercel-app-admin-2025-07-04-07_02_14.png)

---

## Table of Contents

- [Overview](#overview)
- [Getting Started](#getting-started)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Usage](#usage)
- [Testing](#testing)
- [Features](#features)
- [Project Structure](#project-structure)
- [API Documentation](#api-documentation)
- [Configuration](#configuration)
- [Contributing](#contributing)
- [License](#license)

---

## Overview

**QuickShow** is a modern, full-stack movie ticket booking application built with the MERN stack. It provides users with a seamless experience to discover movies, book tickets, and manage their bookings while offering administrators powerful tools to manage shows, bookings, and movie listings.

### Key Highlights

- 🎬 **Movie Discovery**: Browse and search through extensive movie catalogs
- 🎟️ **Ticket Booking**: Interactive seat selection and booking system
- πŸ’³ **Secure Payments**: Integrated Stripe payment processing
- πŸ“± **Responsive Design**: Mobile-first design approach
- πŸ” **User Authentication**: Secure login and registration system
- πŸ‘¨β€πŸ’Ό **Admin Dashboard**: Comprehensive admin panel for management
- ⚑ **Fast Performance**: Built with Vite for lightning-fast development and production builds

---

## Getting Started

### Prerequisites

Before running this application, make sure you have the following installed:

- **Node.js** (v16 or higher)
- **npm** or **yarn**
- **MongoDB** (local or cloud instance)
- **Git**

### Installation

1. **Clone the repository**
```console
git clone https://github.com/elyse502/QuickShow.git
cd QuickShow
```

2. **Install server dependencies**
```console
cd server
npm install
```

3. **Install client dependencies**
```console
cd ../client
npm install
```

4. **Environment Configuration**

Create `.env` files in both `server` and `client` directories:

**Server (.env)**
```env
# 🌐 Database
MONGODB_URI=mongodb://localhost:27017/quickshow

# πŸ” Clerk Authentication
CLERK_PUBLISHABLE_KEY=your-clerk-publishable-key
CLERK_SECRET_KEY=your-clerk-secret-key

# βš™οΈ Inngest Event Scheduling
INNGEST_EVENT_KEY=your-inngest-event-key
INNGEST_SIGNING_KEY=your-inngest-signing-key

# 🎬 TMDB API (for movie data)
TMDB_API_KEY=your-tmdb-api-key

# πŸ’³ Stripe Payment Integration
STRIPE_PUBLISHABLE_KEY=your-stripe-publishable-key
STRIPE_SECRET_KEY=your-stripe-secret-key
STRIPE_WEBHOOK_SECRET=your-stripe-webhook-secret

# πŸ“§ Email Notifications (Nodemailer or similar SMTP setup)
SENDER_EMAIL=your-sender@example.com
SMTP_USER=your-smtp-username
SMTP_PASS=your-smtp-password

```

**Client (.env)**
```env
# πŸ’± Currency Symbol
VITE_CURRENCY=$

# πŸ” Clerk Authentication (Public Key for Frontend)
VITE_CLERK_PUBLISHABLE_KEY=your-clerk-publishable-key

# 🌐 Base API URL (Proxy to Backend)
VITE_BASE_URL=http://localhost:3000

# 🎞️ TMDB Image Base URL
VITE_TMDB_IMAGE_BASE_URL=https://image.tmdb.org/t/p/original

```

### Usage

1. **Start the development servers**

**Terminal 1 - Server**
```console
cd server
npm run dev
```

**Terminal 2 - Client**
```console
cd client
npm run dev
```

2. **Access the application**
- Frontend: `http://localhost:5173`
- Backend API: `http://localhost:5000`

3. **Admin Access**
- Create an admin account through the API or manually in the database
- Access admin panel at `/admin`

### Testing

```bash
# Run client tests
cd client
npm run test

# Run server tests
cd server
npm run test
```

---

## Features

### User Features
- **Authentication**: Secure user registration and login
- **Movie Browsing**: Search and filter movies by genre, rating, and release date
- **Movie Details**: View comprehensive movie information, trailers, and reviews
- **Seat Selection**: Interactive theater seat map with real-time availability
- **Booking Management**: View and manage personal bookings
- **Favorites**: Save favorite movies for quick access
- **Payment Processing**: Secure checkout with Stripe integration

### Admin Features
- **Dashboard Analytics**: Comprehensive booking and revenue analytics
- **Show Management**: Add, edit, and remove movie shows
- **Booking Overview**: View and manage all user bookings
- **Movie Management**: Add new movies with details and media
- **Theater Management**: Configure theater layouts and seat arrangements

### Technical Features
- **Responsive Design**: Mobile-first approach with Tailwind CSS
- **Real-time Updates**: Live seat availability updates
- **Image Optimization**: Cloudinary integration for media management
- **Background Jobs**: Inngest for handling asynchronous tasks
- **Data Validation**: Comprehensive input validation and sanitization
- **Error Handling**: Robust error handling and user feedback

---

## Project Structure

```groovy
quickshow/
β”œβ”€β”€ client/ # Frontend React application
β”‚ β”œβ”€β”€ src/
β”‚ β”‚ β”œβ”€β”€ components/ # Reusable UI components
β”‚ β”‚ β”‚ β”œβ”€β”€ admin/ # Admin-specific components
β”‚ β”‚ β”‚ └── ...
β”‚ β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”‚ β”‚ β”œβ”€β”€ admin/ # Admin pages
β”‚ β”‚ β”‚ └── ...
β”‚ β”‚ β”œβ”€β”€ context/ # React Context providers
β”‚ β”‚ β”œβ”€β”€ lib/ # Utility functions
β”‚ β”‚ └── assets/ # Static assets
β”‚ β”œβ”€β”€ public/ # Public assets
β”‚ └── package.json
β”œβ”€β”€ server/ # Backend Node.js application
β”‚ β”œβ”€β”€ controllers/ # Route controllers
β”‚ β”œβ”€β”€ models/ # MongoDB models
β”‚ β”œβ”€β”€ routes/ # API routes
β”‚ β”œβ”€β”€ middleware/ # Custom middleware
β”‚ β”œβ”€β”€ configs/ # Configuration files
β”‚ β”œβ”€β”€ inngest/ # Background job handlers
β”‚ └── package.json
└── README.md
```

---

## API Documentation

### Authentication Endpoints
- `POST /api/users/register` - User registration
- `POST /api/users/login` - User login
- `GET /api/users/profile` - Get user profile
- `PUT /api/users/profile` - Update user profile

### Movie & Show Endpoints
- `GET /api/shows` - Get all shows
- `GET /api/shows/:id` - Get show details
- `POST /api/admin/shows` - Create new show (Admin)
- `PUT /api/admin/shows/:id` - Update show (Admin)
- `DELETE /api/admin/shows/:id` - Delete show (Admin)

### Booking Endpoints
- `POST /api/bookings` - Create new booking
- `GET /api/bookings/user` - Get user bookings
- `GET /api/admin/bookings` - Get all bookings (Admin)
- `PUT /api/bookings/:id` - Update booking status

### Payment Endpoints
- `POST /api/bookings/create-payment-intent` - Create Stripe payment intent
- `POST /api/webhooks/stripe` - Handle Stripe webhooks

---

## Configuration

### Environment Variables

| Variable | Description | Required |
| ------------------------ | ------------------------------------------------------ | -------- |
| `MONGODB_URI` | MongoDB connection string | βœ… |
| `CLERK_PUBLISHABLE_KEY` | Clerkβ€―frontend (public) key for user authentication | βœ… |
| `CLERK_SECRET_KEY` | Clerkβ€―backend secret key for server‑side auth | βœ… |
| `INNGEST_EVENT_KEY` | Inngest event key for scheduling/triggering jobs | βœ… |
| `INNGEST_SIGNING_KEY` | Inngest signing key to verify incoming events | βœ… |
| `TMDB_API_KEY` | TMDB API key for fetching movie metadata & posters | βœ… |
| `STRIPE_PUBLISHABLE_KEY` | Stripe publishable (public) key for frontend payments | βœ… |
| `STRIPE_SECRET_KEY` | Stripe secret key for server‑side payment logic | βœ… |
| `STRIPE_WEBHOOK_SECRET` | Stripe webhook secret for verifying webhook signatures | βœ… |
| `SENDER_EMAIL` | β€œFrom” email address for transactional emails | βœ… |
| `SMTP_USER` | SMTP username (e.g., SendGrid / Mailgun) | βœ… |
| `SMTP_PASS` | SMTP password / API token | βœ… |

### Deployment

The application is configured for deployment on Vercel with the included `vercel.json` files.

**Deploy to Vercel:**
```console
# Install Vercel CLI
npm i -g vercel

# Deploy
vercel --prod
```

---

## Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

### Development Guidelines

- Follow the existing code style and conventions
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR

---

## License

This project is licensed under the MIT License. See the [LICENSE](https://github.com/elyse502/QuickShow/blob/main/LICENSE) file for details.

---

## Support

For support, email elyseniyibizi502@gmail.com or create an issue in the GitHub repository.

---

## πŸ“ž Contact
For any questions or support, please contact:
- [**NIYIBIZI ElysΓ©e**](https://linktr.ee/niyibizi_elysee)πŸ‘¨πŸΏβ€πŸ’» | [Github](https://github.com/elyse502) | [Linkedin](https://www.linkedin.com/in/niyibizi-elys%C3%A9e/) | [Twitter](https://twitter.com/Niyibizi_Elyse).
- **Email**:

[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/niyibizi-elys%C3%A9e/) [![@phenrysay](https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/Niyibizi_Elyse) [![pH-7](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/elyse502)

---

**Made with ❀️ by [Elysée NIYIBIZI](https://elyse502.github.io/Elysee-Portfolio/)**

[⬆ Back to Top](#table-of-contents)