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

125
src/lib/performance.js Normal file
View File

@@ -0,0 +1,125 @@
/**
* Performance detection and optimization for glassmorphism effects
* Automatically reduces effects on low-end devices
*/
// Device capability detection
export function detectDeviceCapabilities() {
const capabilities = {
isLowEnd: false,
isMobile: false,
hasReducedMotion: false,
hardwareConcurrency: navigator.hardwareConcurrency || 2,
deviceMemory: navigator.deviceMemory || 2,
connection: navigator.connection || null
};
// Detect low-end devices
if (capabilities.hardwareConcurrency <= 2 || capabilities.deviceMemory <= 2) {
capabilities.isLowEnd = true;
}
// Check for slow network connection
if (capabilities.connection && capabilities.connection.effectiveType) {
const slowConnections = ['slow-2g', '2g', '3g'];
if (slowConnections.includes(capabilities.connection.effectiveType)) {
capabilities.isLowEnd = true;
}
}
// Detect mobile devices
capabilities.isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
// Check for reduced motion preference
capabilities.hasReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
return capabilities;
}
// Apply performance optimizations based on device capabilities
export function applyPerformanceOptimizations() {
const capabilities = detectDeviceCapabilities();
const body = document.body;
// Add CSS classes for optimization
if (capabilities.isLowEnd) {
body.classList.add('low-end-device');
}
if (capabilities.isMobile) {
body.classList.add('mobile-device');
}
if (capabilities.hasReducedMotion) {
body.classList.add('reduced-motion');
}
// Log performance optimization decisions
console.log('Performance optimizations applied:', {
isLowEnd: capabilities.isLowEnd,
isMobile: capabilities.isMobile,
hasReducedMotion: capabilities.hasReducedMotion,
hardwareConcurrency: capabilities.hardwareConcurrency,
deviceMemory: capabilities.deviceMemory
});
return capabilities;
}
// Monitor performance and adjust effects dynamically
export function monitorPerformance() {
if (!window.performance || !window.performance.getEntriesByType) {
return;
}
// Check for frame rate issues
let frameCount = 0;
let lastTime = performance.now();
function checkFrameRate() {
frameCount++;
const currentTime = performance.now();
if (currentTime - lastTime >= 1000) {
const fps = frameCount;
frameCount = 0;
lastTime = currentTime;
// If FPS is consistently low, reduce effects
if (fps < 30) {
document.body.classList.add('performance-degraded');
console.warn('Low FPS detected, reducing glassmorphism effects');
} else if (fps > 50) {
document.body.classList.remove('performance-degraded');
}
}
requestAnimationFrame(checkFrameRate);
}
requestAnimationFrame(checkFrameRate);
}
// Initialize performance optimizations
export function initializePerformanceOptimizations() {
// Apply initial optimizations
const capabilities = applyPerformanceOptimizations();
// Start performance monitoring
if (!capabilities.isLowEnd) {
monitorPerformance();
}
// Listen for connection changes
if (navigator.connection) {
navigator.connection.addEventListener('change', () => {
applyPerformanceOptimizations();
});
}
// Listen for reduced motion changes
const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
reducedMotionQuery.addEventListener('change', () => {
applyPerformanceOptimizations();
});
}