This is the official event web app for the Nx Summit โ built to make check-ins smoother and add a layer of fun and gamification to the day.
This app was built for the Nx Summit but can be easily adapted for any event! Whether you're organizing a conference, meetup, workshop, or corporate gathering, you can fork this repository and customize it for your needs.
The guide covers everything you need to know:
- ๐ท๏ธ Branding: Update event name, colors, and logos
- ๐ Schedule: Replace the Nx Summit agenda with your event timeline
- ๐ซ Event Details: Customize dates, venue, and attendee information
- โ๏ธ Configuration: Set up your own Supabase database and environment
- ๐ Deployment: Get your customized app live for your event
Quick Overview of What You'll Need to Change:
- Event name and branding throughout the app
- Complete event schedule in
src/pages/InfoPage.tsx
- Date, time, and venue information in
src/pages/TicketPage.tsx
- Your attendee list in the database
- Environment variables for your Supabase setup
- Tech conferences and meetups
- Corporate events and team gatherings
- Workshops and training sessions
- Networking events
- Any gathering where you want to gamify interactions!
๐ Get Started with the Full Customization Guide
- Staff can quickly check in attendees by scanning QR codes
- Real-time status updates
- Efficient queue management
- Personalized ticket link for each attendee (e.g.,
https://your-event.com/ticket?email=...
) - Features:
- Unique QR code
- Name and check-in status
- Game interface (when active)
- Points display
Once checked in, attendees can:
- Scan other attendees' QR codes
- Earn points for each unique interaction
- Collect bonus points from Nx team members
- Discover hidden QR codes around the venue
- Hidden QR codes throughout the venue
- Staff can award manual bonus points for:
- Asking questions
- Participating in discussions
- Other meaningful interactions
- Check-In Scanner: Fast attendee processing
- Admin Dashboard:
- Real-time attendee management
- Points tracking
- Game state control
- Manual point awards
- Raffle System:
- Two drawing modes:
- Weighted (probability based on points)
- Shares-based (one entry per point)
- Live drawing animation
- Winner tracking
- Two drawing modes:
- Frontend: React 18 with TypeScript
- Styling: Tailwind CSS
- Icons: Lucide React
- Database: Supabase
- QR Code:
- Scanning: html5-qrcode
- Generation: qrcode.react
- Serverless: Supabase Edge Functions
- Node.js 18.x or higher
- npm 9.x or higher
- Supabase project
- Create a
.env
file:
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
- Set up Supabase environment variables:
STAFF_ACCESS_PASSWORD
: For staff authenticationSUPABASE_URL
: Your project URLSUPABASE_ANON_KEY
: Public API keySUPABASE_SERVICE_ROLE_KEY
: Admin API key
- Clone the repository
- Install dependencies:
npm install
- Start development server:
npm run dev
CREATE TABLE attendees (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
email text UNIQUE NOT NULL,
name text NOT NULL,
checked_in boolean DEFAULT false,
points integer DEFAULT 0,
value integer DEFAULT 1,
role text DEFAULT 'attendee' NOT NULL,
created_at timestamptz DEFAULT now()
);
CREATE TABLE scans (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
scanner_id uuid REFERENCES attendees(id),
scanned_id uuid REFERENCES attendees(id),
timestamp timestamptz DEFAULT now(),
UNIQUE(scanner_id, scanned_id)
);
CREATE TABLE bonus_codes (
code text PRIMARY KEY,
description text NOT NULL,
points integer NOT NULL,
max_claims integer,
created_at timestamptz DEFAULT now()
);
CREATE TABLE bonus_claims (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
attendee_id uuid REFERENCES attendees(id),
bonus_code text REFERENCES bonus_codes(code),
claimed_at timestamptz DEFAULT now(),
UNIQUE(attendee_id, bonus_code)
);
CREATE TABLE raffle_winners (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
attendee_id uuid REFERENCES attendees(id),
raffle_type text NOT NULL,
created_at timestamptz DEFAULT now()
);
CREATE TABLE settings (
key text PRIMARY KEY,
value boolean NOT NULL,
updated_at timestamptz DEFAULT now()
);
โโโ src/
โ โโโ components/ # Reusable React components
โ โ โโโ admin/ # Admin-specific components
โ โ โโโ ...
โ โโโ lib/ # Utility functions and API clients
โ โโโ pages/ # Page components
โ โโโ main.tsx # Application entry point
โโโ supabase/
โ โโโ functions/ # Edge Functions
โ โโโ migrations/ # Database migrations
โโโ public/ # Static assets
- Row Level Security (RLS) policies
- Staff authentication with password protection
- Duplicate scan prevention
- Role-based access control
- Environment variable protection
npm run dev
: Start development servernpm run build
: Build for productionnpm run preview
: Preview production buildnpm run lint
: Run ESLint
- Each attendee starts with 0 points
- Points are earned through:
- Scanning other attendees
- Finding bonus QR codes
- Staff awards
- Participation rewards
Two drawing modes:
- Weighted Raffle:
- Probability = attendee_points / total_points
- Fair chance for everyone, weighted by participation
- Shares-Based Raffle:
- Each point = one entry
- More points = more chances to win
MIT License - see LICENSE file for details