CV Builder - Generador de Currículums
Aplicación web para crear CVs con edición en tiempo real, múltiples plantillas y exportación a PDF
Overview
Desarrollo de una aplicación web interactiva que permite construir currículums de forma estructurada con preview en tiempo real y sistema de templates desacoplado.
Problem
Crear CVs personalizados suele ser un proceso manual y poco flexible. Las herramientas existentes limitan la personalización o no ofrecen una vista previa fiel al resultado final.
Constraints
- Implementación completa en un plazo de 2 semanas
- Mantener una arquitectura escalable desde el inicio
- Exportación a PDF fiel al diseño visual (formato A4)
- Sin backend, utilizando persistencia local
Approach
Se diseñó una arquitectura basada en un store central (Pinia) como única fuente de verdad, separando completamente editor, preview y templates. Se implementó un sistema de templates dinámico mediante un registry y un resolver para permitir escalabilidad.
Key Decisions
Uso de un store centralizado (Pinia) como Single Source of Truth
Permite sincronización en tiempo real entre editor y preview sin acoplamiento directo entre componentes.
- Estado local por componente
- Vuex
Sistema de templates desacoplado mediante registry
Facilita la extensibilidad y permite agregar nuevos diseños sin modificar la lógica central.
- Templates hardcodeados
- Condicionales en el renderizado
Exportación a PDF usando html2canvas + jsPDF
Permite capturar el diseño visual real del preview y mantener fidelidad en la exportación.
- Generación de PDF desde HTML server-side
- Librerías de generación de documentos
Tech Stack
- Vue 3 (Composition API)
- TypeScript
- Pinia
- Tailwind CSS
- html2canvas
- jsPDF
- Vite
Result & Impact
- 2 semanas (end-to-end)Tiempo de desarrollo
- 3 (Default, Minimal, Modern)Templates implementados
- Actualización en tiempo real sin recargaRenderización
Se logró una base sólida y escalable que permite extender funcionalidades como nuevos templates, exportación avanzada y futura integración con backend o IA.
Learnings
- La separación estricta entre estado, UI y templates simplifica la escalabilidad
- Un sistema de templates desacoplado permite iterar rápidamente en diseño
- La exportación a PDF desde el frontend requiere ajustes finos para mantener fidelidad visual
Recursos del Proyecto
- Demo web: Visitar Aplicación
Technical Deep Dive
La arquitectura se centró en un flujo unidireccional:
Editor → Store (Pinia) → Preview → Template
El uso de un registry de templates junto a un resolver dinámico permitió desacoplar completamente la lógica de presentación, facilitando la incorporación de nuevos diseños sin afectar el resto del sistema.
Además, se priorizó que todos los componentes fueran presentacionales, delegando la lógica al store, lo que simplifica el mantenimiento y futuras extensiones.