{"id":30134804,"url":"https://github.com/elyse502/quickshow","last_synced_at":"2025-08-10T21:40:03.758Z","repository":{"id":302605062,"uuid":"1001326706","full_name":"elyse502/QuickShow","owner":"elyse502","description":"Full Stack Movie Ticket Booking App","archived":false,"fork":false,"pushed_at":"2025-07-03T09:24:28.000Z","size":3799,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-03T09:25:15.724Z","etag":null,"topics":["back-end-development","front-end-development","full-stack-web-development","mern-stack-development"],"latest_commit_sha":null,"homepage":"https://quickshow-server-seven-gamma.vercel.app","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elyse502.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-13T07:34:21.000Z","updated_at":"2025-07-03T08:41:35.000Z","dependencies_parsed_at":"2025-07-03T09:36:02.346Z","dependency_job_id":null,"html_url":"https://github.com/elyse502/QuickShow","commit_stats":null,"previous_names":["elyse502/quickshow"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/elyse502/QuickShow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyse502%2FQuickShow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyse502%2FQuickShow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyse502%2FQuickShow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyse502%2FQuickShow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elyse502","download_url":"https://codeload.github.com/elyse502/QuickShow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyse502%2FQuickShow/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269793972,"owners_count":24476732,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["back-end-development","front-end-development","full-stack-web-development","mern-stack-development"],"created_at":"2025-08-10T21:40:02.604Z","updated_at":"2025-08-10T21:40:03.734Z","avatar_url":"https://github.com/elyse502.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# QUICKSHOW 🎬🍿🎥\n\n*Seamless Video Discovery. Effortless Entertainment Experience*\n\n![Last Commit](https://img.shields.io/badge/last%20commit-today-brightgreen)\n![JavaScript](https://img.shields.io/badge/javascript-98.8%25-yellow)\n![Languages](https://img.shields.io/badge/languages-3-blue)\n\n**Built with the tools and technologies:**\n\n![Express](https://img.shields.io/badge/Express-000000?style=for-the-badge\u0026logo=express\u0026logoColor=white)\n![JSON](https://img.shields.io/badge/JSON-000000?style=for-the-badge\u0026logo=json\u0026logoColor=white)\n![NPM](https://img.shields.io/badge/NPM-CB3837?style=for-the-badge\u0026logo=npm\u0026logoColor=white)\n![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge\u0026logo=mongodb\u0026logoColor=white)\n![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge\u0026logo=javascript\u0026logoColor=black)\n\n![Nodemon](https://img.shields.io/badge/Nodemon-76D04B?style=for-the-badge\u0026logo=nodemon\u0026logoColor=white)\n![React](https://img.shields.io/badge/React-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB)\n![Vite](https://img.shields.io/badge/Vite-B73BFE?style=for-the-badge\u0026logo=vite\u0026logoColor=FFD62E)\n![Stripe](https://img.shields.io/badge/Stripe-008CDD?style=for-the-badge\u0026logo=stripe\u0026logoColor=white)\n![ESLint](https://img.shields.io/badge/ESLint-4B32C3?style=for-the-badge\u0026logo=eslint\u0026logoColor=white)\n\n\u003cbr /\u003e\n\n## 🎦 LIVE - DEMO 🌐\n  \n**UI** 👉 [LINK](https://quickshow-sigma-roan.vercel.app/)\n\n![alt text](screencapture-quickshow-sigma-roan-vercel-app-2025-07-04-07_02_38.png)\n\n\u003cbr /\u003e\u003chr /\u003e\u003cbr /\u003e\n\n**Admin Dashboard** 👉 [LINK](https://quickshow-sigma-roan.vercel.app/admin)\n\n![alt text](screencapture-quickshow-sigma-roan-vercel-app-admin-2025-07-04-07_02_14.png)\n\n\u003c/div\u003e\n\n---\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Getting Started](#getting-started)\n  - [Prerequisites](#prerequisites)\n  - [Installation](#installation)\n  - [Usage](#usage)\n  - [Testing](#testing)\n- [Features](#features)\n- [Project Structure](#project-structure)\n- [API Documentation](#api-documentation)\n- [Configuration](#configuration)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Overview\n\n**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.\n\n### Key Highlights\n\n- 🎬 **Movie Discovery**: Browse and search through extensive movie catalogs\n- 🎟️ **Ticket Booking**: Interactive seat selection and booking system\n- 💳 **Secure Payments**: Integrated Stripe payment processing\n- 📱 **Responsive Design**: Mobile-first design approach\n- 🔐 **User Authentication**: Secure login and registration system\n- 👨‍💼 **Admin Dashboard**: Comprehensive admin panel for management\n- ⚡ **Fast Performance**: Built with Vite for lightning-fast development and production builds\n\n---\n\n## Getting Started\n\n### Prerequisites\n\nBefore running this application, make sure you have the following installed:\n\n- **Node.js** (v16 or higher)\n- **npm** or **yarn**\n- **MongoDB** (local or cloud instance)\n- **Git**\n\n### Installation\n\n1. **Clone the repository**\n   ```console\n   git clone https://github.com/elyse502/QuickShow.git\n   cd QuickShow\n   ```\n\n2. **Install server dependencies**\n   ```console\n   cd server\n   npm install\n   ```\n\n3. **Install client dependencies**\n   ```console\n   cd ../client\n   npm install\n   ```\n\n4. **Environment Configuration**\n   \n   Create `.env` files in both `server` and `client` directories:\n   \n   **Server (.env)**\n   ```env\n   # 🌐 Database\n   MONGODB_URI=mongodb://localhost:27017/quickshow\n    \n   # 🔐 Clerk Authentication\n   CLERK_PUBLISHABLE_KEY=your-clerk-publishable-key\n   CLERK_SECRET_KEY=your-clerk-secret-key\n    \n   # ⚙️ Inngest Event Scheduling\n   INNGEST_EVENT_KEY=your-inngest-event-key\n   INNGEST_SIGNING_KEY=your-inngest-signing-key\n    \n   # 🎬 TMDB API (for movie data)\n   TMDB_API_KEY=your-tmdb-api-key\n    \n   # 💳 Stripe Payment Integration\n   STRIPE_PUBLISHABLE_KEY=your-stripe-publishable-key\n   STRIPE_SECRET_KEY=your-stripe-secret-key\n   STRIPE_WEBHOOK_SECRET=your-stripe-webhook-secret\n    \n   # 📧 Email Notifications (Nodemailer or similar SMTP setup)\n   SENDER_EMAIL=your-sender@example.com\n   SMTP_USER=your-smtp-username\n   SMTP_PASS=your-smtp-password\n\n   ```\n   \n   **Client (.env)**\n   ```env\n   # 💱 Currency Symbol\n   VITE_CURRENCY=$\n\n   # 🔐 Clerk Authentication (Public Key for Frontend)\n   VITE_CLERK_PUBLISHABLE_KEY=your-clerk-publishable-key\n\n   # 🌐 Base API URL (Proxy to Backend)\n   VITE_BASE_URL=http://localhost:3000\n\n   # 🎞️ TMDB Image Base URL\n   VITE_TMDB_IMAGE_BASE_URL=https://image.tmdb.org/t/p/original\n\n   ```\n\n### Usage\n\n1. **Start the development servers**\n   \n   **Terminal 1 - Server**\n   ```console\n   cd server\n   npm run dev\n   ```\n   \n   **Terminal 2 - Client**\n   ```console\n   cd client\n   npm run dev\n   ```\n\n2. **Access the application**\n   - Frontend: `http://localhost:5173`\n   - Backend API: `http://localhost:5000`\n\n3. **Admin Access**\n   - Create an admin account through the API or manually in the database\n   - Access admin panel at `/admin`\n\n### Testing\n\n```bash\n# Run client tests\ncd client\nnpm run test\n\n# Run server tests\ncd server\nnpm run test\n```\n\n---\n\n## Features\n\n### User Features\n- **Authentication**: Secure user registration and login\n- **Movie Browsing**: Search and filter movies by genre, rating, and release date\n- **Movie Details**: View comprehensive movie information, trailers, and reviews\n- **Seat Selection**: Interactive theater seat map with real-time availability\n- **Booking Management**: View and manage personal bookings\n- **Favorites**: Save favorite movies for quick access\n- **Payment Processing**: Secure checkout with Stripe integration\n\n### Admin Features\n- **Dashboard Analytics**: Comprehensive booking and revenue analytics\n- **Show Management**: Add, edit, and remove movie shows\n- **Booking Overview**: View and manage all user bookings\n- **Movie Management**: Add new movies with details and media\n- **Theater Management**: Configure theater layouts and seat arrangements\n\n### Technical Features\n- **Responsive Design**: Mobile-first approach with Tailwind CSS\n- **Real-time Updates**: Live seat availability updates\n- **Image Optimization**: Cloudinary integration for media management\n- **Background Jobs**: Inngest for handling asynchronous tasks\n- **Data Validation**: Comprehensive input validation and sanitization\n- **Error Handling**: Robust error handling and user feedback\n\n---\n\n## Project Structure\n\n```groovy\nquickshow/\n├── client/                    # Frontend React application\n│   ├── src/\n│   │   ├── components/        # Reusable UI components\n│   │   │   ├── admin/         # Admin-specific components\n│   │   │   └── ...\n│   │   ├── pages/             # Page components\n│   │   │   ├── admin/         # Admin pages\n│   │   │   └── ...\n│   │   ├── context/           # React Context providers\n│   │   ├── lib/               # Utility functions\n│   │   └── assets/            # Static assets\n│   ├── public/                # Public assets\n│   └── package.json\n├── server/                    # Backend Node.js application\n│   ├── controllers/           # Route controllers\n│   ├── models/                # MongoDB models\n│   ├── routes/                # API routes\n│   ├── middleware/            # Custom middleware\n│   ├── configs/               # Configuration files\n│   ├── inngest/               # Background job handlers\n│   └── package.json\n└── README.md\n```\n\n---\n\n## API Documentation\n\n### Authentication Endpoints\n- `POST /api/users/register` - User registration\n- `POST /api/users/login` - User login\n- `GET /api/users/profile` - Get user profile\n- `PUT /api/users/profile` - Update user profile\n\n### Movie \u0026 Show Endpoints\n- `GET /api/shows` - Get all shows\n- `GET /api/shows/:id` - Get show details\n- `POST /api/admin/shows` - Create new show (Admin)\n- `PUT /api/admin/shows/:id` - Update show (Admin)\n- `DELETE /api/admin/shows/:id` - Delete show (Admin)\n\n### Booking Endpoints\n- `POST /api/bookings` - Create new booking\n- `GET /api/bookings/user` - Get user bookings\n- `GET /api/admin/bookings` - Get all bookings (Admin)\n- `PUT /api/bookings/:id` - Update booking status\n\n### Payment Endpoints\n- `POST /api/bookings/create-payment-intent` - Create Stripe payment intent\n- `POST /api/webhooks/stripe` - Handle Stripe webhooks\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable                 | Description                                            | Required |\n| ------------------------ | ------------------------------------------------------ | -------- |\n| `MONGODB_URI`            | MongoDB connection string                              | ✅        |\n| `CLERK_PUBLISHABLE_KEY`  | Clerk frontend (public) key for user authentication    | ✅        |\n| `CLERK_SECRET_KEY`       | Clerk backend secret key for server‑side auth          | ✅        |\n| `INNGEST_EVENT_KEY`      | Inngest event key for scheduling/triggering jobs       | ✅        |\n| `INNGEST_SIGNING_KEY`    | Inngest signing key to verify incoming events          | ✅        |\n| `TMDB_API_KEY`           | TMDB API key for fetching movie metadata \u0026 posters     | ✅        |\n| `STRIPE_PUBLISHABLE_KEY` | Stripe publishable (public) key for frontend payments  | ✅        |\n| `STRIPE_SECRET_KEY`      | Stripe secret key for server‑side payment logic        | ✅        |\n| `STRIPE_WEBHOOK_SECRET`  | Stripe webhook secret for verifying webhook signatures | ✅        |\n| `SENDER_EMAIL`           | “From” email address for transactional emails          | ✅        |\n| `SMTP_USER`              | SMTP username (e.g., SendGrid / Mailgun)               | ✅        |\n| `SMTP_PASS`              | SMTP password / API token                              | ✅        |\n\n### Deployment\n\nThe application is configured for deployment on Vercel with the included `vercel.json` files.\n\n**Deploy to Vercel:**\n```console\n# Install Vercel CLI\nnpm i -g vercel\n\n# Deploy\nvercel --prod\n```\n\n---\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Development Guidelines\n\n- Follow the existing code style and conventions\n- Write meaningful commit messages\n- Add tests for new features\n- Update documentation as needed\n- Ensure all tests pass before submitting PR\n\n---\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](https://github.com/elyse502/QuickShow/blob/main/LICENSE) file for details.\n\n---\n\n## Support\n\nFor support, email elyseniyibizi502@gmail.com or create an issue in the GitHub repository.\n\n---\n\n## 📞 Contact\nFor any questions or support, please contact:\n- [**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).\n- **Email**: \u003celyseniyibizi502@gmail.com\u003e\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/niyibizi-elys%C3%A9e/) [![@phenrysay](https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge\u0026logo=twitter\u0026logoColor=white)](https://twitter.com/Niyibizi_Elyse) [![pH-7](https://img.shields.io/badge/GitHub-100000?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/elyse502)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Made with ❤️ by \u003ci\u003e[Elysée NIYIBIZI](https://elyse502.github.io/Elysee-Portfolio/)\u003c/i\u003e**\n\n[⬆ Back to Top](#table-of-contents)\n\n\u003c/div\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felyse502%2Fquickshow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felyse502%2Fquickshow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felyse502%2Fquickshow/lists"}