FRONT-END
Nuxt@4
TailwindCSS@4
Typescript
Cada medianoche, la base de datos SQLite de mi portfolio se actualiza automáticamente mediante un servicio Docker dedicado en mi VPS.
Este servicio ejecuta un cron en Node.js que compone y actualiza datos desde múltiples fuentes, incluyendo APIs de Vimeo, GitHub, GitLab, scraping con Puppeteer y fuentes estáticas alojadas en https://storage.rottigni.tech/.
Las actualizaciones se aplican a la base de datos SQLite usando@prisma/clienty se reflejan tanto en el sistema de archivos del VPS como en el contenedor de Nuxt3, que se mantienen sincronizados mediante volúmenes Docker.
El contenedor de seeding genera logs durante el proceso, incluyendo logs.log, errors.log y debug.log, que se envían a mi almacenamiento privado en https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/logs/en cada ejecución.
El contenedor también crea una copia de seguridad de la base de datos SQLite3 antes de cada operación de seeding, almacenada en https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/backup/,, para garantizar la seguridad de los datos.
Una característica destacada del seeder es su capacidad de usar mi almacenamiento privado como proveedor de datos en caché.
Cuando solicita datos a un proveedor original, sube un nuevo archivo JSON de respuesta a mi almacenamiento, cuyo nombre contiene el timestamp UTC de la petición
(https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/history/)Cuando el caché está activado, el seeder lee el último archivo del almacenamiento en lugar de consultar el proveedor original.
Todo esto está orquestado mediante un archivo seed.config.ts ubicado en la raíz del directorio de seeding.
Este archivo define qué entidades y relaciones deben ser sembradas, qué debe almacenarse en caché y las rutas donde deben subirse los datos.
En general, este sistema permite actualizar automáticamente la base de datos SQLite de mi portfolio, garantizando la seguridad de los datos y reduciendo las llamadas a proveedores externos mediante el uso de caché.