# Product Requirements Document (PRD) – Plataforma Gloria **Versión:** 2.0 **Fecha:** 29 de Enero, 2026 **Stack:** Next.js 14, Prisma, SQLite, Redis, Evolution API --- ## 1. Visión del Producto Transformar la presencia digital de Gloria Wells en una herramienta operativa que centralice la atención, gestione crisis y automatice el agendamiento, manteniendo una estética de alta gama, calidez y profesionalismo. --- ## 2. Mapa del Sitio (Basado en Mockup) ### 2.1 Landing Page (Home) #### Header * Logo: GW * Menú: Inicio, Sobre mí, Servicios, Testimonios, Contacto * CTA: **Agendar Ahora** #### Hero Section * Imagen: Fotografía profesional de Gloria * Titular: **Sanación Integral** * Subtitular: Enfoque terapéutico * Botón principal: **Agenda tu Cita** (Inicia flujo) #### Sección Biográfica * Video: Introducción * Texto: Conoce a Gloria #### Servicios (Grid 3) * Terapia Individual * Terapia de Pareja * Talleres / Grupos #### Testimonios * Carrusel con citas, nombres y avatares #### Contacto * Nombre, Email, Mensaje #### Footer * Redes sociales * Privacidad * Copyright --- ## 3. Requisitos Funcionales ### 3.1 Flujo de Agendamiento #### Paso 1: Identificación * Ingreso de WhatsApp * Búsqueda en SQLite * Cliente existente: mensaje personalizado + botones * Nuevo cliente: registro (Nombre, Edad, Motivo) #### Paso 2: Filtro de Crisis * Pregunta: ¿Es una urgencia? * Si: protocolo de crisis * No: calendario #### Paso 3: Disponibilidad * Integración Google Calendar * Caché Redis #### Paso 4: Pago * Carga de comprobante --- ### 3.2 Dashboard de Administración #### Rol: Asistente * Agenda general * Validación de pagos * Lista de pacientes * Sin acceso a notas clínicas #### Rol: Terapeuta (Gloria) * Expediente completo * Notas clínicas enriquecidas * Módulo de voz * Envío vía WhatsApp * Auto-eliminación (7 días) --- ## 4. Requisitos de Datos (Prisma) ```prisma model Patient { phone String @id name String birthdate DateTime status String createdAt DateTime @default(now()) } model Appointment { id Int @id @default(autoincrement()) date DateTime status String isCrisis Boolean paymentProofUrl String? } model ClinicalNote { id Int @id @default(autoincrement()) patientId String content String createdAt DateTime @default(now()) } model VoiceNote { id Int @id @default(autoincrement()) filename String duration Int sentAt DateTime expiresAt DateTime } ``` --- ## 5. Requisitos No Funcionales ### Hosting * VPS Hostinger * Docker Compose ### Optimización * Redis (sesiones y caché) ### Privacidad * Cookies banner * Aceptación T&C * Página estática ### Manejo de Archivos * Comprobantes: volumen local * Audios: temporales --- ## 6. Casos Borde * Citas para terceros * Cancelaciones tardías * Zonas horarias