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

5.3 KiB

🚀 GUÍA SIMPLE - SALONOS

ESTADO

  • Migraciones ejecutadas exitosamente en Supabase
  • Scripts simples creados para facilitar el setup
  • Base de datos lista para desarrollo

📋 PASOS RÁPIDOS (EN ORDEN)

Paso 1: Verificar Conexión

npm run simple:check

Qué hace: Verifica si puedes conectarte a Supabase desde la línea de comandos.

Si dice "Puerto 5432 está bloqueado":


Paso 2: Verificar Migraciones

npm run simple:verify

Qué hace: Verifica que todo esté correcto en la base de datos.

Output esperado:

🎉 TODAS LAS MIGRACIONES ESTÁN CORRECTAS

Paso 3: Crear Datos de Prueba

npm run simple:seed

Qué hace: Crea locations, staff, services, customers, invitations, bookings.

Output esperado:

🎉 SEED DE DATOS COMPLETADO EXITOSAMENTE

Paso 4: Crear Usuarios de Auth

npm run auth:create

Qué hace: Crea usuarios de staff y customers en Supabase Auth automáticamente.

Output esperado:

🎉 TODOS LOS USUARIOS HAN SIDO CREADOS Y ACTUALIZADOS

📝 Credenciales de prueba:

ADMIN:
  Email: admin@salonos.com
  Password: Admin123!

CUSTOMER (Gold):
  Email: sofia.ramirez@example.com
  Password: Customer123!

🚨 ALTERNATIVA: USAR SUPABASE DASHBOARD

Si el puerto 5432 está bloqueado (común en empresas con firewall):

Opción 1: Ejecutar Migraciones Completas

  1. Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
  2. Copia el contenido de: db/migrations/00_FULL_MIGRATION_FINAL.sql
  3. Pega en el SQL Editor
  4. Haz clic en "Run"

Opción 2: Crear Usuarios Manualmente

  1. Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/auth/users
  2. Haz clic en "Add user"
  3. Crea estos usuarios:

Admin:

  • Email: admin@salonos.com
  • Password: Admin123!
  • Auto Confirm: ON

Staff (Manager Centro):

  • Email: manager.centro@salonos.com
  • Password: Manager123!
  • Auto Confirm: ON

Customer (Gold):

  • Email: sofia.ramirez@example.com
  • Password: Customer123!
  • Auto Confirm: ON

📚 GUÍAS DETALLADAS

Si necesitas más detalles:

  • scripts/README.md - Documentación completa de todos los scripts
  • docs/STEP_BY_STEP_VERIFICATION.md - Guía paso a paso detallada
  • docs/STEP_BY_STEP_AUTH_CONFIG.md - Guía de configuración de Auth
  • docs/QUICK_START_POST_MIGRATION.md - Guía rápida de referencia

CHECKLIST

Después de ejecutar todos los pasos:

  • Conexión verificada (o usando Dashboard)
  • Migraciones verificadas (8 tablas, 14 funciones, 17+ triggers)
  • Datos de prueba creados (3 locations, 6 resources, 8 staff, 6 services, 4 customers, 15 invitations, 5 bookings)
  • Usuarios de Auth creados (8 staff + 4 customers)
  • Credenciales de prueba guardadas

🎯 PRÓXIMOS PASOS

Probar el Login

  1. Ve a Supabase Dashboard: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/auth/users
  2. Verifica que los usuarios estén creados
  3. Intenta hacer login con una de las credenciales de prueba

Verificar Políticas RLS

En Supabase Dashboard, ejecuta esta consulta:

-- Verificar que Artist no puede ver email/phone de customers
SELECT
    c.first_name,
    c.email,  -- Debería ser NULL si eres Artist
    c.phone    -- Debería ser NULL si eres Artist
FROM customers c
LIMIT 1;

Continuar con el Desarrollo

Una vez que todo esté configurado:

  1. Implementar Tarea 1.3: Short ID & Invitaciones (backend)
  2. Implementar Tarea 1.4: CRM Base (endpoints CRUD)
  3. Iniciar desarrollo del frontend (The Boutique / The HQ)

💡 TIPS

Tip 1: Scripts vs Dashboard

  • Scripts son más rápidos pero requieren puerto 5432 abierto
  • Dashboard es más lento pero siempre funciona (si el puerto está bloqueado)

Tip 2: Guardar las Credenciales

Guarda estas credenciales en un lugar seguro:

Admin:

  • Email: admin@salonos.com
  • Password: Admin123!

Customer (Gold):

  • Email: sofia.ramirez@example.com
  • Password: Customer123!

Tip 3: Verificar Cada Paso

No continúes al siguiente paso hasta verificar que el anterior esté correcto.

Tip 4: Consultar los Logs

Si algo falla, consulta los logs en Supabase Dashboard.


🆘 AYUDA

Si encuentras problemas:

  1. Revisa los logs de Supabase Dashboard
  2. Ejecuta el script de verificación (npm run simple:verify)
  3. Consulta las guías detalladas en docs/
  4. Si el puerto está bloqueado, usa Supabase Dashboard

📞 CONTACTO

Para dudas sobre la implementación, consultar:

  • PRD.md: Reglas de negocio
  • TASKS.md: Plan de ejecución
  • AGENTS.md: Roles y responsabilidades
  • scripts/README.md: Documentación completa de scripts

🎉 ¡LISTO PARA COMENZAR!

Todo está preparado para que empieces el desarrollo de SalonOS.

¿Qué deseas hacer ahora?

  1. Ejecutar los scripts simples (si el puerto está abierto)
  2. Usar Supabase Dashboard (si el puerto está bloqueado)
  3. Comenzar el desarrollo del frontend (Next.js)
  4. Implementar las tareas de backend (Tarea 1.3 y 1.4)

¡El futuro es tuyo! 🚀