Add landing page
This commit is contained in:
parent
3fea484585
commit
bce86ee840
47 changed files with 7119 additions and 439 deletions
251
docs/TICKET_SETUP_GUIDE.md
Normal file
251
docs/TICKET_SETUP_GUIDE.md
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
# 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue