Commit Graph

14 Commits

Author SHA1 Message Date
Marco Gallegos
1b8ab9fecf docs: Document all Supabase connection fixes and API improvements
- Update README with Node.js 20 requirement and recent fixes
- Enhance API documentation with improved endpoints and troubleshooting
- Add Supabase connection issue resolution to troubleshooting guide
- Document lazy client initialization and enhanced error diagnostics
- Include recent improvements section in README
2026-01-18 09:31:50 -06:00
Marco Gallegos
0f3de32899 🚀 FASE 4 COMPLETADO: Comentarios auditables + Calendario funcional + Gestión staff/recursos
 COMENTARIOS AUDITABLES IMPLEMENTADOS:
- 80+ archivos con JSDoc completo para auditoría manual
- APIs críticas con validaciones business/security/performance
- Componentes con reglas de negocio documentadas
- Funciones core con edge cases y validaciones

 CALENDARIO MULTI-COLUMNA FUNCIONAL (95%):
- Drag & drop con reprogramación automática
- Filtros por sucursal/staff, tiempo real
- Indicadores de conflictos y disponibilidad
- APIs completas con validaciones de colisión

 GESTIÓN OPERATIVA COMPLETA:
- CRUD staff: APIs + componente con validaciones
- CRUD recursos: APIs + componente con disponibilidad
- Autenticación completa con middleware seguro
- Auditoría completa en todas las operaciones

 DOCUMENTACIÓN ACTUALIZADA:
- TASKS.md: FASE 4 95% completado
- README.md: Estado actual y funcionalidades
- API.md: 40+ endpoints documentados

 SEGURIDAD Y VALIDACIONES:
- RLS policies documentadas en comentarios
- Business rules validadas manualmente
- Performance optimizations anotadas
- Error handling completo

Próximos: Nómina/POS/CRM avanzado (FASE 4 final)
2026-01-17 15:31:13 -06:00
Marco Gallegos
71e8c9af0f docs: Update APERTURE_SQUARE_UI.md with Radix UI
TASK 4: Update APERTURE_SQUARE_UI.md with Radix UI - COMPLETED
- Add Section 3: Radix UI Components Used
- Document installed Radix UI packages:
  - @radix-ui/react-button
  - @radix-ui/react-select
  - @radix-ui/react-tabs
  - @radix-ui/react-dropdown-menu
  - @radix-ui/react-dialog
  - @radix-ui/react-tooltip
  @radix-ui/react-label
  @radix-ui/react-switch
  - @radix-ui/react-checkbox

- Document Radix UI styling with Square UI tokens:
  - Button variants: primary, secondary, ghost, danger, success, warning
  - Select: dropdown with Square UI colors
  - Tabs: active indicator, colors for states
  - Dialog: Square UI background, border, radius, shadow
  - Tooltip: Square UI styling with proper spacing
- Document Custom Components:
  - Card, Avatar, Table, Badge (no Radix UI, custom implementation)
- Add Section 5: Code Conventions
  - Examples of Radix UI with Square UI styling
- Component composition examples (Button, Dialog, Tooltip)
- Add Section 6: Example Page with Radix UI
- Complete dashboard page example with tabs, cards, badges
- Add Section 7: Accessibility Guidelines
  - Priority A: Keyboard Navigation (Radix UI support)
- Priority B: ARIA Attributes
- Priority C: Focus Management

Impact:
- Clear Radix UI integration guide for developers
- Square UI styling patterns documented
- Accessibility standards defined
- Complete examples for common use cases

Files Modified:
- docs/APERTURE_SQUARE_UI.md

Next: Task 5 - Update globals.css with complete variables
2026-01-17 11:00:41 -06:00
Marco Gallegos
51dc8f607e docs: Add granular permissions system to Aperture specs
TASK 4.2: Document granular permissions system - COMPLETED
- Add Section 7: Granular Permissions System to APERTURE_SPECS.md
- Defines flexible permission system allowing granular permission assignment to ANY user
- Only users with admin role can assign permissions
- Permissions are independent of user roles (not inherited)

Key Features:
- User-based permissions (not role-based)
- Admin-only permission assignment
- Audit logging of permission changes
- Reusable UI components for permission checking

Permissions Categories Documented:
1. Dashboard & Stats (8 permissions)
2. Calendar & Bookings (6 permissions)
3. Staff Management (10 permissions)
4. Client Management (11 permissions)
5. POS & Sales (8 permissions)
6. Finance (6 permissions)
7. Marketing (9 permissions)
8. Configuration (4 permissions)

