Cada decisión técnica se ancla en un hecho. Un servicio público vive durante años, los requisitos de la ciudadanía solo crecen con el tiempo, y el siguiente equipo en leer el código puede no ser el nuestro. Elegimos el stack pensando en ese segundo momento, cuando el contrato termina y otra persona se sienta a abrir el proyecto.
La parte que ve la ciudadanía y la consola del operador viven dentro de un mismo proyecto Next.js. El servicio se indexa en buscadores, abre rápido al primer clic, y quien gestiona los contenidos trabaja desde el mismo sitio en el que se revisan los expedientes. Un solo repositorio, un solo despliegue, y la separación entre "la página que ve la ciudadanía" y "el sistema que procesa la solicitud" deja de costar coordinación entre departamentos.
Los datos del ciudadano quedan aislados a nivel de base de datos, y no solo dentro del código de la aplicación. Es el punto en el que se juega cada inspección de un servicio público, porque la pregunta es siempre la misma: cómo se garantiza de verdad la separación entre departamentos, entes o grupos sensibles. Con un Postgres gestionado y una regla que filtra el acceso fila por fila, la respuesta cabe en una pantalla de código, y queda directamente en la documentación técnica que acompaña al servicio. La misma base de datos gestiona cuentas, archivos adjuntos, y actualizaciones en tiempo real, alojada en región UE por contrato.
La autenticación pone Cl@ve, certificado digital, el nodo eIDAS, y los esquemas autonómicos en una sola capa de sesión. Quien entra se encuentra el mismo flujo independientemente del proveedor que elija. El registro de acciones guarda qué proveedor se usó en cada evento, y cuando la auditoría de accesibilidad pregunta cómo llega al formulario una persona que usa lector de pantalla, la respuesta es el mismo flujo que para el resto, sin atajos escritos solo para quien ve.
Los documentos que necesitan firma electrónica cualificada pasan por un proveedor compatible con eIDAS. El PDF firmado queda junto al expediente, con los plazos de conservación que marca la normativa del servicio. El recibo que recibe el ciudadano nace de la misma plantilla que usa el operador interno, y por eso las dos versiones no se separan con el tiempo.
La infraestructura no se dispara en coste cuando el tráfico crece. La protección frente al abuso de uso pasa por una caché distribuida gestionada, ubicada geográficamente cerca de quien envía solicitudes, sin tener que levantar un servidor dedicado. Los archivos adjuntos quedan en un object storage en región UE, sin las sorpresas de coste que la línea "transferencia de datos saliente" lleva en otros proveedores. Todo el código se verifica en tiempo de compilación con TypeScript, un beneficio poco lucido pero decisivo: cuando termina el contrato y otro equipo abre el proyecto, los fallos salen antes del lanzamiento, y la persona que entra se orienta sin visita guiada.