Files
AnchorOS/docs/PROJECT_UPDATE_JAN_2026.md
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

10 KiB

Actualización del Proyecto - Enero 2026

Resumen Ejecutivo

Se ha completado el Sistema de Kiosko y la Actualización de Recursos del sistema SalonOS. Estos cambios representan una expansión significativa de las capacidades del sistema, mejorando la operativa del salón y la experiencia del cliente.


Cambios Implementados

1. Sistema de Kiosko

Nuevo Rol: kiosk

  • Agregado al enum user_role
  • Permisos específicos: confirmación de citas y walk-ins
  • Sin acceso a PII de clientes

Nueva Tabla: kiosks

CREATE TABLE kiosks (
    id UUID PRIMARY KEY,
    location_id UUID NOT NULL REFERENCES locations(id),
    device_name VARCHAR(100) UNIQUE,
    display_name VARCHAR(100),
    api_key VARCHAR(64) UNIQUE,
    ip_address INET,
    is_active BOOLEAN DEFAULT true,
    created_at TIMESTAMPTZ,
    updated_at TIMESTAMPTZ
);

Funciones SQL Implementadas

  • generate_kiosk_api_key() - Genera API keys de 64 caracteres
  • get_current_kiosk_id() - Obtiene kiosk actual por API key
  • is_kiosk() - Verifica si el usuario actual es un kiosko
  • get_current_kiosk_location_id() - Obtiene location del kiosko
  • get_available_resources_with_priority() - Asigna recursos con prioridad

API Routes Implementadas

  • POST /api/kiosk/authenticate - Autenticación de kiosko
  • GET /api/kiosk/bookings - Lista bookings de la location
  • POST /api/kiosk/bookings - Crea nuevo booking
  • POST /api/kiosk/bookings/[shortId]/confirm - Confirma booking
  • GET /api/kiosk/resources/available - Ver recursos disponibles
  • POST /api/kiosk/walkin - Crea reserva walk-in

Componentes UI

  • BookingConfirmation.tsx - Flujo para confirmar citas existentes
  • WalkInFlow.tsx - Flujo completo para crear reservas walk-in
  • ResourceAssignment.tsx - Muestra recursos con prioridad
  • kiosk/[locationId]/page.tsx - Pantalla principal del kiosko

Características Clave

  • Autenticación por API key - 64 caracteres aleatorios
  • Asignación automática de recursos - Prioridad: mkup > lshs > pedi > mani
  • Sin acceso a PII - Los kioskos no ven datos sensibles de clientes
  • Audit logging completo - Todas las acciones registradas
  • UI táctil-friendly - Diseñado para pantallas táctiles

2. Actualización de Recursos

Cambio de Nombres

Los recursos ahora usan códigos alfanuméricos estandarizados en lugar de nombres descriptivos.

Estructura por Location

Cada location tiene:

  • 3 Estaciones de Maquillaje (mkup-01, mkup-02, mkup-03)
  • 1 Cama de Pestañas (lshs-01)
  • 4 Estaciones de Pedicure (pedi-01, pedi-02, pedi-03, pedi-04)
  • 4 Estaciones de Manicure (mani-01, mani-02, mani-03, mani-04)

Total por Location: 12 Recursos

Impacto

  • ⚠️ Todos los bookings anteriores han sido eliminados por CASCADE DELETE
  • La migración crea automáticamente recursos para nuevas locations
  • Los códigos son consistentes y fáciles de memorizar

3. Actualización de Types

Nuevos Tipos

export type UserRole = 'admin' | 'manager' | 'staff' | 'artist' | 'customer' | 'kiosk'
export type CustomerTier = 'free' | 'gold' | 'black' | 'VIP'

export interface Kiosk {
  id: string
  location_id: string
  device_name: string
  display_name: string
  api_key: string
  ip_address?: string
  is_active: boolean
  created_at: string
  updated_at: string
}

4. Políticas RLS Actualizadas

Nuevas Políticas para Kiosk

  • Bookings: Puede ver y crear bookings de su location (sin PII)
  • Resources: Puede ver recursos disponibles de su location
  • Locations: Solo puede ver su propia location
  • Customers: NO puede ver datos de clientes (PII restriction)
  • Services: Puede ver servicios activos

5. Documentación Actualizada

Nuevos Documentos

  • docs/KIOSK_SYSTEM.md - Documentación completa del sistema de kiosko
  • docs/KIOSK_IMPLEMENTATION.md - Guía rápida de implementación
  • docs/RESOURCES_UPDATE.md - Documentación de actualización de recursos

Documentos Actualizados

  • TASKS.md - Estado actual del proyecto y próximos pasos
  • README.md - Descripción del sistema incluyendo kiosko
  • PRD.md - Referencia de reglas de negocio

Estado Actual del Proyecto

Completado (90% Fase 1)

Infraestructura Base

  • Proyecto Supabase configurado
  • Roles definidos (Admin, Manager, Staff, Artist, Customer, Kiosk)
  • Políticas RLS implementadas

Esquema de Base de Datos

  • Todas las tablas creadas y relacionadas
  • Constraints y foreign keys
  • Campos de auditoría (created_at, updated_at)
  • Recursos actualizados con códigos estandarizados

Generadores y Automatismos

  • Short ID generator (6 chars, collision-safe)
  • Invitation code generator (10 chars)
  • Reseteo semanal de invitaciones
  • Audit logging completo