Database Schema Added:
- user_permissions table
- Supports user_id, permission_key, granted, granted_by, granted_at
- Unique constraint on (user_id, permission_key)
- Check constraint to verify user exists in auth.users

API Endpoints:
- GET /api/aperture/permissions/check - Check single permission
- GET /api/aperture/permissions/user - Get user permissions
- POST /api/aperture/permissions/assign - Assign permissions (admin only)
- GET /api/aperture/permissions/list - Get all available permissions

Helper Functions Documented:
- hasPermission(user_id, permission_key) - Check single permission
- hasPermissions(user_id, permission_keys) - Check multiple permissions
- isAdmin(user_id) - Check if user is admin role

UI Components Documented:
- PermissionChecker - Single permission check with fallback
- MultiPermissionChecker - Multiple permissions check (all/any mode)
- Usage examples for Staff, POS, Dashboard pages

Security Considerations:
- Row Level Security (RLS) for all sensitive tables
- Only admin can assign permissions
- All financial actions must be audited
- Validation before allowing actions

Files Modified:
- docs/APERTURE_SPECS.md

Next: Task 4 - Update APERTURE_SQUARE_UI.md with Radix UI
2026-01-17 10:58:02 -06:00
Marco Gallegos
197f07df7f docs: Create Aperture technical specifications document
TASK 4.1: Create technical specifications document - COMPLETED
- Create docs/APERTURE_SPECS.md with complete technical specifications:
  - Response to Question 9: Hours worked (automatic from bookings)
  - Complete POS structure with multiple cashiers
  - Granular permissions system documentation
- Includes:
  - Hours worked calculation logic (automatic vs manual)
  - POS architecture (6 payment methods, receipt options)
  - Multiple cashiers system with individual tracking
  - Financial management (expenses, profit margin)
  - Database schemas for POS, cashiers, expenses
  - API endpoints for POS operations

Specifications Documented:
- Hours worked: Automatic from bookings (scheduled vs actual duration)
- Time adjustments: Manual updates allowed by staff
- Payroll: Base salary + service commissions + product commissions + tips
- POS payment methods: Cash, Transfer, Membership, Card, Giftcard, PIA
- Receipts: Email or client dashboard only (no physical printing)
- Cashiers: Individual tracking with movement logs for error resolution
- Dynamic pricing: Configurable by service, both channels (booking + POS)
- Giftcards: Purchaseable, redeemable, balance tracking
- PIA (Paid in Advance): Apply previously paid deposits
- Recurring expenses: Daily, weekly, monthly, yearly frequencies

Database Schemas:
- staff_time_tracking (NEW) - Track scheduled vs actual duration
- pos_sales (NEW) - All POS transactions
- giftcards (NEW) - Giftcard management
- daily_cash_close (NEW) - Individual cashier closing
- expenses (NEW) - Financial expense tracking

API Endpoints:
- POST /api/aperture/pos/sales
- GET /api/aperture/pos/daily-summary
- POST /api/aperture/pos/open-cash-register
- POST /api/aperture/pos/close-cash-register
- GET /api/aperture/pos/active-cash-registers
- POST /api/aperture/finance/expenses
- GET /api/aperture/finance/report

Impact:
- Complete technical foundation for POS implementation
- Clear data model for hours worked calculation
- Granular permissions architecture defined
- Multiple cashiers system fully specified

Files Created:
- docs/APERTURE_SPECS.md

Next: Task 2 - Document POS structure and multiple cashiers
2026-01-17 10:55:05 -06:00
Marco Gallegos
a160a93d8c docs: Update Aperture plan and design system documentation
- Update TASKS.md with complete Aperture implementation plan (7 phases)
  - Define critical, high, medium, and low priority tasks
  - Add timeline estimates: ~136-171 hours total (~17-21 business days)
  - Add sprint structure (6 sprints)

- Create APERTURE_SQUARE_UI.md: Complete Square UI style guide
  - Color palette, typography, borders, shadows
  - Layout patterns, component states
  - Accessibility guidelines
  - Responsive adaptations

- Create DESIGN_SYSTEM.md: Comprehensive design system for AnchorOS
  - Resolve color inconsistency between site_requirements.md and globals.css
  - Document both systems (anchor23.mx and Aperture)
  - Component documentation checklist
  - Implementation guidelines

- Update API.md with undocumented implemented routes:
  - GET /api/availability/blocks
  - GET /api/public/availability
  - POST /api/availability/staff
  - POST /api/kiosk/walkin
  - PATCH /api/bookings/[id]

