Discover. Book. Experience. - A comprehensive mobile-first event ticket booking platform that revolutionizes how users discover, purchase, and manage event tickets.
Features β’ Tech Stack β’ Getting Started β’ Documentation β’ Architecture
- Overview
- Features
- Tech Stack
- Project Structure
- Getting Started
- Architecture
- API Documentation
- Development
- Documentation
- Contributing
- License
EventApp is a full-stack event ticket booking platform designed to provide a seamless experience for discovering, booking, and managing event tickets. The application features location-based event discovery, secure payment processing, digital ticket management with QR codes, and comprehensive booking management.
- πΊοΈ Interactive Map View - Discover events on an interactive map with location-based markers
- π« Multi-Tier Ticket System - Support for different ticket types (Free, Popular, VIP, etc.)
- π³ Secure Payments - Integrated Stripe payment processing
- ποΈ Digital Tickets - QR code-based tickets with download functionality
- π·οΈ Voucher System - Discount voucher codes for special promotions
- π Event Analytics - Trending and featured events based on sales and promotions
- π¬ Real-Time Chat - WhatsApp-like group chat for event attendees with end-to-end encryption
- π± Cross-Platform - Native iOS, Android, and Web support
- Explore Screen - Browse upcoming events in list and map views
- Map Integration - Interactive map with event location markers showing price and name
- Category Filtering - Filter events by category (Music, Sports, Art, Tech, etc.)
- Trending Events - Events ranked by ticket sales volume
- Featured Events - Promoted events with paid featured placement
- Search & Filter - Search events by name, location, date, or category
- Comprehensive Information - Event type, attendance metrics, pricing, date, location
- Organizer Details - Organizer name, profile, and contact information
- Ticket Types - Multiple ticket tiers with pricing and availability
- Visual Media - Event images, gallery, and venue photos
- Ticket Selection - Choose ticket type and quantity
- Booking Review - Review booking details with pricing breakdown
- Voucher Codes - Apply discount voucher codes for special offers
- Stripe Integration - Secure payment processing with multiple payment methods
- Tax Calculation - Automatic tax calculation based on location
- Digital Tickets - QR code and barcode generation for entry verification
- Ticket Download - Download tickets as images for offline access
- My Bookings - View all bookings organized by upcoming and past events
- Ticket Details - Complete ticket information with QR code display
- Authentication - Secure JWT-based authentication with email verification
- User Profiles - Personal dashboard with booking history
- Password Management - Forgot password and reset functionality
- Session Management - Refresh token support for seamless sessions
- Group Chat Creation - Automatic chat group creation when events are created
- Auto-Join on Purchase - Users automatically added to event chat groups upon ticket purchase
- Real-Time Messaging - Instant message delivery using Socket.io with optimistic updates
- WhatsApp-Like UI - Professional chat interface with message bubbles, avatars, and timestamps
- Message Features:
- Text and image messages
- Reply to messages
- Swipe-to-reply gesture (right-to-left for sender, left-to-right for receiver)
- Message deletion (delete for me / delete for everyone)
- Message selection and bulk operations
- Chat Management:
- Unread message badges with counters
- "New message" divider for unread messages
- Date headers (Today, Yesterday, Date)
- Leave group functionality
- Chat deletion (removes user from group)
- Advanced Features:
- End-to-end encryption indicator
- Read receipts tracking
- Message persistence and history
- Automatic group cleanup when events end
- Media upload support
- Framework: React Native 0.81+ with Expo 54+
- Language: TypeScript 5+
- Styling: NativeWind 4+ (Tailwind CSS for React Native)
- Navigation: Expo Router 6+
- State Management: React Context API
- Real-Time: Socket.io Client
- Animations: React Native Reanimated 4+ & Gesture Handler
- Icons: Expo Vector Icons
- Fonts: Expo Google Fonts (Poppins)
- Runtime: Node.js 18+
- Framework: Express.js 4.18+
- Language: TypeScript 5+
- Database: MongoDB 8+ with Mongoose ODM
- Real-Time: Socket.io Server
- Authentication: JWT (JSON Web Tokens)
- Validation: Express Validator
- Logging: Winston
- Email: Nodemailer
- Scheduled Tasks: node-cron (for automatic chat group cleanup)
- Payment Processing: Stripe API
- Image Storage: Cloudinary (image upload, transformation, and CDN)
- Real-Time Communication: Socket.io (WebSocket-based real-time messaging)
- Maps & Location: Google Maps API / Mapbox (for future implementation)
- Push Notifications: Expo Notifications (for future implementation)
- Package Manager: npm
- Code Quality: ESLint
- Type Checking: TypeScript
- Build Tool: Expo CLI
event-app/
βββ app/ # Expo Router app directory
β βββ (auth)/ # Authentication screens
β βββ (onboarding)/ # Onboarding flow
β βββ (tabs)/ # Main tab navigation
β β βββ home.tsx
β β βββ explore.tsx
β β βββ booking.tsx
β β βββ profile.tsx
β βββ chat-list.tsx # Chat groups list screen
β βββ chat-messages/ # Chat messages screens
β β βββ [groupId].tsx # Individual chat screen
β βββ _layout.tsx # Root layout
β
βββ components/ # Reusable components
β βββ form/ # Form components
β βββ ui/ # UI components
β βββ onboarding/ # Onboarding components
β βββ profile/ # Profile components
β βββ chat/ # Chat components
β βββ ChatGroupCard.tsx # Chat list item
β βββ ChatHeader.tsx # Chat screen header
β βββ ChatMessageBubble.tsx # Message bubble with swipe
β βββ DateHeader.tsx # Date separator
β βββ MessageHeader.tsx # Message sender info
β βββ UnreadDivider.tsx # Unread messages divider
β
βββ screens/ # Screen components
β βββ AuthScreen.tsx
β βββ SignInScreen.tsx
β βββ SignUpScreen.tsx
β βββ ...
β
βββ lib/ # Utilities and API
β βββ api/ # API client and endpoints
β β βββ client.ts
β β βββ auth.api.ts
β β βββ user.api.ts
β βββ utils/ # Utility functions
β
βββ contexts/ # React contexts
β βββ AuthContext.tsx # Authentication context
β βββ SocketContext.tsx # Socket.io real-time context
β
βββ types/ # TypeScript type definitions
β βββ auth.ts
β
βββ server/ # Backend server
β βββ src/
β β βββ config/ # Configuration files
β β βββ controllers/ # Request handlers
β β βββ middleware/ # Express middleware
β β βββ models/ # Mongoose models
β β βββ routes/ # API routes
β β βββ utils/ # Utility functions
β β βββ index.ts # Entry point
β βββ package.json
β
βββ docs/ # Documentation
β βββ PROJECT_PROPOSAL.md # Complete project proposal
β βββ FLOWCHARTS.md # Product and workflow diagrams
β βββ DATA_STRUCTURE.md # Data models and architecture
β
βββ assets/ # Static assets
β βββ images/
β βββ icons/
β βββ fonts/
β
βββ package.json
βββ tsconfig.json
βββ README.md
Before you begin, ensure you have the following installed:
- Node.js 18.0.0 or higher
- npm 9.0.0 or higher (or yarn)
- Expo CLI (
npm install -g @expo/cli) - MongoDB (local installation or MongoDB Atlas account)
- Stripe Account (for payment processing)
- Git (for version control)
-
Clone the repository
git clone https://github.com/yourusername/event-app.git cd event-app -
Install frontend dependencies
npm install
-
Install backend dependencies
cd server npm install cd ..
-
Set up environment variables
Create a
.envfile in the root directory:# API Configuration EXPO_PUBLIC_API_URL=http://localhost:5000/api # Stripe (Frontend) EXPO_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_your_publishable_key
Create a
.envfile in theserverdirectory:# Server Configuration NODE_ENV=development PORT=5000 # Database MONGODB_URI=mongodb://localhost:27017/event-app # Or for MongoDB Atlas: # MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/event-app # JWT JWT_SECRET=your-super-secret-jwt-key-change-in-production JWT_EXPIRE=7d JWT_REFRESH_SECRET=your-refresh-token-secret JWT_REFRESH_EXPIRE=30d # Email Configuration EMAIL_HOST=smtp.gmail.com EMAIL_PORT=587 EMAIL_USER=your-email@gmail.com EMAIL_PASS=your-app-password # Stripe (Backend) STRIPE_SECRET_KEY=sk_test_your_secret_key STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret # Cloudinary (Image Storage) CLOUDINARY_CLOUD_NAME=your_cloud_name CLOUDINARY_API_KEY=your_api_key CLOUDINARY_API_SECRET=your_api_secret # Frontend URL FRONTEND_URL=http://localhost:8081
cd server
npm run devThe server will start on http://localhost:5000
In a new terminal window:
# From the root directory
npm startThis will start the Expo development server. You can then:
- Press
ito open iOS simulator - Press
ato open Android emulator - Press
wto open in web browser - Scan the QR code with Expo Go app on your device
# iOS
npm run ios
# Android
npm run android
# Web
npm run webβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT LAYER β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β iOS App β β Android App β β Web App β β
β β (React Nativeβ β (React Nativeβ β (Optional) β β
β β + Expo) β β + Expo) β β β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
βββββββββββΌββββββββββββββββββΌββββββββββββββββββΌβββββββββββ
β β β
βββββββββββββββββββ΄ββββββββββββββββββ
β
β HTTPS/REST API
β
βββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ
β API GATEWAY LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Express.js Server β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β β β Routes β βMiddlewareβ βControllersβ β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ
β
βββββββββββββββββββΌββββββββββββββββββ
β β β
βββββββββββΌββββββββββ ββββββΌβββββββ βββββββββΌβββββββββ
β BUSINESS LOGIC β β AUTH β β VALIDATION β
β LAYER β β LAYER β β LAYER β
βββββββββββ¬ββββββββββ βββββββββββββ ββββββββββββββββββ
β
βββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ
β DATA ACCESS LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Mongoose ODM β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ
β DATABASE LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β MongoDB Atlas β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EXTERNAL SERVICES β
β ββββββββββββ ββββββββββββ ββββββββββββ β
β β Stripe β β Maps β β Storage β β
β β (Payment)β β (Google β β (Cloudinaryβ β
β β β β Maps) β β / S3) β β
β ββββββββββββ ββββββββββββ ββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The application uses the following main models:
- User - User accounts and authentication
- Event - Event information and details
- Booking - Ticket bookings and transactions
- Voucher - Discount voucher codes
- Organizer - Event organizer profiles (optional)
- ChatGroup - Chat groups for events with members and metadata
- Message - Individual chat messages with sender, content, and deletion tracking
For detailed data models, see DATA_STRUCTURE.md
Development: http://localhost:5000/api
Production: https://api.yourapp.com/api
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /auth/signup |
Register new user | No |
| POST | /auth/signin |
Sign in user | No |
| POST | /auth/verify-email |
Verify email with code | No |
| POST | /auth/resend-verification |
Resend verification code | No |
| POST | /auth/forgot-password |
Request password reset | No |
| POST | /auth/verify-reset-code |
Verify reset code | No |
| POST | /auth/reset-password |
Reset password | No |
| POST | /auth/refresh-token |
Refresh access token | No |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| GET | /events |
Get all events | No |
| GET | /events/:id |
Get event details | No |
| GET | /events/categories |
Get events by category | No |
| GET | /events/trending |
Get trending events | No |
| GET | /events/featured |
Get featured events | No |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /bookings |
Create booking | Yes |
| GET | /bookings/me |
Get user bookings | Yes |
| GET | /bookings/:id |
Get booking details | Yes |
| GET | /bookings/:id/ticket |
Get ticket with QR code | Yes |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /vouchers/verify |
Verify voucher code | No |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| GET | /users/me |
Get current user | Yes |
| PUT | /users/me |
Update user profile | Yes |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| GET | /chat/groups |
Get user's chat groups | Yes |
| GET | /chat/groups/:groupId/messages |
Get chat messages | Yes |
| POST | /chat/groups/:groupId/messages |
Send message | Yes |
| DELETE | /chat/groups/:groupId |
Leave/delete chat group | Yes |
| DELETE | /chat/messages/:messageId/me |
Delete message for me | Yes |
| DELETE | /chat/messages/:messageId/everyone |
Delete message for everyone | Yes |
| Event | Direction | Description |
|---|---|---|
join-group |
Client β Server | Join a chat group room |
leave-group |
Client β Server | Leave a chat group room |
send-message |
Client β Server | Send a new message |
new-message |
Server β Client | Receive a new message |
mark-chat-as-viewed |
Client β Server | Mark chat as read |
delete-message-for-me |
Client β Server | Delete message for current user |
delete-message-for-everyone |
Client β Server | Delete message for all users |
message-deleted-for-me |
Server β Client | Notification of message deletion |
message-deleted-for-everyone |
Server β Client | Notification of message deletion |
For complete API documentation with request/response examples, see DATA_STRUCTURE.md
-
Create a feature branch
git checkout -b feature/your-feature-name
-
Make your changes
- Follow the existing code style
- Write TypeScript types for all new code
- Add comments for complex logic
-
Test your changes
# Frontend linting npm run lint # Backend linting cd server npm run lint
-
Commit your changes
git commit -m "feat: add your feature description" -
Push and create a pull request
- TypeScript: Strict mode enabled
- ESLint: Expo configuration
- Formatting: Prettier with Tailwind CSS plugin
- Naming: camelCase for variables, PascalCase for components
- β Phase 1: Authentication & Onboarding (Completed)
- β Phase 2: Core Event Features (Completed)
- β Phase 3: Payment Integration (Completed) - See STRIPE_PAYMENT_SETUP.md
- β Phase 4: Ticket Management (Completed)
- β Phase 5: Real-Time Chat System (Completed) - See CHAT_INTEGRATION_GUIDE.md
- β³ Phase 6: Advanced Features (Planned)
- β³ Phase 7: Testing & Optimization (Planned)
Comprehensive documentation is available in the docs/ directory:
- PROJECT_PROPOSAL.md - Complete project proposal with features, architecture, and business logic
- FLOWCHARTS.md - Product flows, system workflows, and development workflows
- DATA_STRUCTURE.md - Database models, ERD, sequence diagrams, and API structures
- STRIPE_PAYMENT_SETUP.md - Complete guide for setting up Stripe payment integration, including backend API endpoints and testing instructions
- CHAT_INTEGRATION_GUIDE.md - Comprehensive guide on how the real-time chat system was integrated, including step-by-step implementation details
- Expo Documentation
- React Native Documentation
- Express.js Documentation
- Mongoose Documentation
- Stripe API Documentation
# Run tests (when implemented)
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage-
Build for production
expo build:ios expo build:android
-
Or use EAS Build
eas build --platform ios eas build --platform android
-
Build the server
cd server npm run build -
Deploy to your hosting service (Heroku, AWS, DigitalOcean, etc.)
-
Set environment variables on your hosting platform
-
Configure MongoDB Atlas connection string
-
Set up Stripe webhooks for production
- JWT-based authentication with refresh tokens
- Password hashing with bcrypt
- Input validation and sanitization
- Rate limiting on API endpoints
- CORS protection
- Helmet security headers
- Secure payment processing via Stripe (PCI compliant)
- Environment variable protection
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'feat: Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
We follow Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation changesstyle:Code style changes (formatting, etc.)refactor:Code refactoringtest:Adding or updating testschore:Maintenance tasks
This project is licensed under the MIT License - see the LICENSE file for details.
- Development Team - EventApp Development
For support, email support@eventapp.com or open an issue in the repository.
- Event creation and management for organizers
- Advanced search and filtering
- Social sharing of events
- Event recommendations based on preferences
- Waitlist for sold-out events
- Group booking discounts
- Event reviews and ratings
- Calendar integration
- Push notifications
- Multi-language support
- Dark mode
- Accessibility improvements
Made with β€οΈ by the EventApp Team
Version: 1.0.0
Status: π§ Active Development
Last Updated: 2025