Zutoki — SaaS de gestión para clínicas

Qué es. Zutoki es un SaaS que desarrollé y mantengo para que una clínica gestione citas, pacientes y el día a día administrativo en un solo sitio. Encima van agentes de IA para chat y llamadas: el paciente reserva o consulta sin pasar por recepción.
Nació en Baskia Studio y está en zutoki.com.
El problema
Las clínicas combinan agenda, recordatorios, WhatsApp y un CRM a medias. El resultado son huecos, ausencias y trabajo repetido en recepción. Hacía falta un producto, no un chatbot suelto: autenticación, roles, eventos y un sitio donde vivir los datos.
Qué hace
- Agenda y ficha de paciente en un panel web.
- Recordatorios y tareas programadas (confirmación, aviso de cita, seguimiento).
- Chatbots y llamadas automatizadas conectados al mismo dominio de citas: no hay una agenda en el bot y otra en el back-office.
- Roles para clínica y, más adelante, para el paciente.
- Tests en Cypress: unitarios/de componente y E2E, cubriendo UI crítica y flujos de cita.
Arquitectura
Aplicación full stack en Next.js. El dominio (citas, pacientes, recordatorios) vive en casos de uso; la UI, la auth y las colas son adaptadores.
- BetterAuth para sesiones y acceso.
- Inngest para eventos: “cita creada” dispara recordatorio, no un
cronacoplado a la request HTTP. - PostgreSQL como fuente de verdad.
- S3 (DigitalOcean Spaces) para documentos e imágenes.
- Despliegue con Docker y Dockploy.
La decisión útil: separar el “quién entra” (auth) del “qué pasa después” (eventos). Así el agente de WhatsApp o la llamada pueden crear una cita sin duplicar lógica del panel.
Tests
Hay suite de Cypress en dos capas:
- Component tests — botones, calendario, formularios y estados de la UI, aislados.
- E2E — recorridos reales: login, crear/cancelar cita, recordatorios y el camino que también usa el agente.
No es un extra: si el bot y el panel comparten dominio, un E2E que solo pica el panel no basta. Los tests cubren el producto, no solo los componentes.
Stack
- App: Next.js, React, TypeScript
- Auth: BetterAuth
- Eventos: Inngest
- Datos: PostgreSQL
- Ficheros: DigitalOcean Spaces (S3)
- Infra: Docker, Dockploy
- Tests: Cypress (componentes y E2E)
Resultado
Una clínica puede operar agenda y administración en un producto propio, con IA encima del mismo modelo de datos y tests de componente y E2E en Cypress. El producto está entregado; el mantenimiento sigue.
Si te interesa el lado conversacional (flujos, calendario, n8n), está escrito con más detalle en Podología Sa Pobla. Por qué la agenda va por eventos y no por crons, en citas y eventos en Zutoki.