- Update README.md with current project state:
  - Fase 1-3: 100% completed
  - Fase 4: 0% completed (redefined with full specifications)
  - Add missing feature details (POS, multiple cashiers, etc.)

Based on technical specifications received, Aperture now includes:
- Dashboard Home (KPI cards, performance charts, top performers, activity feed)
- Master Calendar (drag & drop, resize blocks, dynamic filters, visual indicators)
- Team & Payroll (staff CRUD, commissions, payroll calculation, shift management)
- Clients & Loyalty (CRM, VIP gallery, memberships, points system)
- Sales, Payments & Invoicing (POS, daily cash close, finance)
- Marketing & Configuration (campaigns, dynamic pricing, integration placeholders)

Tech stack: Radix UI + Tailwind CSS + Square UI custom styling
2026-01-17 10:16:28 -06:00
Marco Gallegos
e3c4f30648 feat: implement customer registration flow and business hours system
Major changes:
- Add customer registration with email/phone lookup (app/booking/registro)
- Add customers API endpoint (app/api/customers/route)
- Implement business hours for locations (mon-fri 10-7, sat 10-6, sun closed)
- Fix availability function type casting issues
- Add business hours utilities (lib/utils/business-hours.ts)
- Update Location type to include business_hours JSONB
- Add mock payment component for testing
- Remove Supabase auth from booking flow
- Fix /cita redirect path in booking flow

Database migrations:
- Add category column to services table
- Add business_hours JSONB column to locations table
- Fix availability functions with proper type casting
- Update get_detailed_availability to use business_hours

Features:
- Customer lookup by email or phone
- Auto-redirect to registration if customer not found
- Pre-fill customer data if exists
- Business hours per day of week
- Location-specific opening/closing times
2026-01-17 00:48:49 -06:00
Marco Gallegos
0f6fe9bf7b docs: update project documentation and types for Jan 2026 kiosk completion 2026-01-16 21:38:53 -06:00
Marco Gallegos
8fc9d3717e docs: add comprehensive code comments, update README and TASKS, create training and troubleshooting guides
- Add JSDoc comments to API routes and business logic functions
- Update README.md with Phase 2 status and deployment/production notes
- Enhance TASKS.md with estimated timelines and dependencies
- Create docs/STAFF_TRAINING.md for team onboarding
- Create docs/CLIENT_ONBOARDING.md for customer experience
- Create docs/OPERATIONAL_PROCEDURES.md for daily operations
- Create docs/TROUBLESHOOTING.md for common setup issues
- Fix TypeScript errors in hq/page.tsx
2026-01-16 18:42:45 -06:00
Marco Gallegos
686a3e19e1 docs: Actualizar configuración de puerto y documentación
- Configurar puerto 2311 por defecto en package.json
- Actualizar README.md con puerto local 2311
- Actualizar DOMAIN_CONFIGURATION.md con puerto 2311
- Actualizar comandos ngrok para usar puerto correcto
- Actualizar URLs de acceso local
2026-01-16 16:05:15 -06:00
Marco Gallegos
133b4f6c42 docs: Actualizar documentación del proyecto
- Actualizar README.md con estado actual del proyecto
- Agregar sección de anchor23.mx frontend institucional
- Actualizar estructura de rutas y carpetas
- Actualizar fase actual (95% Fase 1, 60% Fase 2)
- Crear documento DOMAIN_CONFIGURATION.md con guía de dominios
- Crear documento ANCHOR23_FRONTEND.md con detalles técnicos
- Agregar referencias cruzadas en README

Completados recientes:
 Frontend institucional anchor23.mx (todas las páginas)
 Sistema de disponibilidad completo
 API de reservas para clientes
 HQ Dashboard con calendario multi-columna
2026-01-16 15:51:53 -06:00
Marco Gallegos
fed5cb6850 feat: Implementar sistema de kiosko, enrollment e integración Telegram
## Sistema de Kiosko 
- Nuevo rol 'kiosk' en enum user_role
- Tabla kiosks con autenticación por API key (64 caracteres)
- Funciones SQL: generate_kiosk_api_key(), is_kiosk(), get_available_resources_with_priority()
- API Routes: authenticate, bookings (GET/POST), confirm, resources/available, walkin
- Componentes UI: BookingConfirmation, WalkInFlow, ResourceAssignment
- Página kiosko: /kiosk/[locationId]/page.tsx

