Skip to content

Schedula is a modern event management and ticketing mobile application that transforms how users discover, register for, and attend events. Features include real-time event discovery, one-tap registration, digital QR tickets, admin check-in system, and multi-theme UI - all powered by Expo, Supabase, and a custom Node.js backend.

License

Notifications You must be signed in to change notification settings

MasterBhuvnesh/Schedula-Application

Repository files navigation

Supabase TypeScript Expo ESLint Clerk Zustand Node.js Render

Schedula

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.

πŸš€ Core Features

πŸ“… Event Management

  • 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

🎫 Digital Ticketing System

  • 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

πŸ“± QR Code Scanning & Check-in

  • 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

πŸ‘€ User Management & Profiles

  • 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

πŸ” Permissions & Security

  • 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

πŸ“± Screens & Navigation

🏠 Main App Screens

  • 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

πŸ”§ Utility Screens

  • 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

🎨 UI Components & Design System

πŸ“‹ Event Components

  • EventCard: Animated event cards with status indicators
  • EventDetailsCard: Comprehensive event information display
  • SponsorCard: Featured event card with special styling

πŸ‘₯ User Components

  • 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

πŸ”§ Utility Components

  • PermissionCard: Individual permission request cards
  • PermissionsSection: Complete permissions management interface
  • CustomNavBar: Bottom tab navigation with custom styling
  • BackgroundCard: Theme selection and background management

🎭 Core UI Elements

  • 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

πŸ”§ Technical Implementation

πŸ—οΈ Architecture

  • 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

πŸ“Š Data 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

🎨 Theming System

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

πŸ“± Mobile-First Features

  • 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

🏒 Production Architecture & DevOps

πŸ–₯️ Backend Infrastructure

  • 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

πŸ”„ Automated Maintenance & Optimization

  • 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

πŸš€ Continuous Integration & Deployment

  • 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

🎨 Enhanced Event Features

  • 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

πŸ› οΈ Technology Stack

πŸ“‹ Prerequisites

  • 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

βš™οΈ Installation

  1. Clone the repository:

    git clone https://github.com/MasterBhuvnesh/Schedula-Application.git
    cd Schedula-Application
  2. Install dependencies:

    npm install
    # or
    yarn install
  3. 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
  4. 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
  5. Configure Clerk:

    • Set up OAuth providers (Google)
    • Configure user management settings
    • Set up webhooks if needed
  6. Start the development server:

    npx expo start

πŸ’» Available Scripts

  • npm start - Start the Expo development server
  • npm run android - Start the app on Android device/emulator
  • npm run ios - Start the app on iOS device/simulator
  • npm run web - Start the app in web browser
  • npm run lint - Run ESLint for code quality
  • npm run lint:fix - Automatically fix linting issues
  • npm run format - Format code with Prettier
  • npm run format:check - Check code formatting without making changes

πŸ“ Project Structure

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

πŸ”’ Environment Variables

Required environment variables for the application:

  • EXPO_PUBLIC_SUPABASE_URL: Your Supabase project URL
  • EXPO_PUBLIC_SUPABASE_ANON_KEY: Your Supabase anonymous/public key
  • EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY: Your Clerk publishable key

πŸš€ Deployment

Mobile App Deployment

The app can be deployed using Expo Application Services (EAS):

  1. Install EAS CLI: npm install -g eas-cli
  2. Configure EAS: eas build:configure
  3. Build for production: eas build --platform all
  4. Submit to app stores: eas submit

Backend Services

  • 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

CI/CD Pipeline

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

πŸ”„ Database Schema

Events Table

  • Event information (title, description, location, dates)
  • Registration status and pricing
  • Banner images and metadata

Event Registrations Table

  • User registrations for events
  • QR codes and verification data
  • Check-in status and timestamps

Users Table (via Clerk webhook)

  • User profiles and roles
  • Authentication metadata

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the project
  2. Create your 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 structure
  • Add TypeScript types for new features
  • Include proper error handling
  • Test on both iOS and Android platforms
  • Update documentation for new features

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ“§ Contact

Bhuvnesh Verma - [email protected]

Project Link: https://github.com/MasterBhuvnesh/Schedula-Application

πŸ™ Acknowledgments

  • Expo Team for the amazing development platform
  • Supabase for the backend infrastructure
  • Clerk for authentication services
  • Lucide for the beautiful icon library

About

Schedula is a modern event management and ticketing mobile application that transforms how users discover, register for, and attend events. Features include real-time event discovery, one-tap registration, digital QR tickets, admin check-in system, and multi-theme UI - all powered by Expo, Supabase, and a custom Node.js backend.

Resources

License

Stars

Watchers

Forks

Packages

No packages published