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:
2025-07-12 18:21:40 -06:00
parent a02d64a86c
commit 26a87d0d00
232 changed files with 33175 additions and 5365 deletions

View File

@@ -53,7 +53,7 @@ export default function PresaleTab({ eventId }: PresaleTabProps) {
if (error) throw error;
setPresaleCodes(data || []);
} catch (error) {
console.error('Error loading presale codes:', error);
} finally {
setLoading(false);
}
@@ -123,7 +123,7 @@ export default function PresaleTab({ eventId }: PresaleTabProps) {
setShowModal(false);
loadPresaleCodes();
} catch (error) {
console.error('Error saving presale code:', error);
} finally {
setSaving(false);
}
@@ -140,7 +140,7 @@ export default function PresaleTab({ eventId }: PresaleTabProps) {
if (error) throw error;
loadPresaleCodes();
} catch (error) {
console.error('Error deleting presale code:', error);
}
}
};
@@ -155,7 +155,7 @@ export default function PresaleTab({ eventId }: PresaleTabProps) {
if (error) throw error;
loadPresaleCodes();
} catch (error) {
console.error('Error toggling presale code:', error);
}
};
@@ -181,7 +181,11 @@ export default function PresaleTab({ eventId }: PresaleTabProps) {
<h2 className="text-2xl font-light text-white">Presale Codes</h2>
<button
onClick={handleCreateCode}
className="flex items-center gap-2 px-4 py-2 bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 text-white rounded-lg font-medium transition-all duration-200"
className="flex items-center gap-2 px-4 py-2 rounded-lg font-medium transition-all duration-200"
style={{
background: 'var(--glass-text-accent)',
color: 'white'
}}
>
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 6v6m0 0v6m0-6h6m-6 0H6" />
@@ -198,7 +202,11 @@ export default function PresaleTab({ eventId }: PresaleTabProps) {
<p className="text-white/60 mb-4">No presale codes created yet</p>
<button
onClick={handleCreateCode}
className="px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 text-white rounded-lg font-medium transition-all duration-200"
className="px-6 py-3 rounded-lg font-medium transition-all duration-200"
style={{
background: 'var(--glass-text-accent)',
color: 'white'
}}
>
Create Your First Presale Code
</button>
@@ -402,7 +410,11 @@ export default function PresaleTab({ eventId }: PresaleTabProps) {
<button
onClick={handleSaveCode}
disabled={saving}
className="px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 text-white rounded-lg font-medium transition-all duration-200 disabled:opacity-50"
className="px-6 py-3 rounded-lg font-medium transition-all duration-200 disabled:opacity-50"
style={{
background: 'var(--glass-text-accent)',
color: 'white'
}}
>
{saving ? 'Saving...' : editingCode ? 'Update' : 'Create'}
</button>