feat: Complete platform enhancement with multi-tenant architecture
Major additions: - Territory manager system with application workflow - Custom pricing and page builder with Craft.js - Enhanced Stripe Connect onboarding - CodeReadr QR scanning integration - Kiosk mode for venue sales - Super admin dashboard and analytics - MCP integration for AI-powered operations Infrastructure improvements: - Centralized API client and routing system - Enhanced authentication with organization context - Comprehensive theme management system - Advanced event management with custom tabs - Performance monitoring and accessibility features Database schema updates: - Territory management tables - Custom pages and pricing structures - Kiosk PIN system - Enhanced organization profiles - CodeReadr integration tables 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
579
supabase/migrations/20250109_add_sample_territories.sql
Normal file
579
supabase/migrations/20250109_add_sample_territories.sql
Normal file
@@ -0,0 +1,579 @@
|
||||
-- Add sample territories for testing
|
||||
-- This creates realistic territory data for the Territory Manager system
|
||||
|
||||
-- Insert sample territories
|
||||
INSERT INTO territories (id, name, boundary, population, market_size, is_active, created_at, updated_at) VALUES
|
||||
(
|
||||
'territory-denver-metro',
|
||||
'Denver Metro Area',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-105.1178, 39.7392],
|
||||
[-104.8736, 39.7392],
|
||||
[-104.8736, 39.9142],
|
||||
[-105.1178, 39.9142],
|
||||
[-105.1178, 39.7392]
|
||||
]]
|
||||
}',
|
||||
2963821,
|
||||
'large',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-boulder-county',
|
||||
'Boulder County',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-105.6000, 39.9000],
|
||||
[-105.0000, 39.9000],
|
||||
[-105.0000, 40.3000],
|
||||
[-105.6000, 40.3000],
|
||||
[-105.6000, 39.9000]
|
||||
]]
|
||||
}',
|
||||
330758,
|
||||
'medium',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-colorado-springs',
|
||||
'Colorado Springs',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-104.9000, 38.7000],
|
||||
[-104.6000, 38.7000],
|
||||
[-104.6000, 39.0000],
|
||||
[-104.9000, 39.0000],
|
||||
[-104.9000, 38.7000]
|
||||
]]
|
||||
}',
|
||||
715522,
|
||||
'medium',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-fort-collins',
|
||||
'Fort Collins',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-105.2000, 40.4000],
|
||||
[-105.0000, 40.4000],
|
||||
[-105.0000, 40.7000],
|
||||
[-105.2000, 40.7000],
|
||||
[-105.2000, 40.4000]
|
||||
]]
|
||||
}',
|
||||
169810,
|
||||
'small',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-grand-junction',
|
||||
'Grand Junction',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-108.7000, 39.0000],
|
||||
[-108.4000, 39.0000],
|
||||
[-108.4000, 39.2000],
|
||||
[-108.7000, 39.2000],
|
||||
[-108.7000, 39.0000]
|
||||
]]
|
||||
}',
|
||||
65560,
|
||||
'small',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-aspen-vail',
|
||||
'Aspen & Vail Valley',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-106.9000, 39.4000],
|
||||
[-106.2000, 39.4000],
|
||||
[-106.2000, 39.7000],
|
||||
[-106.9000, 39.7000],
|
||||
[-106.9000, 39.4000]
|
||||
]]
|
||||
}',
|
||||
25000,
|
||||
'premium',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-steamboat-springs',
|
||||
'Steamboat Springs',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-106.9000, 40.4000],
|
||||
[-106.7000, 40.4000],
|
||||
[-106.7000, 40.6000],
|
||||
[-106.9000, 40.6000],
|
||||
[-106.9000, 40.4000]
|
||||
]]
|
||||
}',
|
||||
13224,
|
||||
'small',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-durango',
|
||||
'Durango & Southwest Colorado',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-108.0000, 37.0000],
|
||||
[-107.5000, 37.0000],
|
||||
[-107.5000, 37.5000],
|
||||
[-108.0000, 37.5000],
|
||||
[-108.0000, 37.0000]
|
||||
]]
|
||||
}',
|
||||
52000,
|
||||
'small',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-pueblo',
|
||||
'Pueblo',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-104.8000, 38.1000],
|
||||
[-104.4000, 38.1000],
|
||||
[-104.4000, 38.4000],
|
||||
[-104.8000, 38.4000],
|
||||
[-104.8000, 38.1000]
|
||||
]]
|
||||
}',
|
||||
111876,
|
||||
'small',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-greeley',
|
||||
'Greeley & Weld County',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-104.9000, 40.3000],
|
||||
[-104.5000, 40.3000],
|
||||
[-104.5000, 40.6000],
|
||||
[-104.9000, 40.6000],
|
||||
[-104.9000, 40.3000]
|
||||
]]
|
||||
}',
|
||||
328981,
|
||||
'medium',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-loveland',
|
||||
'Loveland',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-105.2000, 40.2000],
|
||||
[-105.0000, 40.2000],
|
||||
[-105.0000, 40.5000],
|
||||
[-105.2000, 40.5000],
|
||||
[-105.2000, 40.2000]
|
||||
]]
|
||||
}',
|
||||
76378,
|
||||
'small',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-longmont',
|
||||
'Longmont',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-105.2000, 40.1000],
|
||||
[-105.0000, 40.1000],
|
||||
[-105.0000, 40.3000],
|
||||
[-105.2000, 40.3000],
|
||||
[-105.2000, 40.1000]
|
||||
]]
|
||||
}',
|
||||
98885,
|
||||
'small',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-summit-county',
|
||||
'Summit County (Breckenridge, Keystone)',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-106.2000, 39.4000],
|
||||
[-105.9000, 39.4000],
|
||||
[-105.9000, 39.7000],
|
||||
[-106.2000, 39.7000],
|
||||
[-106.2000, 39.4000]
|
||||
]]
|
||||
}',
|
||||
31055,
|
||||
'premium',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-eagle-county',
|
||||
'Eagle County (Vail, Beaver Creek)',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-106.7000, 39.5000],
|
||||
[-106.3000, 39.5000],
|
||||
[-106.3000, 39.8000],
|
||||
[-106.7000, 39.8000],
|
||||
[-106.7000, 39.5000]
|
||||
]]
|
||||
}',
|
||||
58731,
|
||||
'premium',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'territory-telluride',
|
||||
'Telluride',
|
||||
'{
|
||||
"type": "Polygon",
|
||||
"coordinates": [[
|
||||
[-108.0000, 37.8000],
|
||||
[-107.8000, 37.8000],
|
||||
[-107.8000, 38.0000],
|
||||
[-108.0000, 38.0000],
|
||||
[-108.0000, 37.8000]
|
||||
]]
|
||||
}',
|
||||
2607,
|
||||
'premium',
|
||||
true,
|
||||
NOW(),
|
||||
NOW()
|
||||
);
|
||||
|
||||
-- Add some sample territory managers (for testing purposes)
|
||||
INSERT INTO territory_managers (id, user_id, territory_id, referral_code, status, application_date, approved_date, profile, earnings_data, created_at, updated_at) VALUES
|
||||
(
|
||||
'tm-john-denver',
|
||||
'user-john-denver',
|
||||
'territory-denver-metro',
|
||||
'DENVER001',
|
||||
'active',
|
||||
NOW() - INTERVAL '30 days',
|
||||
NOW() - INTERVAL '25 days',
|
||||
'{
|
||||
"full_name": "John Denver",
|
||||
"phone": "+1-303-555-0101",
|
||||
"address": {
|
||||
"street": "123 Main St",
|
||||
"city": "Denver",
|
||||
"state": "CO",
|
||||
"zip_code": "80202",
|
||||
"country": "US"
|
||||
},
|
||||
"has_transportation": true,
|
||||
"has_event_experience": true,
|
||||
"motivation": "I love helping local events succeed and have extensive experience in event management."
|
||||
}',
|
||||
'{
|
||||
"total_commission": 3250.00,
|
||||
"current_month_commission": 850.00,
|
||||
"total_events_referred": 12,
|
||||
"success_rate": 0.85,
|
||||
"average_commission_per_event": 270.83
|
||||
}',
|
||||
NOW() - INTERVAL '30 days',
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'tm-sarah-boulder',
|
||||
'user-sarah-boulder',
|
||||
'territory-boulder-county',
|
||||
'BOULDER01',
|
||||
'active',
|
||||
NOW() - INTERVAL '45 days',
|
||||
NOW() - INTERVAL '40 days',
|
||||
'{
|
||||
"full_name": "Sarah Mitchell",
|
||||
"phone": "+1-303-555-0102",
|
||||
"address": {
|
||||
"street": "456 Pearl St",
|
||||
"city": "Boulder",
|
||||
"state": "CO",
|
||||
"zip_code": "80302",
|
||||
"country": "US"
|
||||
},
|
||||
"has_transportation": true,
|
||||
"has_event_experience": true,
|
||||
"motivation": "Boulder has an amazing event scene and I want to help connect organizers with the best ticketing solutions."
|
||||
}',
|
||||
'{
|
||||
"total_commission": 2180.00,
|
||||
"current_month_commission": 620.00,
|
||||
"total_events_referred": 8,
|
||||
"success_rate": 0.92,
|
||||
"average_commission_per_event": 272.50
|
||||
}',
|
||||
NOW() - INTERVAL '45 days',
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'tm-mike-springs',
|
||||
'user-mike-springs',
|
||||
'territory-colorado-springs',
|
||||
'SPRINGS01',
|
||||
'active',
|
||||
NOW() - INTERVAL '20 days',
|
||||
NOW() - INTERVAL '15 days',
|
||||
'{
|
||||
"full_name": "Mike Thompson",
|
||||
"phone": "+1-719-555-0103",
|
||||
"address": {
|
||||
"street": "789 Pikes Peak Ave",
|
||||
"city": "Colorado Springs",
|
||||
"state": "CO",
|
||||
"zip_code": "80903",
|
||||
"country": "US"
|
||||
},
|
||||
"has_transportation": true,
|
||||
"has_event_experience": false,
|
||||
"motivation": "New to events but excited to learn and help grow the Colorado Springs event community."
|
||||
}',
|
||||
'{
|
||||
"total_commission": 480.00,
|
||||
"current_month_commission": 320.00,
|
||||
"total_events_referred": 3,
|
||||
"success_rate": 0.75,
|
||||
"average_commission_per_event": 160.00
|
||||
}',
|
||||
NOW() - INTERVAL '20 days',
|
||||
NOW()
|
||||
);
|
||||
|
||||
-- Add sample leads
|
||||
INSERT INTO leads (id, territory_manager_id, event_name, organizer_contact, event_details, status, notes, follow_up_date, created_at, updated_at) VALUES
|
||||
(
|
||||
'lead-wedding-denver',
|
||||
'tm-john-denver',
|
||||
'Johnson Wedding Reception',
|
||||
'{
|
||||
"name": "Emily Johnson",
|
||||
"email": "emily.johnson@email.com",
|
||||
"phone": "+1-303-555-0201",
|
||||
"organization": "Johnson Family",
|
||||
"title": "Bride"
|
||||
}',
|
||||
'{
|
||||
"event_type": "Wedding",
|
||||
"event_date": "2025-08-15",
|
||||
"venue": "Denver Art Museum",
|
||||
"expected_attendance": 150,
|
||||
"budget_range": "$5,000-$10,000",
|
||||
"description": "Elegant wedding reception with cocktail hour and dinner"
|
||||
}',
|
||||
'confirmed',
|
||||
'["Initial contact made", "Venue confirmed", "Date set", "Waiting for final guest count"]',
|
||||
NOW() + INTERVAL '7 days',
|
||||
NOW() - INTERVAL '5 days',
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'lead-festival-boulder',
|
||||
'tm-sarah-boulder',
|
||||
'Boulder Music Festival',
|
||||
'{
|
||||
"name": "David Chen",
|
||||
"email": "david@bouldermusic.org",
|
||||
"phone": "+1-303-555-0202",
|
||||
"organization": "Boulder Music Association",
|
||||
"title": "Event Director"
|
||||
}',
|
||||
'{
|
||||
"event_type": "Music Festival",
|
||||
"event_date": "2025-07-20",
|
||||
"venue": "Chautauqua Park",
|
||||
"expected_attendance": 500,
|
||||
"budget_range": "$15,000-$25,000",
|
||||
"description": "Annual outdoor music festival featuring local and regional artists"
|
||||
}',
|
||||
'contacted',
|
||||
'["Sent initial proposal", "Discussed pricing options", "Awaiting decision"]',
|
||||
NOW() + INTERVAL '3 days',
|
||||
NOW() - INTERVAL '2 days',
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'lead-gala-denver',
|
||||
'tm-john-denver',
|
||||
'Children\'s Hospital Charity Gala',
|
||||
'{
|
||||
"name": "Lisa Rodriguez",
|
||||
"email": "lisa.rodriguez@childrenshospital.org",
|
||||
"phone": "+1-303-555-0203",
|
||||
"organization": "Children\'s Hospital Colorado",
|
||||
"title": "Development Manager"
|
||||
}',
|
||||
'{
|
||||
"event_type": "Charity Gala",
|
||||
"event_date": "2025-09-12",
|
||||
"venue": "Union Station",
|
||||
"expected_attendance": 300,
|
||||
"budget_range": "$20,000-$30,000",
|
||||
"description": "Annual fundraising gala with silent auction and dinner"
|
||||
}',
|
||||
'cold',
|
||||
'["Need to follow up with initial contact"]',
|
||||
NOW() + INTERVAL '1 day',
|
||||
NOW() - INTERVAL '1 day',
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'lead-corporate-springs',
|
||||
'tm-mike-springs',
|
||||
'Tech Company Annual Conference',
|
||||
'{
|
||||
"name": "Robert Kim",
|
||||
"email": "robert.kim@techcorp.com",
|
||||
"phone": "+1-719-555-0204",
|
||||
"organization": "TechCorp Solutions",
|
||||
"title": "HR Director"
|
||||
}',
|
||||
'{
|
||||
"event_type": "Corporate Conference",
|
||||
"event_date": "2025-08-05",
|
||||
"venue": "The Broadmoor",
|
||||
"expected_attendance": 200,
|
||||
"budget_range": "$10,000-$15,000",
|
||||
"description": "Annual company conference with keynotes and networking"
|
||||
}',
|
||||
'converted',
|
||||
'["Successfully converted to BCT customer", "Event setup complete", "Tickets selling well"]',
|
||||
NULL,
|
||||
NOW() - INTERVAL '10 days',
|
||||
NOW()
|
||||
);
|
||||
|
||||
-- Add sample commissions
|
||||
INSERT INTO commissions (id, territory_manager_id, event_id, tickets_sold, commission_per_ticket, total_commission, status, payout_date, created_at, updated_at) VALUES
|
||||
(
|
||||
'comm-springs-tech',
|
||||
'tm-mike-springs',
|
||||
'event-tech-conference',
|
||||
180,
|
||||
0.40,
|
||||
72.00,
|
||||
'paid',
|
||||
NOW() - INTERVAL '5 days',
|
||||
NOW() - INTERVAL '10 days',
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'comm-denver-wedding',
|
||||
'tm-john-denver',
|
||||
'event-smith-wedding',
|
||||
120,
|
||||
0.40,
|
||||
48.00,
|
||||
'paid',
|
||||
NOW() - INTERVAL '2 days',
|
||||
NOW() - INTERVAL '15 days',
|
||||
NOW()
|
||||
),
|
||||
(
|
||||
'comm-boulder-concert',
|
||||
'tm-sarah-boulder',
|
||||
'event-boulder-concert',
|
||||
250,
|
||||
0.40,
|
||||
100.00,
|
||||
'unpaid',
|
||||
NULL,
|
||||
NOW() - INTERVAL '3 days',
|
||||
NOW()
|
||||
);
|
||||
|
||||
-- Add sample notifications
|
||||
INSERT INTO tm_notifications (id, territory_manager_id, type, title, message, data, read, created_at) VALUES
|
||||
(
|
||||
'notif-john-payout',
|
||||
'tm-john-denver',
|
||||
'payout',
|
||||
'Commission Payout Processed',
|
||||
'Your commission of $48.00 for the Smith Wedding has been processed and will arrive in 2-3 business days.',
|
||||
'{"amount": 48.00, "event_name": "Smith Wedding"}',
|
||||
false,
|
||||
NOW() - INTERVAL '2 days'
|
||||
),
|
||||
(
|
||||
'notif-sarah-lead',
|
||||
'tm-sarah-boulder',
|
||||
'lead_update',
|
||||
'Lead Status Updated',
|
||||
'Your lead for Boulder Music Festival has been updated to "contacted" status.',
|
||||
'{"lead_id": "lead-festival-boulder", "status": "contacted"}',
|
||||
false,
|
||||
NOW() - INTERVAL '1 day'
|
||||
),
|
||||
(
|
||||
'notif-mike-achievement',
|
||||
'tm-mike-springs',
|
||||
'achievement',
|
||||
'Achievement Unlocked: First Conversion!',
|
||||
'Congratulations! You\'ve successfully converted your first lead. You\'ve earned the "First Conversion" achievement and a $50 bonus.',
|
||||
'{"achievement_name": "First Conversion", "bonus": 50.00}',
|
||||
false,
|
||||
NOW() - INTERVAL '3 days'
|
||||
),
|
||||
(
|
||||
'notif-john-system',
|
||||
'tm-john-denver',
|
||||
'system',
|
||||
'New Marketing Materials Available',
|
||||
'We\'ve added new marketing materials to your toolkit including updated flyers and email templates.',
|
||||
'{"materials_count": 3}',
|
||||
true,
|
||||
NOW() - INTERVAL '5 days'
|
||||
);
|
||||
|
||||
-- Update territories with assignments
|
||||
UPDATE territories SET assigned_to = 'tm-john-denver' WHERE id = 'territory-denver-metro';
|
||||
UPDATE territories SET assigned_to = 'tm-sarah-boulder' WHERE id = 'territory-boulder-county';
|
||||
UPDATE territories SET assigned_to = 'tm-mike-springs' WHERE id = 'territory-colorado-springs';
|
||||
Reference in New Issue
Block a user