Sistema de Kiosko

  • Tabla kiosks con API key authentication
  • API routes completas
  • Componentes UI funcionales
  • Asignación inteligente de recursos

Pendiente (10% Fase 1)

  • Testing exhaustivo del sistema de kiosko
  • Validación de migración de recursos en producción
  • Implementación de Auth con Supabase Magic Links/SMS

Próximos Pasos Inmediatos

Prioridad Alta - Esta Semana

  1. Testing del Sistema de Kiosko

    • Test de autenticación de API key
    • Test de confirmación de citas
    • Test de walk-ins
    • Verificar asignación de recursos con prioridad
  2. Ejecutar Migración de Recursos

    • Aplicar migración en Supabase
    • Verificar creación correcta de recursos
    • Confirmar no hay bookings huérfanos
  3. Configurar Kioskos en Producción

    • Crear kioskos para cada location
    • Configurar API keys
    • Probar acceso desde pantalla táctil

Prioridad Media - Próximas 2 Semanas

  1. Implementar API Routes para Bookings (Cliente)

    • Listar bookings del cliente
    • Crear nuevo booking
    • Modificar/cancelar booking
  2. Implementar Lógica de Disponibilidad

    • Función para buscar disponibilidad de staff
    • Función para buscar disponibilidad de recursos
  3. Implementar Notificaciones Básicas

    • Email de confirmación
    • Email de recordatorio (24h antes)

Prioridad Baja - Próximo Mes

  1. Desarrollar HQ Dashboard (Fase 4)

    • Calendario multi-columna
    • Gestión operativa de recursos y staff
  2. Integración con Stripe (Fase 3)

    • Configurar Stripe
    • Implementar webhooks
    • Lógica de depósitos dinámicos

Impacto en el Sistema

Operativo

  • Reducción de carga de staff: Los clientes pueden confirmar citas y crear walk-ins sin asistencia
  • Mejor gestión de recursos: Asignación automática con prioridad
  • Mayor eficiencia: Menos tiempo perdido en confirmación manual

Técnico

  • Arquitectura extensible: Sistema preparado para agregar más kioskos
  • Seguridad robusta: API keys de 64 caracteres, RLS granulares
  • Auditoría completa: Toda acción de kiosko registrada

Experiencia del Cliente

  • Autoservicio: Confirmación de cita en segundos
  • Walk-ins más rápidos: Creación de reserva sin espera
  • Claridad: Códigos de recursos consistentes

Archivos Creados/Modificados

Nuevos Archivos (12)

supabase/migrations/
├── 20260116000000_add_kiosk_system.sql
└── 20260116010000_update_resources.sql

app/api/kiosk/
├── authenticate/route.ts
├── bookings/route.ts
├── bookings/[shortId]/confirm/route.ts
├── resources/available/route.ts
└── walkin/route.ts

app/kiosk/
└── [locationId]/page.tsx

components/kiosk/
├── BookingConfirmation.tsx
├── WalkInFlow.tsx
└── ResourceAssignment.tsx

components/ui/
├── button.tsx
└── input.tsx

docs/
├── KIOSK_SYSTEM.md
├── KIOSK_IMPLEMENTATION.md
└── RESOURCES_UPDATE.md

Archivos Modificados (4)

lib/db/types.ts
TASKS.md
README.md

Métricas

Líneas de Código Agregadas

  • SQL: ~800 líneas
  • TypeScript: ~900 líneas
  • Documentación: ~1200 líneas

Total: ~2,900 líneas de código y documentación

Funciones SQL Agregadas: 7

API Routes Agregadas: 6

Componentes UI Agregadas: 4

Migraciones SQL Agregadas: 2

Documentos Agregados: 3


Decisiones de Diseño

¿Por qué API Key Authentication para Kioskos?

  • Simplicidad: No requiere login/password
  • Seguridad: Claves de 64 caracteres, difíciles de adivinar
  • Gestión: Fácil rotar claves
  • Restricción: Posible limitar por IP address

¿Por Qué Códigos Alfanuméricos para Recursos?

  • Consistencia: Mismo patrón en todas las locations
  • Brevedad: Fáciles de comunicar (mkup-01 vs "Estación de Maquillaje 1")
  • Programabilidad: Fáciles de parsear y validar
  • Escalabilidad: Fácil agregar nuevos recursos

¿Por Qué Prioridad de Recursos?

  • Optimización: Asignar mejor recurso disponible
  • Lógica Consistente: Mismo criterio para todas las asignaciones
  • Eficiencia: Uso óptimo de estaciones físicas

Riesgos y Mitigaciones

Riesgo: Kiosko Sin Conexión

Mitigación: Considerar modo offline para futura implementación

Riesgo: API Key Expuesta

Mitigación: Restricción opcional por IP, rotación periódica de claves

Riesgo: Confusión por Cambio de Recursos

Mitigación: Documentación clara, comunicación previa a staff/clients

Riesgo: Bookings Eliminados por CASCADE DELETE

Mitigación: En producción, implementar migración de datos antes de eliminar


Conclusión

El sistema de kiosko y la actualización de recursos representan un avance significativo en las capacidades operativas de SalonOS. Estas mejoras preparan el sistema para una implementación en producción, optimizando tanto la experiencia del cliente como la eficiencia operativa del salón.

El proyecto está en un estado sólido (90% completado de Fase 1), con una infraestructura robusta y segura lista para el desarrollo de las fases restantes.


Fecha: 16 de Enero, 2026 Versión: v1.0.0 Fase: Fase 1 - Cimientos y CRM (90% completado)