## Sistema de Enrollment 
- API routes para administración: /api/admin/users, /api/admin/kiosks, /api/admin/locations
- Frontend enrollment: /admin/enrollment con autenticación por ADMIN_KEY
- Creación de staff (admin, manager, staff, artist) con Supabase Auth
- Creación de kiosks con generación automática de API key
- Componentes UI: card, button, input, label, select, tabs

## Actualización de Recursos 
- Reemplazo de recursos con códigos estándarizados
- Estructura por location: 3 mkup, 1 lshs, 4 pedi, 4 mani
- Migración de limpieza: elimina duplicados
- Total: 12 recursos por location

## Integración Telegram y Scoring 
- Campos agregados a staff: telegram_id, email, gmail, google_account, telegram_chat_id
- Sistema de scoring: performance_score, total_bookings_completed, total_guarantees_count
- Tablas: telegram_notifications, telegram_groups, telegram_bots
- Funciones: update_staff_performance_score(), get_top_performers(), get_performance_summary()
- Triggers automáticos: notificaciones al crear/confirmar/completar booking
- Cálculo de score: base 50 +10 por booking +5 por garantía +1 por $100

## Actualización de Tipos 
- UserRole: agregado 'kiosk'
- CustomerTier: agregado 'black', 'VIP'
- Nuevas interfaces: Kiosk

## Documentación 
- KIOSK_SYSTEM.md: Documentación completa del sistema
- KIOSK_IMPLEMENTATION.md: Guía rápida
- ENROLLMENT_SYSTEM.md: Sistema de enrollment
- RESOURCES_UPDATE.md: Actualización de recursos
- PROJECT_UPDATE_JAN_2026.md: Resumen de proyecto

## Componentes UI (7)
- button.tsx, card.tsx, input.tsx, label.tsx, select.tsx, tabs.tsx

## Migraciones SQL (4)
- 20260116000000_add_kiosk_system.sql
- 20260116010000_update_resources.sql
- 20260116020000_cleanup_and_fix_resources.sql
- 20260116030000_telegram_integration.sql

## Métricas
- ~7,500 líneas de código
- 32 archivos creados/modificados
- 7 componentes UI
- 10 API routes
- 4 migraciones SQL
2026-01-16 10:51:12 -06:00
Marco Gallegos
18071cfb63 refactor: migrate from old db/ to supabase CLI structure
- Migrated database schema from db/migrations to supabase/migrations
- Added Supabase CLI configuration (config.toml, .gitignore)
- Added kiosk role and amenities tables for touch kiosks
- Added notification system for artist alerts
- Added seed data with test locations and staff
- Removed old migration scripts and documentation
- Updated tasks_mg.md with current setup

Features:
- 2 locations: ANCHOR:23 - Via KLAVA and TEST
- Kiosk role for touch screen check-in/booking
- Amenities: coffee, cocktails, mocktails for clients
- Notifications when client arrives
- 1 staff + 4 artists + 1 kiosk per location
- Services: hair, nails, makeup, lashes
2026-01-16 00:01:32 -06:00
Marco Gallegos
4707ddbd5a feat(salonos): implementar Fase 1.1 y 1.2 - Infraestructura y Esquema de Base de Datos
Implementación completa de la Fase 1.1 y 1.2 del proyecto SalonOS:

## Cambios en Reglas de Negocio (PRD.md, AGENTS.md, TASKS.md)
- Actualizado reset de invitaciones de mensual a semanal (Lunes 00:00 UTC)
- Jerarquía de roles actualizada: Admin > Manager > Staff > Artist > Customer
- Artistas (antes colaboradoras) ahora tienen rol 'artist'
- Staff/Manager/Admin pueden ver PII de customers
- Artist solo ve nombre y notas de customers (restricción de privacidad)

## Estructura del Proyecto (Next.js 14)
- app/boutique/: Frontend de cliente
- app/hq/: Dashboard administrativo
- app/api/: API routes
- components/: Componentes UI reutilizables (boutique, hq, shared)
- lib/: Lógica de negocio (supabase, db, utils)
- db/: Esquemas, migraciones y seeds
- integrations/: Stripe, Google Calendar, WhatsApp
- scripts/: Scripts de utilidad y automatización
- docs/: Documentación del proyecto

## Esquema de Base de Datos (Supabase PostgreSQL)
8 tablas creadas:
- locations: Ubicaciones con timezone
- resources: Recursos físicos (estaciones, habitaciones, equipos)
- staff: Personal con roles jerárquicos
- services: Catálogo de servicios
- customers: Información de clientes con tier (free/gold)
- invitations: Sistema de invitaciones semanales
- bookings: Sistema de reservas con short_id (6 caracteres)
- audit_logs: Registro de auditoría automática

