Plataforma de reservas y gestión de negocios
TurnoGo es un SaaS listo para producción que permite a negocios de servicios gestionar turnos, clientes, personal e ingresos. Este caso de estudio recorre la arquitectura, el modelo de datos, la autenticación, el despliegue y los desafíos técnicos que resolví.
El sistema separa claramente frontend, API y persistencia. React consume una API REST tipada servida por FastAPI, que se comunica con PostgreSQL para datos relacionales y con Supabase Storage para activos del negocio. Cada capa es stateless y escalable horizontalmente sobre Docker.
Esquema PostgreSQL modelado alrededor del dominio — negocios, personal, servicios, turnos, clientes y bloques horarios. Pensado para multi-tenant con integridad referencial estricta.
La autenticación usa JWT con rotación de refresh tokens. Las contraseñas se hashean con un algoritmo moderno y cada endpoint protegido valida rol y scope antes de tocar la base de datos.
API y frontend se empaquetan con Docker y se despliegan en Render. La configuración se inyecta en runtime, las imágenes son reproducibles y los rollouts son sin downtime. El storage vive en Supabase.
Endpoints REST orientados a recursos, con versionado claro, respuestas de error consistentes y documentación OpenAPI generada automáticamente por FastAPI. Paginación, filtros y validación se manejan con Pydantic.
Resuelto con validación en servidor más un exclusion constraint en la base, para que dos turnos superpuestos sean físicamente imposibles.
Los refresh tokens son de un solo uso y rotan en cada llamada, con revocación al logout para reducir el impacto de robo de tokens.
Cada consulta se filtra por business_id en un middleware compartido, evitando fugas de datos entre cuentas.