Seamless Video Discovery. Effortless Entertainment Experience
Built with the tools and technologies:
UI π LINK
Admin Dashboard π LINK
- Overview
- Getting Started
- Features
- Project Structure
- API Documentation
- Configuration
- Contributing
- License
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.
- π¬ 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
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
-
Clone the repository
git clone https://github.com/elyse502/QuickShow.git cd QuickShow
-
Install server dependencies
cd server npm install
-
Install client dependencies
cd ../client npm install
-
Environment Configuration
Create
.env
files in bothserver
andclient
directories:Server (.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=[email protected] SMTP_USER=your-smtp-username SMTP_PASS=your-smtp-password
Client (.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
-
Start the development servers
Terminal 1 - Server
cd server npm run dev
Terminal 2 - Client
cd client npm run dev
-
Access the application
- Frontend:
http://localhost:5173
- Backend API:
http://localhost:5000
- Frontend:
-
Admin Access
- Create an admin account through the API or manually in the database
- Access admin panel at
/admin
# Run client tests
cd client
npm run test
# Run server tests
cd server
npm run test
- 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
- 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
- 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
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
POST /api/users/register
- User registrationPOST /api/users/login
- User loginGET /api/users/profile
- Get user profilePUT /api/users/profile
- Update user profile
GET /api/shows
- Get all showsGET /api/shows/:id
- Get show detailsPOST /api/admin/shows
- Create new show (Admin)PUT /api/admin/shows/:id
- Update show (Admin)DELETE /api/admin/shows/:id
- Delete show (Admin)
POST /api/bookings
- Create new bookingGET /api/bookings/user
- Get user bookingsGET /api/admin/bookings
- Get all bookings (Admin)PUT /api/bookings/:id
- Update booking status
POST /api/bookings/create-payment-intent
- Create Stripe payment intentPOST /api/webhooks/stripe
- Handle Stripe webhooks
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 | β |
The application is configured for deployment on Vercel with the included vercel.json
files.
Deploy to Vercel:
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel --prod
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- 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
This project is licensed under the MIT License. See the LICENSE file for details.
For support, email [email protected] or create an issue in the GitHub repository.
For any questions or support, please contact:
- NIYIBIZI ElysΓ©eπ¨πΏβπ» | Github | Linkedin | Twitter.
- Email: [email protected]
Made with β€οΈ by ElysΓ©e NIYIBIZI