diff --git a/README.md b/README.md
index 2208fbc..a89d6d6 100644
--- a/README.md
+++ b/README.md
@@ -240,17 +240,8 @@ El sitio estará disponible en **http://localhost:2311**
- ✅ Sistema de disponibilidad (staff, recursos, bloques)
- ✅ API routes de disponibilidad
- ✅ API de reservas para clientes (POST/GET)
-- ✅ HQ Dashboard (Aperture) con gestión de staff y recursos
-- ✅ Reportes de ventas, pagos y nómina
-- ✅ Gestión de permisos por roles
-- ✅ Integración con Stripe para pagos y depósitos
-- ✅ Autenticación completa (clientes con magic links, staff/admin)
-- ✅ The Boutique - Frontend de reservas completo
- - Página de selección de servicios (/booking/servicios)
- - Página de confirmación de reserva (/booking/cita)
- - API para obtener servicios (/api/services)
- - API para obtener ubicaciones (/api/locations)
- - Configuración de dominios wildcard en producción
+- ✅ HQ Dashboard básico (Aperture) - EXISTE pero incompleto
+- ✅ API routes básicos para Aperture (dashboard, staff, resources, reports, permissions)
- ✅ Frontend institucional anchor23.mx completo
- Landing page con hero, fundamento, servicios, testimoniales
- Página de servicios
@@ -262,15 +253,46 @@ El sitio estará disponible en **http://localhost:2311**
- Header y footer globales
### En Progreso 🚧
+- 🚧 The Boutique - Frontend de reservas (booking.anchor23.mx) - 90%
+ - ✅ Página de selección de servicios (/booking/servicios)
+ - ✅ Página de búsqueda de clientes (/booking/cita - paso 1)
+ - ✅ Página de registro de clientes (/booking/registro)
+ - ✅ Página de confirmación de reserva (/booking/cita - pasos 2-3)
+ - ✅ Página de confirmación por código (/booking/confirmacion)
+ - ✅ Layout específico con navbar personalizado
+ - ✅ API para obtener servicios (/api/services)
+ - ✅ API para obtener ubicaciones (/api/locations)
+ - ✅ API para buscar clientes (/api/customers - GET)
+ - ✅ API para registrar clientes (/api/customers - POST)
+ - ✅ Sistema de horarios de negocio por ubicación
+ - ✅ Componente de pagos mock para pruebas
+ - ⏳ Configuración de dominios wildcard en producción
+ - ⏳ Integración con Stripe real (webhooks)
+
+- 🚧 Aperture - Backend para staff/manager/admin (aperture.anchor23.mx) - 40%
+ - ✅ API para obtener staff disponible (/api/aperture/staff)
+ - ✅ API para gestión de horarios (/api/aperture/staff/schedule)
+ - ✅ API para recursos (/api/aperture/resources)
+ - ✅ API para dashboard (/api/aperture/dashboard)
+ - ✅ Página principal de admin (/aperture)
+ - ❌ API para estadísticas (/api/aperture/stats) - FALTA IMPLEMENTAR
+ - ❌ Reseteo semanal de invitaciones (documentado, NO implementado)
+ - ⏳ Autenticación de admin/staff/manager (login existe, needs Supabase Auth)
+ - ⏳ Gestión completa de staff (CRUD, horarios)
+ - ⏳ Gestión de recursos y asignación
+ - ⏳ Rediseño con estilo Square UI
+
- 🚧 Lógica de no-show y penalizaciones automáticas
-- 🚧 Integración con Google Calendar
+- 🚧 Integración con Google Calendar (20% - en progreso)
### Pendiente ⏳
- ⏳ Implementar API pública (api.anchor23.mx)
+- ⏳ Completar Aperture con estilo Square UI (calendario multi-columna, páginas individuales, The Vault)
- ⏳ Notificaciones por WhatsApp
- ⏳ Recibos digitales por email
- ⏳ Landing page para believers (booking público)
-- ⏳ The Vault (storage de fotos privadas)
+- ⏳ Tests unitarios
+- ⏳ Archivos SEO (robots.txt, sitemap.xml)
### Fase Actual
**Fase 1 — Cimientos y CRM**: 100% completado
@@ -295,6 +317,18 @@ El sitio estará disponible en **http://localhost:2311**
- Stripe depósitos dinámicos: 100%
- No-show logic: 40% (lógica implementada, automatización pendiente)
+**Fase 4 — HQ Dashboard**: 10% completado
+- Aperture dashboard básico: 100% (existe pero incompleto)
+- Autenticación staff/admin: 40% (página login existe, needs Supabase Auth integration)
+- Calendario Multi-Columna: 0% (pendiente)
+- Gestión Operativa: 20% (APIs existentes, UI incompleta)
+- The Vault: 0% (pendiente)
+
+**Fase 5 — Automatización y Lanzamiento**: 5% completado
+- Notificaciones WhatsApp: 0% (variables configuradas, no implementado)
+- Recibos digitales: 0% (pendiente)
+- Landing page Believers: 0% (pendiente)
+
**Advertencia:** No apto para producción. Migraciones y seeds en evolución.
---
diff --git a/TASKS.md b/TASKS.md
index 334feb2..edb451d 100644
--- a/TASKS.md
+++ b/TASKS.md
@@ -463,7 +463,7 @@ Validación Staff (rol Staff):
- Sistema de disponibilidad (staff, recursos, bloques)
- API routes de disponibilidad
- API de reservas para clientes (POST/GET)
-- HQ Dashboard con calendario multi-columna
+- HQ Dashboard básico (Aperture) - EXISTE pero incompleto
- Frontend institucional anchor23.mx completo
- Landing page con hero, fundamento, servicios, testimoniales
- Página de servicios
@@ -497,8 +497,9 @@ Validación Staff (rol Staff):
- ✅ API para recursos (/api/aperture/resources)
- ✅ API para dashboard (/api/aperture/dashboard)
- ✅ Página principal de admin (/aperture)
- - ⏳ Autenticación de admin/staff/manager
- - ⏳ Gestión completa de staff
+ - ❌ API para estadísticas (/api/aperture/stats) - FALTA IMPLEMENTAR
+ - ⏳ Autenticación de admin/staff/manager (login existe, needs Supabase Auth)
+ - ⏳ Gestión completa de staff (CRUD, horarios)
- ⏳ Gestión de recursos y asignación
### ⏳ Pendiente
@@ -514,54 +515,121 @@ Validación Staff (rol Staff):
---
-## PRÓXIMAS TARES PRIORITARIAS
+## PRÓXIMAS TAREAS PRIORITARIAS
-### Prioridad Alta - Esta Semana (Timeline: 7 días)
+### 🔴 CRÍTICO - Bloquea Funcionamiento (Timeline: 1-2 días)
-1. **Terminar The Boutique (booking.anchor23.mx)** - 3-4 días
- - Implementar autenticación de clientes (depende de: Supabase Auth configurado)
- - Completar flujo de reserva (depende de: auth implementado)
- - Integrar con sistema de pagos (Stripe) (depende de: webhooks Stripe)
- - Testing completo del flujo (depende de: integración completa)
+1. **Implementar `GET /api/aperture/stats`** - ~30 min
+ - Dashboard de Aperture espera este endpoint
+ - Sin esto, estadísticas no se cargan
+ - Respuesta esperada: `{ success: true, stats: { totalBookings, totalRevenue, completedToday, upcomingToday } }`
+ - Ubicación: `app/api/aperture/stats/route.ts`
-2. **Completar Aperture (aperture.anchor23.mx)** - 4-5 días
- - Implementar autenticación de admin/staff/manager (depende de: Supabase Auth)
- - Gestión completa de staff (CRUD, horarios) (depende de: auth implementado, APIs existentes)
- - Gestión de recursos y asignación (depende de: staff gestión)
- - Dashboard operativo completo (depende de: gestión implementada)
- - Testing de APIs (depende de: todas las funciones)
+2. **Implementar autenticación para Aperture** - ~2-3 horas
+ - Integración con Supabase Auth para roles admin/manager/staff
+ - Protección de rutas de Aperture (middleware)
+ - Session management
+ - Página login ya existe en `/app/aperture/login/page.tsx`, needs Supabase Auth integration
-3. **Configurar Kioskos en Producción** - 1-2 días
- - Crear kioskos para cada location (depende de: migraciones en prod)
- - Configurar API keys en variables de entorno (depende de: env setup)
- - Probar acceso desde pantalla táctil (depende de: kioskos creados)
- - Usar el sistema de enrollment en `/admin/enrollment` (depende de: admin auth)
+3. **Implementar reseteo semanal de invitaciones** - ~2-3 horas
+ - Script/Edge Function que se ejecuta cada Lunes 00:00 UTC
+ - Resetea `weekly_invitations_used` a 0 para todos los clientes Tier Gold
+ - Registra acción en `audit_logs`
+ - Documentado en TASKS.md línea 211 pero NO implementado
+ - Impacto: Membresías Gold no funcionan correctamente sin esto
-### Prioridad Media - Próximas 2 Semanas (Timeline: 14 días)
+### 🟡 ALTA - Documentación y Diseño (Timeline: 1 semana)
-4. **Implementar API Pública (api.anchor23.mx)** - 3-4 días
- - Horarios de operación públicos (depende de: locations table)
- - Lista de servicios disponibles (depende de: services table, RLS público)
- - Ubicaciones y contacto (depende de: locations table)
- - Información sin datos sensibles (depende de: RLS configurado)
+4. **Actualizar documentación con especificaciones técnicas completas** - ~4 horas
+ - Crear documento de especificaciones técnicas (`docs/APERATURE_SPECS.md`)
+ - Documentar respuesta a horas trabajadas (automático desde bookings)
+ - Definir estructura de POS completa
+ - Documentar sistema de múltiples cajeros
-5. **Sistema de Autenticación Completo** - 5-7 días
- - Supabase Auth para staff/admin (depende de: roles configurados)
- - Perfiles de cliente en The Boutique (depende de: auth cliente)
- - Gestión de sesiones (depende de: Supabase Auth completo)
+5. **Actualizar APERTURE_SQUARE_UI.md con Radix UI** - ~1.5 horas
+ - Agregar sección "Stack Técnico"
+ - Documentar componentes Radix UI específicos
+ - Ejemplos de uso de Radix con estilizado Square UI
+ - Guía de accesibilidad Radix (ARIA attributes, keyboard navigation)
-6. **Integración con Stripe** - 4-5 días
- - Webhooks para pagos (depende de: Stripe account, endpoints)
- - Depósitos dinámicos ($200 vs 50%) (depende de: webhooks)
- - Lógica de no-show y penalizaciones (depende de: webhooks, bookings logic)
+6. **Actualizar API.md con rutas implementadas** - ~1 hora
+ - Rutas a agregar que existen pero NO están en API.md:
+ - `GET /api/availability/blocks`
+ - `GET /api/public/availability`
+ - `POST /api/availability/staff`
+ - `POST /api/kiosk/walkin`
-### Prioridad Baja - Próximo Mes (Timeline: 30 días)
+### 🟢 MEDIA - Componentes y Features (Timeline: 6-8 semanas)
-7. **Documentar nuevos endpoints y configuración** - 7-10 días
- - API docs para aperture.anchor23.mx (depende de: APIs completas)
- - API docs para api.anchor23.mx (depende de: API pública implementada)
- - Configuración de dominios wildcard (depende de: dominio setup)
- - Guías de despliegue y testing (depende de: sistema completo)
+7. **Rediseñar Aperture completo con Radix UI** - ~136-171 horas
+ - **FASE 0**: Documentación y Configuración (~6 horas)
+ - **FASE 1**: Componentes Base con Radix UI (~20-25 horas)
+ - Instalar Radix UI
+ - Crear/actualizar componentes base (Button, Card, Input, Select, Tabs, etc.)
+ - Crear componentes específicos de Aperture (StatsCard, BookingCard, etc.)
+ - **FASE 2**: Dashboard Home (~15-20 horas)
+ - KPI Cards (Ventas, Citas, Clientes, Gráfico)
+ - Tabla "Top Performers"
+ - Feed de Actividad Reciente
+ - API: `/api/aperture/stats`
+ - **FASE 3**: Calendario Maestro (~25-30 horas)
+ - Columnas por trabajador, Drag & Drop, Resize de bloques
+ - Filtros dinámicos (Sucursal, Staff)
+ - Indicadores visuales (línea tiempo, bloqueos, tooltips)
+ - APIs: `/api/aperture/calendar`, `/api/aperture/bookings/[id]/reschedule`
+ - **FASE 4**: Miembros del Equipo y Nómina (~20-25 horas)
+ - Gestión de Staff (CRUD completo con foto, rating, toggle activo)
+ - Configuración de Comisiones (% por servicio y producto)
+ - Cálculo de Nómina (Sueldo Base + Comisiones + Propinas)
+ - Calendario de Turnos (vista semanal)
+ - APIs: `/api/aperture/staff` (PATCH, DELETE), `/api/aperture/payroll`
+ - **FASE 5**: Clientes y Fidelización (Loyalty) (~20-25 horas)
+ - CRM de Clientes (búsqueda fonética, histórico, notas técnicas)
+ - Galería de Fotos (SOLO VIP/Black/Gold) - Good to have: control de calidad, rastreabilidad de quejas
+ - Sistema de Membresías (planes, créditos)
+ - Sistema de Puntos (independiente de tiers, expiran después de X meses sin usar)
+ - APIs: `/api/aperture/clients`, `/api/aperture/loyalty`
+ - **FASE 6**: Ventas, Pagos y Facturación (~20-25 horas)
+ - POS (Punto de Venta) completo (puede crear nuevas citas + procesar pagos)
+ - NO imprimir recibos (enviar email o dashboard cliente)
+ - Cierre de Caja (resumen diario, PDF automático)
+ - Finanzas (gastos, margen neto)
+ - APIs: `/api/aperture/pos`, `/api/aperture/finance`
+ - **FASE 7**: Marketing y Configuración (~10-15 horas)
+ - Campañas (promociones masivas Email/WhatsApp)
+ - Precios Inteligentes (configurables por servicio, aplicables ambos canales)
+ - Integraciones Placeholder (Google, Instagram/FB Shopping) - Good to have, no priority
+ - APIs: `/api/aperture/campaigns`, `/api/aperture/pricing`, `/api/aperture/integrations`
+
+### 🟢 BAJA - Integraciones Pendientes (Timeline: 1-2 meses)
+
+8. **Implementar Google Calendar Sync** - ~6-8 horas
+ - Sincronización bidireccional
+ - Manejo de conflictos
+ - Webhook para updates de calendar
+
+9. **Implementar Notificaciones WhatsApp** - ~4-6 horas
+ - Integración con Twilio/Meta WhatsApp API
+ - Templates de mensajes (confirmación, recordatorios, alertas no-show)
+ - Sistema de envío programado
+
+10. **Implementar Recibos digitales** - ~3-4 horas
+ - Generador de PDFs
+ - Sistema de emails (SendGrid, AWS SES, etc.)
+ - Dashboard de transacciones
+
+11. **Crear Landing page Believers** - ~4-5 horas
+ - Página pública de booking
+ - Calendario simplificado para clientes
+ - Captura de datos básicos
+
+12. **Implementar Tests Unitarios** - ~5-7 horas
+ - Unit tests para generador de Short ID
+ - Tests para disponibilidad
+
+13. **Archivos SEO** - ~30 min
+ - `public/robots.txt`
+ - `public/sitemap.xml`
---
diff --git a/docs/APERTURE_SQUARE_UI.md b/docs/APERTURE_SQUARE_UI.md
new file mode 100644
index 0000000..ad5652a
--- /dev/null
+++ b/docs/APERTURE_SQUARE_UI.md
@@ -0,0 +1,541 @@
+# Aperture Design System - Square UI Style
+
+**Documento de estilo de diseño para Aperture (HQ Dashboard)**
+**Última actualización: Enero 2026**
+
+---
+
+## 1. Objetivo
+
+Aperture (aperture.anchor23.mx) es el dashboard administrativo y CRM interno de AnchorOS. El estilo de diseño debe seguir principios similares a SquareUi:
+
+- Minimalista y limpio
+- Cards bien definidas con sombras sutiles
+- Espaciado generoso
+- Foco en usabilidad y claridad
+- Animaciones sutiles
+
+---
+
+## 2. Paleta de Colores
+
+### Primarios
+```css
+--ui-primary: #006AFF;
+--ui-primary-hover: #005ED6;
+--ui-primary-light: #E6F0FF;
+```
+
+### Neutros
+```css
+--ui-bg: #F6F8FA;
+--ui-bg-card: #FFFFFF;
+--ui-bg-hover: #F3F4F6;
+
+--ui-border: #E1E4E8;
+--ui-border-light: #F3F4F6;
+```
+
+### Texto
+```css
+--ui-text-primary: #24292E;
+--ui-text-secondary: #586069;
+--ui-text-tertiary: #8B949E;
+--ui-text-inverse: #FFFFFF;
+```
+
+### Estados
+```css
+--ui-success: #28A745;
+--ui-success-light: #D4EDDA;
+
+--ui-warning: #DBAB09;
+--ui-warning-light: #FFF3CD;
+
+--ui-error: #D73A49;
+--ui-error-light: #F8D7DA;
+
+--ui-info: #0366D6;
+--ui-info-light: #CCE5FF;
+```
+
+### Grises Semánticos
+```css
+--ui-gray-50: #F6F8FA;
+--ui-gray-100: #EAECEF;
+--ui-gray-200: #D1D5DA;
+--ui-gray-300: #B4B9C2;
+--ui-gray-400: #8A8A8A;
+--ui-gray-500: #586069;
+--ui-gray-600: #444C56;
+--ui-gray-700: #24292F;
+--ui-gray-800: #1F2428;
+--ui-gray-900: #0D1117;
+```
+
+---
+
+## 3. Bordes y Radii
+
+```css
+--ui-radius-sm: 4px;
+--ui-radius-md: 6px;
+--ui-radius-lg: 8px;
+--ui-radius-xl: 12px;
+--ui-radius-2xl: 16px;
+--ui-radius-full: 9999px;
+```
+
+**Uso recomendado:**
+- `md` para inputs y small cards
+- `lg` para buttons y medium cards
+- `xl` para modals y large cards
+- `full` para avatares y badges
+
+---
+
+## 4. Sombras (Elevations)
+
+```css
+--ui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 4px rgba(0, 0, 0, 0.04);
+--ui-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.05), 0 1px 3px rgba(0, 0, 0, 0.1);
+--ui-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05);
+--ui-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04);
+```
+
+**Uso recomendado:**
+- `sm` para tooltips y dropdowns
+- `md` para cards y modals
+- `lg` para sidebars y panels
+- `xl` para overlays y fullscreen modals
+
+---
+
+## 5. Tipografía
+
+### Font Family
+```css
+--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
+```
+
+### Font Sizes
+```css
+--text-xs: 0.75rem; /* 12px */
+--text-sm: 0.875rem; /* 14px */
+--text-base: 1rem; /* 16px */
+--text-lg: 1.125rem; /* 18px */
+--text-xl: 1.25rem; /* 20px */
+--text-2xl: 1.5rem; /* 24px */
+--text-3xl: 1.875rem; /* 30px */
+--text-4xl: 2.25rem; /* 36px */
+--text-5xl: 3rem; /* 48px */
+```
+
+### Font Weights
+```css
+--font-normal: 400;
+--font-medium: 500;
+--font-semibold: 600;
+--font-bold: 700;
+```
+
+### Line Heights
+```css
+--leading-tight: 1.25;
+--leading-normal: 1.5;
+--leading-relaxed: 1.75;
+```
+
+**Uso recomendado:**
+- `text-xs` + `font-medium` para labels
+- `text-sm` + `font-normal` para body text
+- `text-base` + `font-semibold` para headings
+- `text-xl` + `font-bold` para page titles
+- `text-3xl` + `font-bold` for hero titles
+
+---
+
+## 6. Espaciado (Spacing)
+
+```css
+--space-0: 0;
+--space-1: 0.25rem; /* 4px */
+--space-2: 0.5rem; /* 8px */
+--space-3: 0.75rem; /* 12px */
+--space-4: 1rem; /* 16px */
+--space-5: 1.25rem; /* 20px */
+--space-6: 1.5rem; /* 24px */
+--space-8: 2rem; /* 32px */
+--space-10: 2.5rem; /* 40px */
+--space-12: 3rem; /* 48px */
+--space-16: 4rem; /* 64px */
+```
+
+**Uso recomendado:**
+- `space-2` para padding de inputs
+- `space-4` para padding de cards
+- `space-6` para gaps en grid
+- `space-8` para section padding
+- `space-12` para margin entre secciones grandes
+
+---
+
+## 7. Z-Index Layers
+
+```css
+--z-dropdown: 100;
+--z-sticky: 200;
+--z-fixed: 300;
+--z-modal-backdrop: 400;
+--z-modal: 500;
+--z-popover: 600;
+--z-tooltip: 700;
+```
+
+---
+
+## 8. Transiciones y Animaciones
+
+```css
+--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
+--transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
+--transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
+```
+
+**Principios:**
+- Todas las transiciones deben usar `cubic-bezier(0.4, 0, 0.2, 1)` (ease-out)
+- Animaciones de entrada: `fadeIn`, `slideUp`, `scaleIn`
+- Animaciones de salida: `fadeOut`, `slideDown`, `scaleOut`
+- No usar animaciones llamativas o distractivas
+
+---
+
+## 9. Grid System
+
+### Breakpoints
+```css
+--breakpoint-sm: 640px;
+--breakpoint-md: 768px;
+--breakpoint-lg: 1024px;
+--breakpoint-xl: 1280px;
+--breakpoint-2xl: 1536px;
+```
+
+### Columnas
+- Mobile: 4 columnas
+- Tablet: 8 columnas
+- Desktop: 12 columnas
+
+### Gutter
+- Todos los niveles: 16px (1rem)
+
+---
+
+## 10. Estados de Componentes
+
+### Button States
+```css
+.btn-primary {
+ background: var(--ui-primary);
+ color: var(--ui-text-inverse);
+ border-radius: var(--ui-radius-lg);
+ padding: var(--space-2) var(--space-4);
+ transition: all var(--transition-base);
+}
+
+.btn-primary:hover {
+ background: var(--ui-primary-hover);
+ transform: translateY(-1px);
+}
+
+.btn-primary:active {
+ transform: translateY(0);
+}
+
+.btn-primary:disabled {
+ background: var(--ui-gray-300);
+ cursor: not-allowed;
+ opacity: 0.6;
+}
+```
+
+### Input States
+```css
+.input {
+ background: var(--ui-bg-card);
+ border: 1px solid var(--ui-border);
+ border-radius: var(--ui-radius-md);
+ padding: var(--space-2) var(--space-3);
+ transition: border-color var(--transition-fast);
+}
+
+.input:focus {
+ outline: none;
+ border-color: var(--ui-primary);
+ box-shadow: 0 0 0 3px var(--ui-primary-light);
+}
+
+.input:disabled {
+ background: var(--ui-gray-50);
+ cursor: not-allowed;
+}
+```
+
+### Card States
+```css
+.card {
+ background: var(--ui-bg-card);
+ border: 1px solid var(--ui-border);
+ border-radius: var(--ui-radius-xl);
+ box-shadow: var(--ui-shadow-md);
+ transition: all var(--transition-base);
+}
+
+.card:hover {
+ box-shadow: var(--ui-shadow-lg);
+ transform: translateY(-2px);
+}
+```
+
+---
+
+## 11. Layout Pattern
+
+### Sidebar Layout
+```typescript
+