Tareas y trabajos de web2
Un CV en línea moderno y responsivo construido con un empaquetador personalizado y servidor Express integrado.
- Empaquetador personalizado con soporte para HTML, CSS/SCSS, JavaScript/TypeScript
- Carga dinámica de datos desde JSON
- Formulario de contacto funcional con validación
- Envío de emails automático con confirmación
- Diseño responsivo y moderno
- Modo desarrollo con recarga automática
- Optimización automática para producción
- Validación robusta de formularios
- Seguridad integrada con helmet y rate limiting
cv-online-jorge/
├── src/ # Código fuente
│ ├── index.html # Plantilla HTML principal
│ ├── styles.scss # Estilos SCSS
│ └── script.ts # JavaScript/TypeScript principal
├── data/ # Datos del CV
│ └── cv-data.json # Información personal, experiencia, etc.
├── assets/ # Recursos estáticos
│ └── images/ # Imágenes (perfil, etc.)
├── bundler/ # Empaquetador personalizado
│ └── bundler.js # Script de construcción
├── server/ # Servidor Express
│ └── server.js # API y servidor web
├── dist/ # Archivos construidos (generado)
├── package.json # Dependencias y scripts
└── README.md # Documentación
- Clonar el repositorio:
git clone https://github.com/jurdi5/cv-online-jorge
cd cv-online-jorge- Instalar dependencias:
npm install- Configurar variables de entorno (opcional para emails):
# Crear archivo .env
EMAIL_USER=tu-email@gmail.com
EMAIL_PASS=tu-contraseña-de-aplicaciónPara que el formulario de contacto funcione correctamente:
- Gmail: Habilita la autenticación de 2 factores y genera una contraseña de aplicación
- Otros proveedores: Ajusta la configuración en
data/cv-data.json
{
"contact": {
"emailRecipient": "jorge.urdialeseduardo@gmail.com",
"emailService": {
"host": "smtp.gmail.com",
"port": 587,
"secure": false
}
}
}# Construir y observar cambios
npm run dev
# Solo construir
npm run build
# Limpiar directorio dist
npm run clean# Construir para producción
npm run build
# Iniciar servidor
npm startEl servidor estará disponible en http://localhost:3000
Edita el archivo data/cv-data.json para actualizar:
- Información personal
- Educación
- Experiencia laboral
- Proyectos
- Habilidades técnicas
- Información de contacto
Modifica src/styles.scss para cambiar:
- Colores y temas
- Tipografías
- Layouts y espaciado
- Animaciones
Edita src/script.ts para:
- Nuevas interacciones
- Validaciones personalizadas
- Integraciones con APIs
- Animaciones avanzadas
- Compilación SCSS → CSS optimizado
- Compilación TypeScript → JavaScript ES2017
- Minificación automática en producción
- Source maps en desarrollo
- Copia de assets y datos
- Modo watch para desarrollo
# Desarrollo con watch mode
node bundler/bundler.js --dev
# Producción
node bundler/bundler.jsVerificar estado del servidor
{
"status": "ok",
"timestamp": "2025-01-20T10:30:00.000Z",
"version": "1.0.0"
}Obtener datos del CV
{
"personalInfo": { ... },
"education": [ ... ],
"experience": [ ... ],
"projects": [ ... ],
"skills": { ... }
}Enviar formulario de contacto
{
"name": "Juan Pérez",
"email": "juan@example.com",
"subject": "Consulta laboral",
"message": "Hola, me interesa contactarte..."
}- Helmet.js para headers de seguridad
- Rate limiting para prevenir spam
- CORS configurado apropiadamente
- Validación robusta de datos
- CSP (Content Security Policy)
- Mobile-first approach
- Breakpoints optimizados
- Touch-friendly interactions
- Optimizado para todos los dispositivos
- CSS minificado en producción
- JavaScript optimizado
- Imágenes optimizadas
- Lazy loading para contenido
- Caching estratégico
npm run build
cd dist
python -m http.server 8000npm start
curl http://localhost:3000/api/healthError de compilación TypeScript:
npm install -g typescriptError de email:
- Verifica las variables de entorno
- Confirma la configuración SMTP
- Revisa los logs del servidor
Assets no se cargan:
- Verifica la estructura de directorios
- Ejecuta
npm run clean && npm run build
Estilos no se aplican:
- Confirma que los archivos SCSS se compilen
- Revisa la consola del navegador
{
"build": "node bundler/bundler.js",
"dev": "node bundler/bundler.js --dev",
"start": "node server/server.js",
"clean": "rimraf dist"
}