A modern event management and ticketing mobile application built with Expo and React Native. Schedula provides a complete solution for event discovery, registration, digital ticketing, and QR code-based check-ins.
- Event Discovery: Browse upcoming and past events with animated cards
- Event Details: Comprehensive event information with images, dates, locations, and pricing
- Event Registration: One-tap registration for events with real-time status updates
- Sponsored Events: Featured event highlighting with special card design
- Event Status Tracking: Dynamic status indicators (Open/Closed registration, Upcoming/Past events)
- Event Filtering: Automatic sorting by status, registration status, and start time
- Automatic Ticket Generation: QR code tickets generated upon registration
- Ticket Storage: Secure storage in Supabase with user-specific organization
- Digital Ticket Viewer: Horizontal scrolling ticket carousel with event details
- QR Code Integration: Each ticket contains registration ID and verification code
- Ticket Validation: Real-time ticket verification system
- Camera Integration: Native camera access for QR code scanning
- Admin Check-in: Role-based access for event administrators
- Real-time Validation: Instant verification of registration codes
- Check-in Status: Prevents duplicate check-ins with status tracking
- Scan History: Maintains record of check-in timestamps and admin actions
- Authentication: Secure Google OAuth integration via Clerk
- Profile Management: Editable user profiles with image upload
- Role-Based Access: Admin and regular user roles with different permissions
- Profile Image Upload: Image picker integration with base64 encoding
- User Data Persistence: Automatic user data syncing with Supabase
- Camera Permissions: Managed camera access for QR scanning
- Media Library Access: Controlled access for image saving and uploads
- Permission Cards: User-friendly permission request interface
- Secure Storage: Encrypted token storage via Clerk
- Home Screen: Event feed with sponsored content and infinite scroll
- Ticket Screen: Personal ticket gallery with horizontal carousel
- Profile Screen: User profile with settings and permissions
- Event Details: Full event information with registration functionality
- Authentication Screen: Animated welcome screen with Google sign-in
- Profile Editor: Complete profile editing interface
- QR Scanner: Full-screen camera interface for check-ins
- Permission Manager: System permissions handling interface
- EventCard: Animated event cards with status indicators
- EventDetailsCard: Comprehensive event information display
- SponsorCard: Featured event card with special styling
- ProfileCard: User information display with edit functionality
- ProfileEditImage: Image upload component with loading states
- EditProfileFormSection: Form inputs for profile editing
- UpdateButton: Action button with loading and disabled states
- PermissionCard: Individual permission request cards
- PermissionsSection: Complete permissions management interface
- CustomNavBar: Bottom tab navigation with custom styling
- BackgroundCard: Theme selection and background management
- CustomText: Typography system with font weight variants
- AppIcon: Consistent icon system using Lucide React Native
- CustomLoader: Loading states with animations
- CustomError: Error handling and display components
- AlertModal: Modal dialogs for confirmations and alerts
- Glassmorphism: Glass-effect background components
- File-based Routing: Expo Router for navigation
- Component Architecture: Modular, reusable component system
- State Management: React hooks and context for local state
- Type Safety: Comprehensive TypeScript implementation
- Custom Hooks: Reusable logic for data fetching and UI management
- Supabase Integration: Real-time database operations
- File Storage: QR code and image storage in Supabase buckets
- Data Hooks: Custom hooks for events, users, tickets, and permissions
- Error Handling: Comprehensive error boundaries and user feedback
- Loading States: Smooth loading experiences throughout the app
Schedula features a complete theming system with multiple color schemes:
- Emerald (Default green theme)
- Amber (Warm yellow/orange theme)
- Sky (Cool blue theme)
- Rose (Pink/red theme)
- Dynamic Theme Switching: Runtime theme changes with persistence
- Background Management: Animated background components
- Responsive Design: Adaptive layouts for different screen sizes
- Native Animations: Smooth transitions using React Native Reanimated
- Haptic Feedback: Touch feedback integration
- Status Bar Management: Dynamic status bar styling
- Navigation Bar Control: Hidden navigation bars for immersive experience
- Custom QR Generation Server: Dedicated Node.js TypeScript server hosted on Render for QR code generation and storage
- Repository: Schedula-Server
- JWT Authentication: Secure data transmission between client and server
- Service Availability: Automated cron jobs every 14 minutes to prevent service hibernation
- Scalable Architecture: Handles QR generation workload separately from main Supabase backend
- Database Health Monitoring: Automated cron jobs run daily at midnight to perform health checks on Supabase, preventing project hibernation
- Storage Optimization: Intelligent QR code lifecycle management
- Automatic deletion of QR codes when events close to optimize storage costs
- Persistent registration records maintained in database for audit trails
- Efficient storage utilization without compromising data integrity
- EAS CLI Integration: Expo Application Services configured for streamlined builds and deployments
- GitHub CI/CD Pipeline: Automated deployment workflow
- Continuous integration with automated testing
- Automatic application updates pushed to users without requiring manual downloads
- Version control integration for seamless development workflow
- Custom Sponsored Event Cards: Specialized UI components for featured events with enhanced visual design and priority placement
- Dynamic Event Status Management: Real-time event lifecycle handling with automated transitions
- Expo - React Native framework with native modules
- Expo Router - File-based routing system
- Clerk - Authentication and user management
- Supabase - Backend database, storage, and real-time features
- Custom Node.js Server - QR generation and storage service
- Render - Cloud hosting for backend services
- React Native Reanimated - High-performance animations
- Lucide React Native - Beautiful, customizable icons
- Expo Camera - Camera functionality for QR scanning
- EAS CLI - Build and deployment tools
- GitHub Actions - CI/CD pipeline automation
- Node.js (v18 or later)
- npm or yarn
- Expo CLI (
npm install -g @expo/cli
) - iOS Simulator or Android Emulator (optional for mobile testing)
- Supabase account and project
- Clerk account and application
-
Clone the repository:
git clone https://github.com/MasterBhuvnesh/Schedula-Application.git cd Schedula-Application
-
Install dependencies:
npm install # or yarn install
-
Set up environment variables: Create a
.env
file in the root directory:EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
-
Configure Supabase:
- Set up your database tables for events, event_registrations, and users
- Configure storage buckets for QR codes and images
- Set up RLS (Row Level Security) policies
-
Configure Clerk:
- Set up OAuth providers (Google)
- Configure user management settings
- Set up webhooks if needed
-
Start the development server:
npx expo start
npm start
- Start the Expo development servernpm run android
- Start the app on Android device/emulatornpm run ios
- Start the app on iOS device/simulatornpm run web
- Start the app in web browsernpm run lint
- Run ESLint for code qualitynpm run lint:fix
- Automatically fix linting issuesnpm run format
- Format code with Prettiernpm run format:check
- Check code formatting without making changes
schedula/
βββ assets/ # Static assets (images, fonts, icons)
βββ src/ # Source code
β βββ app/ # Expo Router pages and layouts
β β βββ index.tsx # Landing/Auth screen
β β βββ edit.tsx # Profile editing screen
β β βββ (main)/ # Main app tabs
β β β βββ home.tsx # Events feed
β β β βββ ticket.tsx # User tickets
β β β βββ profile.tsx # User profile
β β βββ event/ # Event detail pages
β β βββ scan/ # QR scanning functionality
β βββ components/ # Reusable UI components
β β βββ global/ # Core components (Text, Loader, etc.)
β β βββ auth/ # Authentication components
β β βββ sso/ # Single sign-on components
β β βββ ui/ # Feature-specific UI components
β βββ hooks/ # Custom React hooks
β β βββ ui/ # UI-related hooks
β β βββ useEvents.ts # Event data management
β β βββ useUser.ts # User data management
β β βββ useTicketsFiles.ts # Ticket management
β βββ lib/ # Core business logic
β β βββ supabase.ts # Supabase client configuration
β β βββ event.register.ts # Event registration logic
β β βββ checkin.qr.scan.ts # QR check-in functionality
β β βββ generate.ticket.qr.ts # Ticket generation
β βββ types/ # TypeScript type definitions
β β βββ data/ # Data model types
β β βββ qr.type.ts # QR code related types
β β βββ toast.type.ts # Toast notification types
β βββ context/ # React context providers
β βββ providers/ # App-wide providers
β βββ constants/ # App constants and configurations
β βββ logger/ # Logging utilities
β βββ utils/ # Helper functions and utilities
βββ .env # Environment variables (not in repo)
βββ app.json # Expo configuration
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
Required environment variables for the application:
EXPO_PUBLIC_SUPABASE_URL
: Your Supabase project URLEXPO_PUBLIC_SUPABASE_ANON_KEY
: Your Supabase anonymous/public keyEXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
: Your Clerk publishable key
The app can be deployed using Expo Application Services (EAS):
- Install EAS CLI:
npm install -g eas-cli
- Configure EAS:
eas build:configure
- Build for production:
eas build --platform all
- Submit to app stores:
eas submit
- QR Generation Server: Deployed on Render with automatic scaling
- Database: Supabase managed PostgreSQL with automated backups
- Storage: Supabase buckets with CDN distribution
- Monitoring: Automated health checks and service monitoring
The project includes a complete CI/CD setup:
- Automated testing on pull requests
- Automatic builds triggered by main branch commits
- Over-the-air updates delivered to users seamlessly
- Zero-downtime deployments with rollback capabilities
- Event information (title, description, location, dates)
- Registration status and pricing
- Banner images and metadata
- User registrations for events
- QR codes and verification data
- Check-in status and timestamps
- User profiles and roles
- Authentication metadata
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your 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 structure
- Add TypeScript types for new features
- Include proper error handling
- Test on both iOS and Android platforms
- Update documentation for new features
This project is licensed under the MIT License - see the LICENSE file for details.
Bhuvnesh Verma - [email protected]
Project Link: https://github.com/MasterBhuvnesh/Schedula-Application
- Expo Team for the amazing development platform
- Supabase for the backend infrastructure
- Clerk for authentication services
- Lucide for the beautiful icon library