Llavia
Aplicación de gestión de alquileres por habitaciones, en producción. Cubre el ciclo completo: contrato, facturación, cobro e incidencias.
- Estado
- — en producción
- Stack
- — Next.js 15, PostgreSQL, Prisma, Auth.js, Tailwind
- Tamaño
- — 16 modelos de datos, unos 253 ficheros TypeScript
- Pruebas
- — Playwright, por módulo
Contexto
El alquiler por habitaciones multiplica la gestión administrativa: cada habitación tiene su propio contrato, calendario de cobro, fianza e inquilino. El volumen de trabajo no está en la firma del contrato, sino en el seguimiento mensual de cada una.
Funcionamiento
La aplicación expone dos portales sobre la misma base de datos. El propietario administra propiedades, habitaciones, inquilinos, contratos, facturas, pagos y gastos. El inquilino accede únicamente a su información: estado de cuenta, descarga de facturas y apertura de incidencias.
Procesos automatizados:
- Generación de contratos a partir de plantillas.docx, con los datos del inquilino incorporados, y firma en el navegador.
- Emisión de las facturas de cada periodo según las condiciones del contrato correspondiente.
- Revisión diaria de vencimientos y envío de recordatorios de pago por WhatsApp.
- Registro del justificante de pago aportado por el inquilino, asociado a su factura.
Decisiones técnicas
Control de acceso en el servidor. La separación de roles no se implementa en la interfaz, sino en el middleware y en cada server action, de modo que manipular un identificador en la URL no da acceso a datos ajenos. Las operaciones sensibles quedan registradas en una tabla de auditoría.
Tareas programadas como endpoints. Los procesos diarios son rutas /api/worker/* protegidas por un secreto e invocadas desde cron. De esta forma el código que se ejecuta de forma desatendida es el mismo que puede lanzarse manualmente para depurarlo.
Despliegue
En un VPS de administración propia. Los contenedores escuchan únicamente en la interfaz local y un nginx delante se encarga del TLS. La base de datos y los adjuntos se copian cada noche y se replican fuera del servidor, de modo que la copia no dependa del mismo disco que los datos.