Lun–Vie 7:30–20:00 · Sáb 8:00–14:00
Para el equipo técnico y de producto

De WordPress a centromedico_cl, una sola fuente de verdad.

La página pública de INSI deja de ser un sitio web aparte y se convierte en una vista más del mismo sistema que ya usa el centro para operar. La landing, la agenda, los profesionales y la confirmación por email leen todos del mismo lugar.

Flujo de una reserva

De la vista al correo, sin copiar ni pegar.

Este es el camino completo cuando un paciente reserva su hora desde la página pública. Todo pasa por el mismo Next.js, el mismo Prisma, la misma base de datos.

👤
Paciente
Visita la landing pública
→
⚡
Next.js
RSC + Server Action
→
◆
Prisma
Typed query
→
⬢
PostgreSQL
cm_especialidad, cm_agenda, cm_paciente
📅
Reserva creada
cm_reserva_hora
→
→
📨
SMTP
Configurado en cm_configuracion_smtp
→
✓
Confirmación
Paciente recibe su hora
Antes y después

Lo que cambia el día del cutover.

El sitio de WordPress no desaparece de un día para otro, pero cada vez que se quiera editar una especialidad, ya no se hace en Elementor sino en el dashboard.

Hoy · WordPress + Elementor

Dos sistemas, datos duplicados

  • Especialidades hardcodeadas en cada página de Elementor.
  • Profesionales y agenda se mantienen por separado en el sistema interno.
  • "Reservar" redirige a un teléfono. Sin flujo digital.
  • 20+ CSS/JS, jQuery, emojis de WP, peso ~3 MB por página.
  • Parches de seguridad, plugins, actualizaciones constantes.
  • Accesibilidad no auditada, sin datos estructurados para SEO.
  • Si una especialidad cambia, hay que tocar 4 archivos de WP.

Después · Next.js + cm_*

Una app, una fuente de verdad

  • Especialidades viven en cm_especialidad. Una fila, una descripción.
  • Profesionales y disponibilidad se leen del mismo sistema que usa la agenda interna.
  • "Reservar" abre la toma de hora real, con confirmación por email.
  • SSR de Next.js, sin jQuery, peso objetivo < 200 KB por página.
  • Sin parches, sin plugins, sin superficie de ataque de WP.
  • WCAG 2.1 auditada, JSON-LD de tipo MedicalClinic y Physician.
  • Cambias una fila, se refleja en landing, agenda interna y email de confirmación.
Modelo de datos

Las tablas que ya existen y la única que falta.

Tres tablas dan vida a la página pública. La cuarta es nueva y se administra desde el dashboard para el bloque de preguntas frecuentes.

cm_especialidad
idvarchar
nombretext
slugvarchar
descripcion_cortatext
iconovarchar
ordenint
activobool
cm_profesional
idvarchar
nombretext
especialidad_idFK → cm_especialidad
foto_urltext (public/uploads/...)
agenda_proximacomputed via JOIN
activobool
cm_prestacion
idvarchar
especialidad_idFK → cm_especialidad
nombretext
descripciontext
precio_referencialint
duracion_minint
activobool
cm_faq_publicaNUEVA
iduuid
seccionvarchar
preguntatext
respuestatext
ordenint
activobool
updated_attimestamp
cm_configuracion_centro
nombretext
direcciontext
telefonovarchar
emailvarchar
logotext (public/uploads/...)
redes_socialesjsonb
horariojsonb
cm_reserva_hora
idbigserial
paciente_idFK → cm_paciente
profesional_idFK → cm_profesional
prestacion_idFK → cm_prestacion
fecha_horatimestamp
estadoenum
origen'landing' | 'dashboard'
Stack técnico

Lo que ya está en producción.

La landing se monta sobre la misma base que el dashboard. No hay stack nueva que mantener.

Runtime
Next.js 16
App Router, RSC, Server Actions, Turbopack
UI
base-ui + Tailwind
Componentes accesibles del design system del proyecto
ORM
Prisma
Schema tipado, migraciones, raw solo donde es necesario
DB
PostgreSQL
Mismo servidor del proyecto (192.168.1.114:5432)
Auth
NextAuth v4
Para el dashboard, no para la landing pública
Email
Outbox + worker
cm_email_outbox + scripts/email-worker.ts
Permisos
DB-driven
sec_groups_apps como única fuente de verdad
Imágenes
public/uploads/...
Archivos en disco, ruta string en BD
Impacto esperado

Lo que se gana al cambiar.

Estimaciones con la información actual del proyecto. A medir en producción tras el cutover.

~85%
Menos peso por página pública
vs WP + Elementor
1
Edición cuando cambia una especialidad
vs 4 lugares
0
Plugins de WordPress a mantener
WP / Elementor / Essential Addons
100%
Datos clínicos viajan con la reserva
vs "llámenos por teléfono"