251 lines
5.5 KiB
Markdown
251 lines
5.5 KiB
Markdown
# Event Ticket Setup Guide
|
|
|
|
Quick reference for creating events with different ticket configurations.
|
|
|
|
## Common Scenarios
|
|
|
|
### 1. Free Event (Everyone)
|
|
```javascript
|
|
{
|
|
tickets: {
|
|
enabled: false // Use legacy registration system
|
|
}
|
|
// OR
|
|
tickets: {
|
|
enabled: true,
|
|
member: { isFree: true },
|
|
public: { available: true, price: 0 }
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2. Members Only, Free
|
|
```javascript
|
|
{
|
|
membersOnly: true,
|
|
tickets: {
|
|
enabled: true,
|
|
member: {
|
|
available: true,
|
|
isFree: true,
|
|
name: "Member Ticket",
|
|
description: "Free for all Ghost Guild members"
|
|
},
|
|
public: {
|
|
available: false // No public tickets
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 3. Free for Members, Paid for Public
|
|
```javascript
|
|
{
|
|
tickets: {
|
|
enabled: true,
|
|
currency: "CAD",
|
|
member: {
|
|
available: true,
|
|
isFree: true,
|
|
name: "Member Ticket"
|
|
},
|
|
public: {
|
|
available: true,
|
|
name: "Public Ticket",
|
|
price: 25.00,
|
|
quantity: 30, // Limit public tickets
|
|
description: "General admission for non-members"
|
|
},
|
|
capacity: {
|
|
total: 50 // 20 spots reserved for members
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 4. Early Bird Pricing
|
|
```javascript
|
|
{
|
|
tickets: {
|
|
enabled: true,
|
|
member: { isFree: true },
|
|
public: {
|
|
available: true,
|
|
price: 30.00, // Regular price
|
|
earlyBirdPrice: 22.00, // Discounted price
|
|
earlyBirdDeadline: "2025-11-15T23:59:59Z",
|
|
quantity: 50
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 5. Tiered Member Pricing
|
|
```javascript
|
|
{
|
|
tickets: {
|
|
enabled: true,
|
|
member: {
|
|
available: true,
|
|
isFree: false,
|
|
price: 15.00, // Default member price
|
|
circleOverrides: {
|
|
community: {
|
|
isFree: true // Community members get in free
|
|
},
|
|
founder: {
|
|
price: 10.00 // Founder discount
|
|
},
|
|
practitioner: {
|
|
price: 10.00 // Practitioner discount
|
|
}
|
|
}
|
|
},
|
|
public: {
|
|
available: true,
|
|
price: 35.00
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 6. Waitlist Enabled
|
|
```javascript
|
|
{
|
|
tickets: {
|
|
enabled: true,
|
|
member: { isFree: true },
|
|
public: {
|
|
available: true,
|
|
price: 20.00,
|
|
quantity: 25 // Limited capacity
|
|
},
|
|
capacity: {
|
|
total: 40
|
|
},
|
|
waitlist: {
|
|
enabled: true,
|
|
maxSize: 20 // Or null for unlimited
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Field Reference
|
|
|
|
### tickets.enabled
|
|
- **Type**: Boolean
|
|
- **Default**: false
|
|
- **Purpose**: Enable new ticket system (vs. legacy registration)
|
|
|
|
### tickets.currency
|
|
- **Type**: String
|
|
- **Default**: "CAD"
|
|
- **Options**: ISO currency codes (CAD, USD, etc.)
|
|
|
|
### tickets.member.*
|
|
Configuration for member tickets
|
|
|
|
- `available` (Boolean) - Members can register
|
|
- `isFree` (Boolean) - Free for members
|
|
- `price` (Number) - Price if not free
|
|
- `name` (String) - Display name
|
|
- `description` (String) - Additional details
|
|
- `circleOverrides` (Object) - Circle-specific pricing
|
|
|
|
### tickets.public.*
|
|
Configuration for public (non-member) tickets
|
|
|
|
- `available` (Boolean) - Public can register
|
|
- `name` (String) - Display name
|
|
- `description` (String) - Additional details
|
|
- `price` (Number) - Regular price
|
|
- `quantity` (Number) - Max tickets (null = unlimited)
|
|
- `sold` (Number) - Counter (auto-managed)
|
|
- `reserved` (Number) - Temp reservations (auto-managed)
|
|
- `earlyBirdPrice` (Number) - Early bird discount price
|
|
- `earlyBirdDeadline` (Date) - When early bird ends
|
|
|
|
### tickets.capacity.*
|
|
Overall event capacity
|
|
|
|
- `total` (Number) - Max attendees across all types
|
|
- `reserved` (Number) - Currently reserved (auto-managed)
|
|
|
|
### tickets.waitlist.*
|
|
Waitlist configuration
|
|
|
|
- `enabled` (Boolean) - Allow waitlist
|
|
- `maxSize` (Number) - Max waitlist size (null = unlimited)
|
|
- `entries` (Array) - Waitlist entries (auto-managed)
|
|
|
|
## Tips
|
|
|
|
### Capacity Planning
|
|
- Set `capacity.total` for overall limit
|
|
- Set `public.quantity` to reserve spots for members
|
|
- Example: 50 total capacity, 30 public tickets = 20 spots for members
|
|
|
|
### Early Bird Strategy
|
|
- Set deadline 1-2 weeks before event
|
|
- Discount 20-30% off regular price
|
|
- Creates urgency and rewards early commitment
|
|
|
|
### Member Value
|
|
- Always offer member benefit (free or discounted)
|
|
- Show savings in ticket card
|
|
- Reinforces membership value proposition
|
|
|
|
### Pricing Psychology
|
|
- Round numbers: $25 instead of $24.99
|
|
- Early bird: Show regular price crossed out
|
|
- Member comparison: Display public price for context
|
|
|
|
## Testing Events
|
|
|
|
### Test Mode Configuration
|
|
```javascript
|
|
{
|
|
title: "TEST - Ticket System Demo",
|
|
tickets: {
|
|
enabled: true,
|
|
member: {
|
|
isFree: true,
|
|
description: "Testing member flow"
|
|
},
|
|
public: {
|
|
available: true,
|
|
price: 0.50, // Low price for testing
|
|
quantity: 5, // Small capacity for testing
|
|
description: "Testing payment flow"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Test Cards (Helcim)
|
|
Use Helcim's test card numbers in test mode:
|
|
- Visa: 4242 4242 4242 4242
|
|
- Mastercard: 5555 5555 5555 4444
|
|
- Declined: 4000 0000 0000 0002
|
|
|
|
## Common Gotchas
|
|
|
|
1. **Forgot to enable tickets**: Set `tickets.enabled: true`
|
|
2. **Members can't register**: Check `tickets.member.available: true`
|
|
3. **Payment not processing**: Verify Helcim credentials in .env
|
|
4. **Early bird not showing**: Check deadline hasn't passed
|
|
5. **Capacity exceeded**: Check both `capacity.total` and `public.quantity`
|
|
|
|
## Support
|
|
|
|
If tickets aren't working:
|
|
1. Check server logs for errors
|
|
2. Verify Helcim API credentials
|
|
3. Test with free event first
|
|
4. Review event document in MongoDB
|
|
5. Check browser console for frontend errors
|
|
|
|
---
|
|
|
|
**Need help?** Review HELCIM_TICKET_INTEGRATION.md for full implementation details.
|