Auditoría técnica del proyecto MarkeUP

doc-auditoria-MarkeUp

Auditoria tecnica del estado actual del proyecto: dependencias, rendimiento, SEO, deuda tecnica y plan de mejoras.

Admin 15 de junio de 2026, 00:00 9 min de lectura

Orden de lectura recomendado: doc-readme → doc-guia → doc-arquitectura → doc-operacion → doc-auditoria

Auditoría: 2026-07-08 · Build: 192 páginas, 0 errores, 0 warnings · Dependencias: 21 producción, 4 desarrollo · Posts: 63 · Hermes skills: 5


ÁreaEstadoObservaciones
Build✅ Saludable192 páginas, 0 errores, 0 warnings
Dependencias✅ ActualizadasSin vulnerabilidades npm audit
Cobertura de tests⚠️ Baja6 tests solo en posts.ts
SEO✅ CompletoBreadcrumbList JSON-LD, OG tags, Twitter Cards, sitemap, RSS
Rendimiento✅ OptimizadoImágenes responsivas (srcset), preload LCP, font-display swap
Accesibilidad⚠️ MejorableSin tests de a11y automatizados
Documentación✅ Actualizada5 docs del sistema (Julio 2026) + Hermes integrado
Gestión IA✅ NuevoHermes Agent con 5 skills, 12 archivos de configuración
CI/CD✅ FuncionalGitHub Actions → Cloudflare Pages

ComponenteArchivosFunción
SOULSOUL.mdPersonalidad, protocolo LEER→ANALIZAR→PROPONER→CONFIRMAR→ESCRIBIR→LOGUEAR→INDEXAR
Memoryvault-index.md, conventions.md, backlog.mdÍndice de 63 slugs, ~150 tags, ~100 huérfanos, 22 ideas priorizadas
Rulesfrontmatter-spec.md, wikilinks-spec.md, style-guide.mdEspecificaciones formales de frontmatter, wikilinks y estilo
Skillscrear-post.md, ampliar-post.md, generar-wikilinks.md, auditar-vault.md, documentar.mdFlujos detallados para cada operación
Templatespost-template.mdPlantilla YAML con 21 variables

Capacidades: crear posts con frontmatter + wikilinks, ampliar notas, escanear/enriquecer wikilinks, auditar el vault (huérfanos, consistencia), verificar documentación.

  • Los 5 docs (doc-readme, doc-guia, doc-arquitectura, doc-operacion, doc-auditoria) reflejan el sistema Hermes
  • Conteos actualizados: 36→63 posts
  • Nuevo skill documentar.md para mantener los docs sincronizados

  1. Arquitectura limpia: Separación clara en capas (lib → pages → components → layout). Sin dependencias circulares.
  2. CSS modular: @layer para control de cascada, overrides DaisyUI fuera de layer, 0% CSS duplicado.
  3. SEO completo: BreadcrumbList (Schema.org), OG tags con dimensiones de imagen, Twitter Cards, preload de LCP, fetchpriority="high".
  4. Imágenes responsivas: Pipeline completo con Sharp: crop 1920×1080 + variantes 640w/1024w/1280w. <picture> + srcset + sizes + aspect-ratio en todos los componentes.
  5. Fuentes locales: Roboto Flex + Material Symbols cargadas sin CDN externo, font-display: swap.
  6. Build automatizado: npm run build = images + astro + pagefind en un solo comando.
  7. 192 páginas estáticas: Sin servidor, sin base de datos, hosting en CDN global.
  8. Búsqueda offline: Pagefind indexa 5933 palabras en 192 páginas sin servidor de búsqueda.
  9. Grafo interactivo: 3D (Three.js) y 2D (D3.js) para visualizar relaciones entre contenido.
  10. Scroll suave: Lenis 1.3 con soporte táctil y re-inicialización con View Transitions.
  11. Generación automática de posts: Script generar_articulo.py que, a partir de una URL, extrae contenido, detecta categoría, genera tags y produce un artículo Markdown completo vía Ollama (qwen2.5-coder:7b-64k) con frontmatter validado contra el schema Zod del blog.
  12. Detección inteligente de categorías: El script analiza el texto extraído contra un diccionario de palabras clave por categoría (Biodanza, Documentación, Tecnología, Opinión, Literatura) y asigna automáticamente la más relevante.
  13. Normalización de tags: Sistema de extracción de palabras frecuentes con filtrado de stopwords en español, normalización a formato palabra-compuesta y aseguramiento de cantidad mínima (3) y máxima (8) de etiquetas.

#ProblemaImpactoPrioridad
1Cobertura de tests baja (solo 6 tests en posts.ts)Alto — regresiones no detectadas en tags.ts, graph.ts, images.tsAlta
2Script sync-obsidian.js obsoleto en package.jsonBajo — script sync referencia archivo inexistenteBaja
3package.json name: multiblog-obsidian (no coincide con markeup/)Bajo — solo afecta a npm internalsBaja
4Sin E2E testsMedio — no hay tests de integración para páginas renderizadasMedia
5Sin tests de a11y automatizadosMedio — no hay axe-core ni pa11y en CIMedia
6Sin TypeScript en componentes AstroBajo — los .astro usan JSX sin type-checking estricto en propsBaja
7Posts de prueba (posiblemente existan archivos de test)Bajo — pueden aparecer en build si no están en draftBaja
8Lighthouse CI umbrales no verificados recientementeMedio — los umbrales en lighthouserc.json pueden no reflejar realidadMedia

