Reemplazamos el mosaico por una sola plataforma de atención al cliente, entregada en tres meses con alcance fijo. La división es convencional y deliberada: un sitio público de marketing, un área de cliente sobre una API, y herramientas internas montadas sobre una herramienta de back-office extendida donde toca.
El sitio público es la superficie de marketing — renderizado en servidor para SEO, i18n donde el negocio realmente atiende en más de un idioma, sin JavaScript de cliente cuando una respuesta del servidor basta. Es la parte más barata de operar y la primera que ve el cliente, así que se lleva el presupuesto de pulido.
El área de cliente es donde sucede el trabajo. El cliente se registra, aterriza en un panel autenticado, completa un perfil, abre una solicitud de servicio, sube los documentos de soporte, ve cómo se actualiza la línea de estado y conversa con el equipo en un hilo atado a la solicitud. Se acaban los "¿recibiste mi correo?". El estado de cada solicitud es visible para el cliente que la abrió y para la persona del equipo asignada, en la misma forma y al mismo tiempo.
El panel interno es una herramienta de back-office extendida donde la extensión vale la pena — vistas de lista con los filtros que el equipo usa de verdad, acciones en línea para clasificar y asignar, hilos de comentarios en cada solicitud, trabajo programado asociado al registro del cliente, informes que el equipo saca sin pedírnoslos. No construimos una aplicación de "panel de operaciones" aparte. La herramienta de back-office, tratada como una superficie de producto real, cubrió el noventa por ciento de lo que el equipo necesitaba.
Debajo va una base de datos relacional con un esquema diseñado para las consultas que el negocio ejecuta de verdad — índices parciales sobre solicitudes abiertas, columnas semiestructuradas para los campos específicos por tipo de servicio, claves foráneas allí donde la relación es real. Una cola de trabajos en segundo plano se encarga de lo que no debe bloquear una petición: notificaciones por email y push para los cambios de estado, recordatorios de solicitudes sin respuesta, informes nocturnos y escaneo antivirus al subir documentos.
La autenticación es por sesión tanto para el equipo como para los clientes — sin tokens dando vueltas, sin proveedor SaaS de auth. El acceso por roles distingue los roles del equipo (admin, editor, lector) de los del cliente (titular, usuario delegado). Cada acción que cambia estado escribe una fila en el log de auditoría con usuario y solicitud, consultable desde el admin. La búsqueda corre sobre índices full-text de la base de datos a lo largo del historial del cliente, acotada por rol.
Un proveedor de pagos está integrado para los servicios de pago que lo requerían, detrás del mismo worker en segundo plano para que el manejo de webhooks no bloquee el hilo de la petición. La integración es lo bastante genérica como para que cambiar de proveedor más adelante sea un cambio contenido.