Comprehensive guide to all features and functionality.
- Event Management
- Registration System
- QR Code Check-ins
- WhatsApp Notifications
- Data Export
- Auto-fill System
-
Navigate to Dashboard (
/dashboard_under) -
Click "Create Event" button
-
Fill in event details:
- Event Name: Required
- Description: Event details
- Date: Event date
- Time: Event start time
- Venue: Physical location
- Maps Link: Optional Google Maps URL
-
Add custom registration fields:
- Field Types: text, email, phone, textarea, select, radio, checkbox
- Required/Optional: Toggle per field
- Options: For select, radio, checkbox fields
- Field Order: Drag to reorder
-
Click "Create Event"
Note: Email and phone are mandatory fields (auto-included).
Event Cards show:
- Event name and description
- Date, time, venue
- Registration count
- Active/Inactive status
- Quick action buttons
Available Actions:
- ✏️ Edit: Modify event details and fields
- 🔄 Clone: Duplicate event with new name
- 👥 View Registrations: See all registrants
- 📱 Send WhatsApp: Bulk message to registrants
- 📥 Export CSV: Download registration data
- 🔗 Create QR Code: Generate check-in QR codes
- 🗑️ Delete: Permanently remove event
- ⚡ Toggle Active: Activate/deactivate (only one active at a time)
- Only one event can be active at a time
- Active event appears on public registration page
- Toggling activates selected event and deactivates others
- Inactive events preserve all registrations
- User visits homepage (
/) - Active event loads automatically
- User enters email/phone
- System checks for existing profile
- Auto-fills known data after 1 second
- User completes form
- All required fields must be filled
- Dynamic validation per field type
- Submits registration
- Duplicate check (email + event)
- Creates/updates user profile
- Redirects to Thank You page
- Confetti animation
- Event details recap
- Social sharing options
| Type | Description | Validation |
|---|---|---|
| text | Single line text | Max 500 chars |
| Email address | Valid email format | |
| phone | Phone number | 10 digits |
| textarea | Multi-line text | Max 2000 chars |
| select | Dropdown menu | Must select one option |
| radio | Single choice | Must select one option |
| checkbox | Multiple choices | Can select multiple |
- Key: Event ID + Email
- Users cannot register twice for same event
- Clear error message if attempted
- Existing registration preserved
- Click QR icon on event card
- Choose QR Type:
- Message: Display text after check-in (WiFi passwords, instructions)
- URL: Redirect to URL after check-in (resources, forms)
- Enter Content
- Click "Generate QR Code"
- Download QR code image
- User scans QR code at event
- Redirects to check-in page
- User enters email
- System validates:
- Registration exists
- Event matches
- Not already checked in
- Marks as checked in
- Updates
checked_in = true - Records
checked_in_attimestamp
- Updates
- Displays custom message/URL
- Ripple animation plays
- View All: See all QR codes for an event
- Delete: Remove QR code
- Regenerate: Create new with different content
- Multiple QR codes allowed per event
Send bulk WhatsApp messages to all event registrants with one click.
- Twilio Account (FREE trial with $15-20 credit)
- WhatsApp Sandbox (for testing)
- Credentials in
.env
See WHATSAPP_SETUP.md for detailed setup.
-
Go to event registrations
-
Click "Send WhatsApp" button (green)
-
WhatsApp Modal opens:
- Shows recipient count
- Multi-line message textarea
- Character counter
- Info about sandbox requirements
-
Type your message
- Supports emojis
- Multi-line text
- No character limit (reasonable length recommended)
-
Click "Send to X People"
-
Sending Progress:
- Loading spinner
- "Sending..." state
- Cannot close modal during send
-
Results Summary:
- Total messages
- Successfully sent
- Failed messages
- Expandable failed list with error details
Automatic formatting:
- No prefix: Adds
+91(India) - Has +: Keeps as is
- Format:
whatsapp:+91XXXXXXXXXX
Examples:
- Input:
9876543210→ Output:whatsapp:+919876543210 - Input:
+919876543210→ Output:whatsapp:+919876543210 - Input:
+14155551234→ Output:whatsapp:+14155551234
Status codes:
queued: Message sent to Twiliosent: Delivered to recipientdelivered: Confirmed deliveryfailed: Delivery failed
Error messages:
- "Recipient not in sandbox"
- "Invalid phone number"
- "Rate limit exceeded"
- Twilio-specific errors
- Sandbox (Testing): FREE (50 messages/day on trial)
- Production:
₹0.75/message ($0.009 USD) - No monthly fees: Pay per message only
- Free window: 24 hours after user message
From registrations list:
- Click "Export CSV" button
- Downloads:
registrations-{eventId}-{date}.csv
Exported Data:
- Phone
- Checked In (Yes/No)
- Registered At (timestamp)
- All custom form fields
- Properly escaped for Excel
Features:
- Handles special characters
- Escapes commas, quotes
- UTF-8 encoding
- Dynamic columns per event
Email,Phone,Checked In,Registered At,Full Name,T-Shirt Size
user@example.com,9876543210,Yes,2025-10-01 10:00:00,John Doe,MRemembers user data across events for faster registration.
- User enters email (or phone)
- Waits 1 second (debounce)
- Queries user_profiles table
- Matches by email (or phone)
- Auto-fills matching fields:
- Only fields with same identifier
- Preserves user-entered values
- Visual loading state
When created:
- First registration by email/phone
When updated:
- Every new registration
- Latest values preserved
Stored data:
- Email (unique)
- Phone
- All custom field values (JSON)
Match by identifier:
- Field
identifierauto-generated from label - Example: "Full Name" →
fullname - Case-insensitive matching
Not matched:
- New fields
- Renamed fields (different identifier)
- Deleted fields
Design: Animated, glassmorphism, modern
- Framer Motion animations
- Gradient backgrounds
- Frosted glass effects
- Smooth transitions
- Loading states
- Toast notifications
Design: Simple, functional, clean
- No animations (performance)
- Clear typography
- Action buttons
- Data tables
- Responsive grid
- Light mode only
Mobile-first approach:
- Phone: Single column, stacked
- Tablet: 2-column grid
- Desktop: Full multi-column layout
Tested on:
- Mobile (320px - 768px)
- Tablet (768px - 1024px)
- Desktop (1024px+)
- Input validation (Pydantic)
- SQL injection prevention
- XSS protection (React escaping)
- CORS configuration
- Environment variables for secrets
Design Decision: No auth required (as per spec)
Dashboard Access: /dashboard_under (obscurity)
For Production: Add authentication middleware
- Database: Turso (encrypted cloud SQLite)
- Local replica: Faster reads, synced to cloud
- Backups: Automatic via Turso
- Embedded replica: Local database copy
- React Query caching: Reduced API calls
- Debounced auto-fill: 1s delay
- Code splitting: Lazy loading
- Optimized bundle: Vite build
- Skeleton loaders
- Spinner animations
- Progress indicators
- Disabled buttons during actions
Tested on:
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
Mobile:
- iOS Safari 14+
- Chrome Mobile 90+
- Samsung Internet 14+