A modern event ticketing system built with React, Vite, Supabase, and Express.js.
- User Authentication: Secure login/registration with Supabase Auth
- Event Management: Create, edit, and manage events (Admin)
- QR Code Tickets: Generate QR codes for event participants
- QR Scanner: Admin scanner for event check-ins
- User Dashboard: View and participate in events
- Admin Dashboard: Manage events and view participants
- Superuser Dashboard: Manage admins and users
- Frontend: React 19 + Vite + Tailwind CSS
- Backend: Express.js + Node.js
- Database: Supabase (PostgreSQL)
- Authentication: Supabase Auth
- QR Codes: qrcode + qr-scanner libraries
- Deployment: Vercel
- ✅ Environment variables for all secrets
- ✅ Row Level Security (RLS) in database
- ✅ Service role key properly secured
- ✅ HTTPS in production
- ✅ No hardcoded credentials
- ✅ Secure API endpoints
git clone <your-repo-url>
cd raja-ticketing-system
npm installcp env.example .env
# Edit .env with your actual Supabase credentials# Frontend (Vite)
VITE_SUPABASE_URL=your-supabase-url
VITE_SUPABASE_ANON_KEY=your-anon-key
VITE_API_BASE_URL=http://localhost:3001
# Backend (Express)
SUPABASE_URL=your-supabase-url
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
PORT=3001
# Production
VITE_API_BASE_URL_PROD=your-vercel-app-url# Start frontend (Terminal 1)
npm run dev
# Start backend (Terminal 2)
npm run startAdd these in your Vercel dashboard → Project Settings → Environment Variables:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEYVITE_API_BASE_URL_PRODSUPABASE_URLSUPABASE_SERVICE_ROLE_KEYPORT
# Build and deploy
npm run build
vercel --prod- Users: Register → Browse events → Generate QR tickets
- Admins: Manage events → View participants → Scan QR codes
- Superusers: Manage admins and users
- Never commit
.envfiles - Service role keys are properly secured
- All API calls use environment variables
- HTTPS enforced in production
- Regular security audits with
npm audit
Private project for RaJA organization.