TurnoYa
SaaS de reservas de turnos · multi-rubro
TurnoYa es un SaaS de reservas de turnos para profesionales y comercios (barberías, peluquerías, estética, salud), genérico para cualquier rubro basado en turnos. Tiene dos lados: un marketplace público donde los clientes buscan un negocio y reservan sin necesidad de registrarse, y un panel privado donde el dueño administra su negocio, servicios, horarios y turnos.
- EstadoEn desarrollo — deploy próximamente.
- BackendNestJS, TypeScript, Prisma 6, PostgreSQL (Neon), JWT (Passport), bcrypt, class-validator, Swagger, Jest.
- FrontendReact 19, Vite, TypeScript, PrimeReact, React Router, Axios, Context API.
- CódigoGitHub — monorepo API + Web
- Marketplace público: los clientes buscan negocios por nombre o dirección y reservan sin login.
- Reserva pública multi-paso (negocio → servicio → día → horario disponible).
- Panel del dueño con login: gestión de negocio, servicios, editor de horarios semanales (multi-rango) y turnos.
- Turno walk-in: el dueño agenda un cliente presencial, con contacto opcional.
- Modo claro/oscuro persistente que respeta la preferencia del sistema.
Features
Decisiones técnicas
- Anti-doble-reserva en 2 capas: chequeo de disponibilidad a nivel app + índice único parcial en PostgreSQL. Si dos personas reservan el mismo turno a la vez, la base rechaza el segundo INSERT y la API responde 409.
- Multi-tenant por propiedad: cada dueño opera únicamente sobre su negocio; la autorización se resuelve desde el token JWT, nunca desde el body.
- Motor de disponibilidad como función pura, testeada con Jest: genera los slots del día excluyendo los turnos ocupados.
- Modelado de dominio cuidado: plata en centavos enteros, horarios en minutos desde medianoche y timezone del negocio (Argentina).
- NestJS
- React 19
- TypeScript
- Prisma
- PostgreSQL
- JWT
- PrimeReact
- Vite
- Jest