PDF Vault

Aplicación de lectura — versiones, acceso y administración

PDF Vault es una aplicación para administrar un documento PDF con control de versiones: el equipo puede publicar una versión nueva y volver a una anterior. El cliente también quería que sus lectores pudieran entrar sin crear ni recordar una contraseña, así que basta con escribir el correo para acceder directamente al documento dentro de la aplicación. Los administradores gestionan usuarios, versiones y actividad desde un backoffice independiente. Son tres piezas —aplicación de usuario, backoffice y API compartida— sobre ASP.NET Core y PostgreSQL, con los frontends en Next.js. El proyecto se construyó con desarrollo dirigido por especificación.

Arquitectura

App de usuario Next.js Backoffice Next.js API ASP.NET Core cortes verticales por caso de uso registro, enlace mágico, PDF, métricas PostgreSQL EF Core Almacenamiento fuera del webroot Correo MailKit Monolito modular: la decisión de no partirlo quedó argumentada antes de empezar

La solución separa el portal de lectura y el backoffice en dos aplicaciones Next.js, conectadas a una API ASP.NET Core y PostgreSQL. El backend organiza sus funciones por caso de uso y mantiene separadas las sesiones de lectores y administradores; los archivos PDF quedan en almacenamiento privado detrás de una interfaz propia.

Versiones publicadas y reversión

Desde el backoffice, el administrador sube una nueva edición y elige si el cambio aumenta la versión mayor, menor o de parche. Cada archivo queda guardado como una versión independiente, con su fecha y autor; una nueva carga pasa a ser la vigente sin borrar las anteriores. Si hace falta, el administrador puede volver a cualquier versión disponible con una acción de rollback.

Acceso por correo, sin contraseña

El cliente quería que leer el documento no requiriera crear ni recordar una contraseña. El lector ingresa su correo y la aplicación inicia la sesión para abrir el PDF; no tiene que completar un formulario de contraseña ni esperar un enlace para acceder. La sesión distingue al usuario y protege las acciones que requieren autenticación.

Un lector PDF con anotaciones personales

El documento se abre dentro de la aplicación, con navegación por páginas y capítulos, búsqueda y controles de lectura. Cada lector puede guardar resaltados y comentarios vinculados al texto. Cuando cambia la versión del PDF, la aplicación intenta volver a ubicar las anotaciones en el nuevo documento usando el fragmento de texto guardado.

Entrega privada del documento

Petición del documento ¿Sesión válida? 401 Resuelve la clave opaca, nunca sale al cliente Lee del almacenamiento traversal rechazado Transmite el contenido Sin middleware de estáticos no hay ruta que sirva el archivo El nombre físico no deriva del original ni del número de versión

El PDF no tiene una URL pública ni se sirve como archivo estático. Los archivos viven fuera de las rutas públicas; al pedir el documento, la API valida la sesión y transmite el contenido desde el almacenamiento privado, sin exponer su clave al navegador. La actividad de acceso se registra cuando la transferencia se completa.

Usuarios y actividad en el backoffice

El panel administrativo mantiene las cuentas lectoras separadas de las cuentas de administración. La lista permite revisar correo, fecha de creación, estado de bloqueo, inicios de sesión y accesos al PDF; desde el detalle se puede consultar la actividad y bloquear o habilitar una cuenta. El dashboard resume usuarios, inicios de sesión y lecturas por día, semana y mes.