feat: Add kiosk management, artist selection, and schedule management

- Add KiosksManagement component with full CRUD for kiosks
- Add ScheduleManagement for staff schedules with break reminders
- Update booking flow to allow artist selection by customers
- Add staff_services API for assigning services to artists
- Update staff management UI with service assignment dialog
- Add auto-break reminder when schedule >= 8 hours
- Update availability API to filter artists by service
- Add kiosk management to Aperture dashboard
- Clean up ralphy artifacts and logs
This commit is contained in:
Marco Gallegos
2026-01-21 13:02:06 -06:00
parent 24e5af3860
commit d27354fd5a
71 changed files with 3353 additions and 2701 deletions

View File

@@ -7,7 +7,19 @@ import { BookingConfirmation } from '@/components/kiosk/BookingConfirmation'
import { WalkInFlow } from '@/components/kiosk/WalkInFlow'
import { Calendar, UserPlus, MapPin, Clock } from 'lucide-react'
/** @description Kiosk interface component for location-based check-in confirmations and walk-in booking creation. */
/**
* @description Kiosk interface component for location-based check-in confirmations and walk-in booking creation
* @param {Object} params - Route parameters containing the locationId
* @param {string} params.locationId - The UUID of the salon location this kiosk serves
* @returns {JSX.Element} Interactive kiosk interface with authentication, clock, and action cards
* @audit BUSINESS RULE: Kiosk enables customer self-service for check-in and walk-in bookings
* @audit BUSINESS RULE: Real-time clock displays in location's timezone for customer reference
* @audit SECURITY: Device authentication via API key required before any operations
* @audit SECURITY: Kiosk mode has no user authentication - relies on device-level security
* @audit Validate: Location must be active and have associated kiosk device registered
* @audit PERFORMANCE: Single-page app with view-based rendering (no page reloads)
* @audit AUDIT: Kiosk operations logged for security and operational monitoring
*/
export default function KioskPage({ params }: { params: { locationId: string } }) {
const [apiKey, setApiKey] = useState<string | null>(null)
const [location, setLocation] = useState<any>(null)