14 funciones creadas:
- generate_short_id(): Generador de Short ID (6 chars, collision-safe)
- generate_invitation_code(): Generador de códigos de invitación (10 chars)
- reset_weekly_invitations_for_customer(): Reset individual de invitaciones
- reset_all_weekly_invitations(): Reset masivo de invitaciones
- validate_secondary_artist_role(): Validación de secondary_artist
- log_audit(): Trigger de auditoría automática
- get_current_user_role(): Obtener rol del usuario actual
- is_staff_or_higher(): Verificar si es admin/manager/staff
- is_artist(): Verificar si es artist
- is_customer(): Verificar si es customer
- is_admin(): Verificar si es admin
- update_updated_at(): Actualizar timestamps
- generate_booking_short_id(): Generar Short ID automáticamente
- get_week_start(): Obtener inicio de semana

17+ triggers activos:
- Auditores automáticos en tablas críticas
- Timestamps updated_at en todas las tablas
- Validación de secondary_artist (trigger en lugar de constraint)

20+ políticas RLS configuradas:
- Restricción crítica: Artist no ve email/phone de customers
- Jerarquía de roles: Admin > Manager > Staff > Artist > Customer
- Políticas granulares por tipo de operación y rol

6 tipos ENUM:
- user_role: admin, manager, staff, artist, customer
- customer_tier: free, gold
- booking_status: pending, confirmed, cancelled, completed, no_show
- invitation_status: pending, used, expired
- resource_type: station, room, equipment
- audit_action: create, update, delete, reset_invitations, payment, status_change

## Scripts de Utilidad
- check-connection.sh: Verificar conexión a Supabase
- simple-verify.sh: Verificar migraciones instaladas
- simple-seed.sh: Crear datos de prueba
- create-auth-users.js: Crear usuarios de Auth en Supabase
- verify-migration.sql: Script de verificación SQL completo
- seed-data.sql: Script de seed de datos SQL completo

## Documentación
- docs/STEP_BY_STEP_VERIFICATION.md: Guía paso a paso de verificación
- docs/STEP_BY_STEP_AUTH_CONFIG.md: Guía paso a paso de configuración Auth
- docs/POST_MIGRATION_SUCCESS.md: Guía post-migración
- docs/MIGRATION_CORRECTION.md: Detalle de correcciones aplicadas
- docs/QUICK_START_POST_MIGRATION.md: Guía rápida de referencia
- docs/SUPABASE_DASHBOARD_MIGRATION.md: Guía de ejecución en Dashboard
- docs/00_FULL_MIGRATION_FINAL_README.md: Guía de migración final
- SIMPLE_GUIDE.md: Guía simple de inicio
- FASE_1_STATUS.md: Estado de la Fase 1

## Configuración
- package.json: Dependencias y scripts de npm
- tsconfig.json: Configuración TypeScript con paths aliases
- next.config.js: Configuración Next.js
- tailwind.config.ts: Tema personalizado con colores primary, secondary, gold
- postcss.config.js: Configuración PostCSS
- .gitignore: Archivos excluidos de git
- .env.example: Template de variables de entorno

## Correcciones Aplicadas
1. Constraint de subquery en CHECK reemplazado por trigger de validación
   - PostgreSQL no permite subqueries en CHECK constraints
   - validate_secondary_artist_role() ahora es un trigger

2. Variable no declarada en loop
   - customer_record RECORD; añadido en bloque DECLARE

## Principios Implementados
- UTC-first: Todos los timestamps se almacenan en UTC
- Sistema Doble Capa: Validación Staff/Artist + Recurso físico
- Reset semanal: Invitaciones se resetean cada Lunes 00:00 UTC
- Idempotencia: Procesos de reset son idempotentes y auditados
- Privacidad: Artist solo ve nombre y notas de customers
- Auditoría: Todas las acciones críticas se registran automáticamente
- Short ID: 6 caracteres alfanuméricos como referencia humana
- UUID: Identificador primario interno

## Próximos Pasos
- Ejecutar scripts de verificación y seed
- Configurar Auth en Supabase Dashboard
- Implementar Tarea 1.3: Short ID & Invitaciones (backend)
- Implementar Tarea 1.4: CRM Base (endpoints CRUD)
2026-01-15 14:58:28 -06:00