Los bloques de codigo dentro de un .md visto en Documentos ahora tienen colores de token
(highlight.js + marked-highlight), con el tema "Visual Studio" claro/oscuro para que se vea
parecido a VSCode y se adapte solo al tema de la app. Se usa highlight.js/lib/core y solo se
registran los lenguajes esperados en este proyecto (js/ts, bash, json, python, sql, yaml,
html/xml, css, ini, dockerfile, markdown) para no inflar el bundle con el paquete completo.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Agrega un boton "Ver" en Documentos (adjuntos de proyectos/actividades) para archivos de
texto plano y Markdown: se leen via blob (mismo mecanismo ya usado para descargar, que ya
maneja el Bearer token) y se muestran en un popup -- el .md se renderiza con formato (marked)
y se sanitiza con DOMPurify antes de insertarse en el DOM, para no abrir una via de XSS con
HTML/JS embebido en un documento subido por otro usuario.
De paso corrige que subir un .md fallaba con "tipo de archivo no permitido": el navegador no
manda un mimetype confiable para esa extension (varia segun SO), asi que ahora se normaliza
por extension en el fileFilter de multer en vez de depender solo del mimetype del navegador.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Amplia el selector de icono de una credencial con ~70 logos reales de marcas conocidas
(Google, GitHub, Cloudflare, cPanel, MikroTik, WordPress, etc.), empaquetados localmente
desde el paquete simple-icons (dominio publico) y tree-shakeados por Vite. Se mantiene el
criterio de privacidad ya establecido: ninguna consulta externa de favicon por entrada.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
vite-plugin-pwa genera manifest.webmanifest + service worker en el build. Iconos nuevos
generados a partir del logo actual (192, 512, maskable para Android). El service worker
precachea solo assets estaticos (JS/CSS/iconos) -- /api nunca se cachea, siempre va a la red, asi
los datos no quedan desactualizados. Se actualiza solo (autoUpdate) sin pedirle nada al usuario.
Probado: build genera sw.js/manifest correctamente, el service worker registra y activa en un
browser real, y la app (login, listado de proyectos, llamadas a /api) sigue funcionando igual
que antes -- sin regresiones.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- seed-db.js: los datos de ejemplo (departamentos TI/Finanzas/RRHH/Comercial +
usuario admin con clave=usuario) solo se cargan si NODE_ENV != production.
En produccion el seed solo carga catalogos (roles, prioridades, estados,
tipos de proyecto) — la organizacion real la crea el admin desde la UI.
- Nuevo backend/src/scripts/create-admin.js: crea el usuario Administrador
inicial de produccion con una clave fuerte generada al azar (nunca
clave=usuario, esa convencion es solo para dev).
- frontend: agrega "serve" como dependencia de produccion (arquetipo B: el
frontend corre como proceso separado sirviendo el build con
`serve -s dist`).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>