Launcher

Type to filter results. Use arrow keys to navigate, Enter to select.

Preferencias

You've reached the end of the results

Contexto

Gestclinic es un producto SaaS full-stack orientado exclusivamente a clínicas dentales. El objetivo es centralizar la operativa diaria de una consulta: pacientes, citas, gabinete, historia clínica odontológica, odontograma, consentimientos, facturación, inventario e informes.

El sistema se divide en tres piezas: aplicación clínica interna en Angular, web pública/comercial en Next.js y backend NestJS con API REST para la lógica de negocio, seguridad, persistencia y automatizaciones.

Qué resuelve

  • Gestión de pacientes y búsqueda operativa.
  • Calendario semanal y gestión de citas.
  • Historia clínica dental con evolución, anamnesis y odontograma.
  • Consentimientos, plantillas y documentos firmados.
  • Personal clínico, usuarios internos y control por roles.
  • Facturación, inventario, informes y configuración de clínica.
  • Modo plataforma para provisionar clínicas desde un rol SUPER_ADMIN.

Trabajo técnico

  • Aplicación clínica con Angular 21, standalone components, SSR y PWA.
  • Web pública con Next.js 16, React 19 y Nx.
  • Separación clara entre app operativa, web comercial y librería compartida.
  • Autenticación con sesión, guards, interceptor, refresh token y control de roles.
  • Integración con API REST externa para módulos clínicos y administrativos.

Backend y arquitectura

El backend vive en un repositorio separado (gestclinic-back) y expone la API bajo /api/v1. Está construido con NestJS 11, Prisma y PostgreSQL.

  • API REST modular con controladores finos y lógica en servicios.
  • Persistencia con Prisma, migraciones SQL y modelo de datos versionado.
  • Autenticación con JWT, Passport y refresh token en cookie httpOnly.
  • Guards globales para autenticación y roles (JwtAuthGuard y RolesGuard).
  • Multi-tenancy por clínica combinando clinicId, contexto por petición y RLS en PostgreSQL.
  • AsyncLocalStorage para transportar userId, role y clinicId durante cada request.
  • Swagger disponible en desarrollo para documentar y probar la API.
  • Docker multi-stage y docker-compose para Postgres local.

Módulos de negocio

La API da soporte a los módulos principales de una clínica dental:

  • Auth: login, registro, refresh, perfil, cambio y reset de contraseña.
  • Clinics: configuración de clínica y provisionado de tenants.
  • Patients: pacientes con búsqueda y paginación.
  • Appointments: citas, calendario, conflictos, emails y recordatorios.
  • Medical records: historia clínica dental, odontograma y adjuntos clínicos.
  • Consents: plantillas, documentos firmados, PDF y envío por email.
  • Billing: facturas y resumen económico.
  • Inventory: stock, categorías y resumen inventariable.
  • Reports: KPIs, comparativas y exportación PDF.
  • Users y Staff: cuentas internas, roles y personal clínico.

Seguridad y automatizaciones

Además de la separación por tenant, el backend incorpora varias capas transversales:

  • helmet, CORS restringido y ValidationPipe con whitelist.
  • PrismaExceptionFilter para normalizar errores de base de datos.
  • ThrottlerGuard con límite de peticiones por minuto.
  • Correos transaccionales con Resend.
  • Webhooks de Resend para tracking de entrega.
  • Jobs programados con @nestjs/schedule para recordatorios de citas 24h antes.
  • Plantillas de email para confirmaciones, reprogramaciones, cancelaciones, consentimientos y recuperación de contraseña.

Aprendizaje

Un software clínico no puede ser genérico: el dominio dental marca el lenguaje, las prioridades y los flujos. En este caso, la parte más importante no es solo crear pantallas, sino sostener una arquitectura multi-clínica segura, mantenible y preparada para automatizar procesos reales de una consulta.

Compartir proyecto

Si este caso te resulta útil, puedes compartirlo con tu red.