PaqueteVersiónUsoEstado
astro^4.0.0Framework SSG✅ Activo
@astrojs/rss^4.0.0RSS feed✅ Activo
@astrojs/sitemap^3.0.0Sitemap XML✅ Activo
@astrojs/tailwind^5.0.0Integración Tailwind✅ Activo
@tailwindcss/typography^0.5.20Estilos .prose✅ Activo
daisyui^4.0.0Componentes UI + temas✅ Activo
3d-force-graph^1.80.0Grafo 3D✅ Activo
three^0.184.0Three.js (grafo 3D)✅ Activo
three-spritetext^1.10.0Texto en grafo 3D✅ Activo
pagefind^1.5.2Búsqueda full-text✅ Activo
@pagefind/default-ui^1.5.2UI de búsqueda✅ Activo
sharp^0.33.5Procesamiento imágenes✅ Activo
gray-matter^4.0.3Parse frontmatter✅ Activo
unist-util-visit^5.1.0AST traversal (wikilinks)✅ Activo
zod^4.4.3Validación schema✅ Activo
lenis^1.3.23Smooth scroll✅ Activo
rehype-slug^6.0.0IDs en headings✅ Activo
rehype-autolink-headings^7.1.0Anchor links✅ Activo
gsap^3.15.0Animaciones (¿en uso?)⚠️ Verificar
@fontsource/*^5.2.8Fuentes (cargamos locales)⚠️ Posiblemente redundante

PaqueteVersiónUsoEstado
typescript^5.0.0Type checking✅ Activo
vitest^4.1.8Test runner✅ Activo
@vitest/ui^4.1.8UI de tests✅ Activo
@types/node^20.0.0Tipos Node.js✅ Activo

  • gsap — Verificar si realmente se usa en el código actual. Si no, eliminar.
  • @fontsource/roboto-flex — Las fuentes se cargan localmente desde public/fonts/. Este paquete puede ser redundante.

Estas dependencias son independientes del ecosistema npm y no afectan al build de Astro. Se gestionan con uv pip install y no aparecen en package.json.

PaqueteVersiónUsoEstado
python3.xRuntime del script✅ Requerido
requestsrecienteDescarga HTTP + API Ollama✅ Activo
trafilaturarecienteExtracción de texto principal (primario)✅ Activo
beautifulsoup4recienteParseo HTML (fallback)✅ Activo
ollamalatestServidor LLM local✅ Requerido
qwen2.5-coder:7b-64klatestModelo de generación de artículos✅ Requerido

OptimizaciónImplementaciónImpacto
Imágenes responsivas<picture> + srcset 640w/1024w/1280w/1920w + sizesLCP ↓
Preload LCP<link rel="preload"> + fetchpriority="high" en heroLCP ↓↓
Font display swapfont-display: swap en Roboto Flex + Material SymbolsFCP ↓
Aspect ratiostyle="aspect-ratio: 16/9" en todas las imágenesCLS ↓
Lazy loadingloading="lazy" en PostCard + decoding="async"LCP ↑
CSS modular@layer para especificidad controladaFCP ↓
Chunk splittingchunkSizeWarningLimit: 1000kB, carga asíncrona Three.jsFCP ↓
View TransitionsFade 1000msUX ↑

OptimizaciónPrioridadEsfuerzo
Lighthouse CI en pre-commit hookMediaBajo
Eliminar CSS no utilizado (PurgeCSS)BajaMedio
Service Worker para offlineBajaAlto

AspectoEstado
npm audit0 vulnerabilidades conocidas
Secretos en códigoNo detectados
.gitignoreSyncthing, Obsidian, logs, .env ignorados
HTTPSCloudflare Pages fuerza HTTPS
Headers de seguridadNo configurados (CSP, HSTS) — delegado a Cloudflare
Admin panelProtegido con JWT (login.astro)

  • Documentación actualizada a Julio 2026
  • Imágenes responsivas implementadas
  • OG tags completos + BreadcrumbList
  • Preload LCP + fetchpriority=“high”

  • Añadir tests para tags.ts y graph.ts
  • Verificar y eliminar dependencias no usadas (gsap, @fontsource)
  • Eliminar script sync-obsidian.js y su referencia en package.json
  • Renombrar package.json name a markeup
  • Implementar axe-core en CI para tests de a11y

  • Añadir tests E2E con Playwright
  • Implementar Service Worker para soporte offline parcial
  • Configurar headers de seguridad (CSP, HSTS) en Cloudflare
  • Automatizar Lighthouse CI como pre-commit hook

FechaCambio
2026-07-08🆕 Hermes Agent: sistema de gestión IA con 5 skills, 12 archivos. Documentación actualizada (63 posts). Skill documentar.md
2026-07-03Imágenes responsivas (srcset), preload LCP, font-display swap, OG tags completos, BreadcrumbList JSON-LD
2026-06-29Scripts deploy.sh y commit-local.sh, desactivación watchexec, compresión audio
2026-06-15Glassmorphism unificado, documentación reestructurada
2026-02-07CSS modular, warnings de build resueltos, 191→192 páginas

DocumentoContenido
doc-readmeVisión general y stack
doc-guiaInstalación y configuración
doc-arquitecturaArquitectura y componentes
doc-operacionComandos y troubleshooting

Auditoría generada: 2026-07-09 20:33 Posts: 65 | Build: 347 páginas (98M) Dependencias: 23 producción, 4 desarrollo Scripts npm: 23 | Imágenes: 57 WebP | Audios: 6 Ollama: 🟢 ONLINE (6 modelos) Último commit: 300f118 📝 Nuevo post: musica-esferas (3 hours ago)