4.0 KiB
Guion de presentación — Frontend (doli-front)
Tiempo estimado de esta parte: ~15 min dentro de los 50 min totales del equipo.
1. Introducción al frontend (2 min)
- Qué es
doli-front: SPA que consume el BFF para mostrar y gestionar los datos de Dolibarr. - Decisión técnica: Vanilla JS sin frameworks → sin dependencias de React/Vue, control total del DOM.
- Herramienta de build: Vite 7 — HMR instantáneo en desarrollo, build optimizado con ES Modules.
2. Arquitectura interna (3 min)
Mostrar la estructura de carpetas en el IDE:
src/
├── main.js ← punto de entrada, monta layout
├── router.js ← escucha hash, carga la página correcta
├── pages/ ← cada página es una función que devuelve un HTMLElement
├── services/ ← apiClient.js centraliza el fetch + JWT
└── components/ ← sidebar, modales reutilizables
Puntos clave a explicar:
- El router es hash-based (
#/facturas,#/clientes…) → no necesita servidor con rutas configuradas. apiClient.js: adjunta el token JWT automáticamente en cada petición, redirige al login en 401.- Cada página encapsula su propio estado, listeners y cleanup (sin estado global compartido).
3. Demo en vivo — recorrido por las páginas (8 min)
Abrir la app en el navegador y mostrar:
Dashboard
- Gráficas de facturas con Chart.js.
- Métricas en tarjetas (total clientes, facturas pendientes…).
Facturas de proveedores ← parte más completa
- Listar facturas con búsqueda en tiempo real.
- Abrir detalle: ver líneas, importes, estado.
- Cambiar estado: Borrador → Validada → Pagada (botones contextuales).
- Añadir línea a una factura en borrador.
- Registrar un pago (seleccionar tipo, importe, fecha).
- Eliminar factura en borrador con confirmación.
Contactos
- Búsqueda en tiempo real sobre la tabla.
- Ver detalle / editar inline.
- Crear nuevo contacto con selector de empresa.
Configuración
- Toggle tema claro/oscuro (persiste en localStorage).
- Temporizador de expiración del JWT en tiempo real.
- Configurar URL de webhook (Teams/Slack).
- Registro de certificado VeriFactu: selector de archivo
.p12→ se convierte a base64 → se envía al BFF.
4. Decisiones técnicas destacables (2 min)
- Sin framework: cada página es una función
render*()→ fácil de leer, sin magia. - FileReader API: el certificado
.p12se lee en el navegador y se convierte a base64 antes de enviarlo, sin exponer rutas del servidor. - Asistente de voz: Whisper ejecutándose en local en el navegador con
@huggingface/transformers(sin APIs externas de voz). - Toast notifications: sistema propio ligero sin librerías externas.
- Cleanup de páginas: cada página registra un método
cleanup()que el router llama al navegar, evitando memory leaks de intervals/listeners.
Capturas recomendadas para incluir en slides
- Captura del dashboard con las gráficas.
- Captura del modal de detalle de factura de proveedor (con líneas y pagos).
- Captura de la sección VeriFactu en ajustes.
- Diagrama simple del flujo:
Página → apiClient → BFF.
Posibles preguntas del profesor
¿Por qué Vanilla JS y no React? → Para demostrar conocimiento de las APIs del navegador sin abstracciones. El proyecto es de tamaño manejable y no requería el overhead de un framework.
¿Cómo gestionas el estado? → Cada página tiene su propio estado local (variables en el closure). No hay estado global; el router destruye la página anterior antes de montar la nueva.
¿Cómo funciona el JWT?
→ El BFF devuelve un token al hacer login. El frontend lo guarda en localStorage y apiClient.js lo adjunta en el header Authorization: Bearer de cada petición.
¿Cómo se integra con VeriFactu?
→ La página de ajustes lee el .p12 como base64 con FileReader, lo envía al BFF, y el BFF lo reenvía al servicio Go que valida y almacena el certificado.