Turnos que no se pisan
Cada tratamiento tiene su propia duración en minutos; al agendar, la app avisa si se superpone con otro turno antes de confirmarlo.
Caso de estudio · Full-stack
Turnero online, panel de gestión y caja para un consultorio de estética real en San Nicolás. Lo diseñé, desarrollé y sigo manteniendo en producción de punta a punta: base de datos, seguridad, frontend y despliegue.
El turnero público: la clienta elige uno o varios servicios —se suman costo y duración— y un horario donde entra la sesión completa, sin que la web vea nunca datos de otras pacientes.
Ana, la dueña del consultorio, coordinaba los turnos a mano y necesitaba algo más: un lugar único donde cargar pacientes, tratamientos y productos clasificados por zona corporal o facial, una caja real con ingresos y egresos, y que las clientas pudieran pedir turno solas sin la ida y vuelta de siempre por WhatsApp — pero sin exponer la agenda completa del consultorio en una web pública.
Full-stack, solo: diseño del esquema de base de datos y de las políticas de seguridad en Supabase, la portada pública y el turnero, el panel de gestión completo (pacientes, turnos, tratamientos, productos, caja y solicitudes), el recorte automático de fotos y el flujo de confirmación de turnos por WhatsApp. Sigue en desarrollo activo.
Supabase como backend completo otra vez, pero acá el frontend es React en vez de HTML plano: son seis pantallas (portada, turnero, tratamientos, productos, panel y confirmación) que comparten estado y se actualizan en tiempo real entre sí. La web pública nunca consulta datos de pacientes directamente: solo llama funciones puntuales que devuelven qué horarios están ocupados.
git push a main despliega todo automáticamente.Problemas que resolví
Cada tratamiento tiene su propia duración en minutos; al agendar, la app avisa si se superpone con otro turno antes de confirmarlo.
La clienta puede elegir más de un servicio en el mismo pedido: se suman el costo y la duración, y se busca un horario donde entre la sesión completa.
El pedido queda retenido 12 horas y llega por WhatsApp con un enlace propio. Al abrirlo con la sesión del consultorio iniciada, se confirma o se rechaza, y recién ahí se le avisa a la clienta.
Al subir una foto de "Quién soy" o de un tratamiento, se recorta sola a formato vertical 4:5 (800×1000) y se guarda en Supabase Storage, sin pasar por ningún editor externo.
Cada tratamiento y producto se clasifica como corporal o facial; sin clasificar, directamente no aparece en la web pública.
Ingresos por sesión más movimientos manuales de ingresos y egresos, con balance diario, semanal y mensual, editable desde el panel.
El panel: sin ningún enlace desde la web pública, se entra escribiendo la dirección y con usuario y contraseña. Row Level Security bloquea cualquier consulta sin esa sesión.
main¿Te sirve algo así?
Si tu negocio necesita turnos online, un catálogo propio o una caja real, te cuento cómo lo encararía.
Contame tu proyecto