Skip to content

Commit 9bc031b

Browse files
committed
refine loading snippets consistency
1 parent a3cb477 commit 9bc031b

21 files changed

Lines changed: 485 additions & 58 deletions

IMPROVEMENT-PLAN.md

Lines changed: 387 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,387 @@
1+
# WebPerf Snippets — Plan de Mejoras Consolidado
2+
3+
> Fusión de análisis realizados el 2026-03-30 por Claude, Codex y Gemini CLI.
4+
> Los ítems marcados con ★ son consenso entre al menos dos de los tres análisis.
5+
6+
---
7+
8+
## Resumen ejecutivo
9+
10+
El proyecto tiene una base sólida: 47 snippets bien organizados, documentación visual con diagramas Mermaid, soporte de Agent Skills y paridad entre fuentes, páginas y artefactos generados. Las mejoras se agrupan en cinco vectores:
11+
12+
1. **Robustez** — Evitar inconsistencias entre fuentes y artefactos generados
13+
2. **Consistencia editorial** — Homogeneizar la profundidad de cada página
14+
3. **Descubribilidad** — Mejorar el onboarding y la navegación por contexto
15+
4. **Expansión** — Nuevos snippets para APIs modernas
16+
5. **Medios y visuales** — Hacer el output comprensible a primera vista
17+
18+
---
19+
20+
## Fase 1 — Robustez y mantenibilidad ★
21+
22+
**Objetivo:** Reducir el riesgo de inconsistencias entre contenido fuente y artefactos generados.
23+
24+
### 1.1 Script de consistencia ★
25+
26+
Crear `scripts/check-consistency.js` expuesto como:
27+
28+
```json
29+
"check:consistency": "node scripts/check-consistency.js"
30+
```
31+
32+
Debe validar:
33+
- Cada snippet tiene página MDX asociada (o excepción explícita)
34+
- Cada página tiene snippet asociado (o está marcada como página editorial)
35+
- `_meta.json` está alineado con los `.mdx` existentes
36+
- `skills/` y `dist/` no están desactualizados respecto a `snippets/` y `pages/`
37+
- Los conteos publicados en `README.md` y `SKILLS.md` no han quedado obsoletos
38+
39+
### 1.2 Check de artefactos generados ★
40+
41+
```json
42+
"generate-skills:check": "node scripts/generate-skills.js && git diff --exit-code -- skills dist"
43+
```
44+
45+
Detecta si alguien modifica fuentes sin regenerar salidas. Corrige también la desalineación actual entre `package.json` (v1.2.0) y `skills/webperf/SKILL.md` (v1.1.0).
46+
47+
### 1.3 Modelo explícito para páginas editoriales
48+
49+
`Get-Your-Head-in-Order.mdx` es contenido editorial válido, pero no está formalizado. Opciones:
50+
51+
- Frontmatter `type: guide` para páginas sin snippet asociado
52+
- Lista de excepciones explícitas en el check de consistencia
53+
54+
Recomendación: usar frontmatter — es autodocumentado y legible por automatizaciones.
55+
56+
### 1.4 CI para pull requests ★
57+
58+
Workflow de GitHub Actions en cada PR:
59+
60+
```yaml
61+
- npm ci
62+
- npm run lint
63+
- npm run build
64+
- npm run check:consistency
65+
- npm run generate-skills:check
66+
```
67+
68+
Es la mejora con mejor retorno inmediato: evita que errores de consistencia lleguen a `main`.
69+
70+
---
71+
72+
## Fase 2 — Documentación y experiencia de contribución ★
73+
74+
**Objetivo:** Reducir la curva de entrada para nuevos contribuidores y consumidores.
75+
76+
### 2.1 Plantilla estándar por página ★
77+
78+
Esqueleto mínimo para cada snippet:
79+
80+
```
81+
1. Descripción breve (2-3 párrafos)
82+
2. Tabla de umbrales (Good / Needs Improvement / Poor) — donde aplique
83+
3. Diagrama Mermaid (flujo o secuencia)
84+
4. Snippet ejecutable con botón de copia
85+
5. Explicación del output (qué significa cada campo)
86+
6. Causas comunes y qué hacer si el resultado es malo
87+
7. Ejemplo de integración RUM (al menos 1)
88+
8. Tabla de compatibilidad de navegadores
89+
9. Further Reading
90+
```
91+
92+
Páginas prioritarias a enriquecer:
93+
94+
| Página | Qué le falta |
95+
|--------|-------------|
96+
| `LCP-Trail.mdx` | Tabla de campos, diagrama, sección de interpretación |
97+
| `LCP.mdx` | Ejemplo de integración RUM |
98+
| `FCP.mdx` | Diagrama de fases, tabla de causas comunes |
99+
| `LongTask.mdx` | Migración FID→INP, comparativa con LoAF |
100+
| `Scroll-Performance.mdx` | Tabla de umbrales, ejemplos de causas |
101+
| `Content-Visibility.mdx` | Diagrama before/after, casos de uso |
102+
| `Back-Forward-Cache.mdx` | Tabla de razones de fallo más comunes |
103+
104+
### 2.2 Tabla de compatibilidad de APIs ★
105+
106+
En cada página, tabla de soporte real:
107+
108+
| API | Chrome | Firefox | Safari | Edge |
109+
|-----|--------|---------|--------|------|
110+
| PerformanceObserver | ✅ 52 | ✅ 57 | ✅ 11 | ✅ 79 |
111+
| Long Animation Frames | ✅ 123 | ❌ | ❌ | ✅ 123 |
112+
113+
Actualmente solo `INP.mdx` tiene esta tabla. Evita frustración cuando un snippet no devuelve datos.
114+
115+
### 2.3 Documento de arquitectura
116+
117+
Crear `docs/ARCHITECTURE.md` con:
118+
119+
- Flujo: fuente → docs → skills → dist
120+
- Qué archivos son fuente de verdad vs. generados
121+
- Cuándo ejecutar `generate-skills`
122+
- Cómo se relacionan `pages/`, `snippets/`, `skills/` y `dist/`
123+
124+
### 2.4 Guía de release
125+
126+
Crear `docs/RELEASING.md`:
127+
128+
- Cómo subir versión
129+
- Cómo regenerar skills
130+
- Cómo validar que `SKILL.md` usa la versión correcta
131+
- Qué assets genera el workflow de release
132+
133+
### 2.5 Plantilla para nuevos snippets ★
134+
135+
Archivos `templates/snippet.js` y `templates/snippet-page.mdx` con la estructura mínima esperada. Futuro comando:
136+
137+
```json
138+
"new:snippet": "node scripts/new-snippet.js"
139+
```
140+
141+
Evita errores de naming, estructura y quality bar en cada aportación nueva.
142+
143+
### 2.6 Páginas índice por categoría
144+
145+
Añadir páginas de entrada por categoría:
146+
147+
- `CoreWebVitals/index.mdx` — Diagrama relacional LCP / INP / CLS. Cuándo afecta cada uno al score de PageSpeed
148+
- `Loading/index.mdx` — Jerarquía TTFB → FCP → LCP. Flujo de decisión: "¿qué medir primero?"
149+
- `Interaction/index.mdx` — INP como métrica principal, LoAF como herramienta de diagnóstico
150+
- `Media/index.mdx` — Impacto de imágenes y vídeos en LCP y CLS
151+
152+
### 2.7 Guía de inicio rápido por perfil
153+
154+
En `index.mdx` o como página separada:
155+
156+
```
157+
¿Eres...?
158+
├── Developer → LCP Sub-Parts + Resource Hints
159+
├── Analista → Core Web Vitals + TTFB
160+
├── DevOps → TTFB + Service Worker Analysis
161+
└── Diseñador → CLS + Image Element Audit
162+
```
163+
164+
### 2.8 Glosario técnico
165+
166+
Crear `pages/glossary.mdx`:
167+
BPP, LoAF, hadRecentInput, TAO, TTFB sub-parts, Core Web Vitals vs. Lighthouse metrics, RUM vs. Lab data.
168+
169+
---
170+
171+
## Fase 3 — Medios y documentación visual ★
172+
173+
**Objetivo:** Hacer el output comprensible a primera vista, especialmente para usuarios que llegan desde buscadores o IA.
174+
175+
### 3.1 Capturas de output en DevTools ★
176+
177+
Para los snippets principales (`LCP`, `CLS`, `INP`, `TTFB`, `FCP`, `Long-Animation-Frames`, `Image-Element-Audit`):
178+
179+
- Captura del output en consola (imagen o GIF animado)
180+
- Breve interpretación del resultado
181+
- Ejemplo de output "bueno" vs. "problemático"
182+
183+
Formato recomendado: imágenes en Cloudinary integradas con `CldImage`. La infraestructura ya existe.
184+
185+
### 3.2 Sección RUM integration en páginas clave ★
186+
187+
Replicar el patrón de `INP.mdx` (GA4, DataDog, New Relic) en:
188+
`LCP.mdx`, `CLS.mdx`, `TTFB.mdx`, `Long-Animation-Frames.mdx`
189+
190+
### 3.3 Videos cortos por workflow ★
191+
192+
Priorizar vídeos de 30–90 segundos orientados a intención concreta:
193+
194+
- "Cómo depurar TTFB lento"
195+
- "Cómo detectar render-blocking resources"
196+
- "Cómo investigar un LCP basado en imagen"
197+
- "Cómo usar WebPerf Skills con un agente"
198+
- "Cómo leer el output de INP"
199+
200+
Un problema, una demo, una conclusión. La infraestructura Cloudinary ya está disponible.
201+
202+
### 3.4 Playbooks / casos de uso reales
203+
204+
Crear `pages/playbooks/`:
205+
206+
- Auditar una landing lenta
207+
- Depurar terceros que bloquean render
208+
- Investigar mala experiencia móvil en red 3G
209+
- Analizar una página Next.js con exceso de hydration data
210+
211+
Conecta el catálogo técnico con problemas reales y mejora la descubribilidad desde buscadores.
212+
213+
### 3.5 Botón de "Demo Live"
214+
215+
Implementar páginas de prueba diseñadas para fallar en una métrica concreta (imagen pesada sin optimizar para LCP, shifts de layout para CLS) vinculadas desde su snippet. Los usuarios pueden abrir la página y ejecutar el snippet al instante.
216+
217+
---
218+
219+
## Fase 4 — Tooling interno
220+
221+
**Objetivo:** Reducir trabajo manual y convertir el repo en un sistema más autosuficiente.
222+
223+
### 4.1 `scripts/new-snippet.js`
224+
225+
Genera automáticamente:
226+
- Archivo en `snippets/<Category>/`
227+
- Página en `pages/<Category>/`
228+
- Entrada en `_meta.json`
229+
230+
### 4.2 Registro de snippets como fuente de verdad ★
231+
232+
Centralizar metadatos en `snippets-registry.json` o expandir `lib/snippets-registry.js` para que sea generado:
233+
- Imports, títulos, descripciones base, URLs
234+
- Genera `_meta.json` y tabla de contenidos en `README.md`
235+
- Proporciona API interna para Agent Skills
236+
237+
### 4.3 `scripts/docs-stats.js`
238+
239+
Genera estadísticas del proyecto:
240+
- Snippets por categoría
241+
- Páginas editoriales vs. páginas con snippet
242+
- Últimas incorporaciones
243+
- Cobertura de tablas de compatibilidad y capturas
244+
245+
Útil para refrescar README o una página "Project Stats".
246+
247+
### 4.4 Smoke tests para scripts críticos
248+
249+
Tests básicos de filesystem y outputs esperados para:
250+
`generate-skills.js`, `install-skills.js`, `install-global.js`, `install-from-release.js`, futuro `check-consistency.js`
251+
252+
### 4.5 Badges de salud en README
253+
254+
- Última release
255+
- Estado del CI
256+
- Número de snippets
257+
- Licencia
258+
259+
---
260+
261+
## Fase 5 — Nuevos snippets
262+
263+
**Objetivo:** Cubrir APIs modernas donde el proyecto puede ganar diferenciación.
264+
265+
### 5.1 Core Web Vitals
266+
267+
| Snippet | API clave | Chrome mín. |
268+
|---------|-----------|-------------|
269+
| `INP-Attribution.js` | PerformanceObserver + LoAF | 123 |
270+
| `CLS-Source-Attribution.js` | LayoutShift attribution | 84 |
271+
| `LCP-Initiator-Chain.js` | Resource Timing + LoAF | 123 |
272+
273+
### 5.2 Loading ★
274+
275+
| Snippet | API clave | Chrome mín. |
276+
|---------|-----------|-------------|
277+
| `Speculation-Rules-Audit.js` ★ | document.ruleSets | 109 |
278+
| `Fetch-Priority-Audit.js` | Resource Timing priority | 102 |
279+
| `Early-Hints-Detection.js` ★ | Resource Timing | 103 |
280+
| `Third-Party-Impact-Score.js` ★ | LoAF + Resource Timing | 123 |
281+
| `HTTP-Cache-Audit.js` ★ | Resource Timing cache | 52 |
282+
| `Compression-Audit.js` | Resource Timing encoding | 52 |
283+
| `Module-Preload-Audit.js` | Resource Timing + ES modules | 66 |
284+
285+
### 5.3 Interaction
286+
287+
| Snippet | API clave | Chrome mín. |
288+
|---------|-----------|-------------|
289+
| `INP-Long-Tasks-Correlation.js` | LoAF + INP | 123 |
290+
| `Pointer-Event-Latency.js` | Event Timing | 76 |
291+
| `Soft-Navigation-Tracking.js` ★ | Soft Navigations API (exp.) | 123 |
292+
293+
### 5.4 Media
294+
295+
| Snippet | API clave | Chrome mín. |
296+
|---------|-----------|-------------|
297+
| `Image-Format-Audit.js` | Resource Timing + DOM | 52 |
298+
| `Responsive-Images-Audit.js` | DOM inspection | 52 |
299+
| `Font-Display-Audit.js` ★ | CSS OM + Resource Timing | 52 |
300+
| `Font-Face-Detailed-Timing.js` ★ | FontFaceSet API | 35 |
301+
| `Image-CDN-Policy-Audit.js` | Resource Timing + DOM | 52 |
302+
303+
### 5.5 Nueva categoría: Security & Privacy Performance
304+
305+
| Snippet | API clave | Chrome mín. |
306+
|---------|-----------|-------------|
307+
| `Permissions-Policy-Audit.js` | document.featurePolicy | 74 |
308+
| `Cross-Origin-Isolation-Audit.js` | crossOriginIsolated | 87 |
309+
310+
### 5.6 Nueva categoría: Resilience & Offline
311+
312+
| Snippet | API clave | Chrome mín. |
313+
|---------|-----------|-------------|
314+
| `Service-Worker-Cache-Strategy.js` | SW Cache API | 40 |
315+
| `Offline-Fallback-Audit.js` | SW + Fetch | 40 |
316+
317+
---
318+
319+
## Fase 6 — Mejoras en snippets existentes
320+
321+
| Script | Mejora |
322+
|--------|--------|
323+
| `TTFB.js` | Añadir parsing de `Server-Timing` header |
324+
| `First-And-Third-Party-Script-Info.js` | Correlacionar con LoAF para indicar impacto en LCP/INP |
325+
| `Resource-Hints.js` | Verificar si preloads y prefetches se usaron realmente |
326+
| `Fonts-Preloaded-Loaded-and-used-above-the-fold.js` | Detectar font subsetting con `unicode-range` |
327+
| `Long-Animation-Frames.js` | Mini timeline ASCII en consola para identificar patrones |
328+
329+
---
330+
331+
## Fase 7 — Internacionalización
332+
333+
Dado que el autor y parte de la comunidad de WebPerf es hispanohablante, traducir la documentación al español aportaría valor diferencial. Configurar Nextra para `/en/` y `/es/` y traducir guías y explicaciones de métricas en fases.
334+
335+
---
336+
337+
## Priorización
338+
339+
### Alta prioridad — impacto inmediato
340+
341+
1. ★ Corregir desalineación de versión `package.json` vs `SKILL.md`
342+
2. ★ `check-consistency.js` + `generate-skills:check`
343+
3. ★ CI para pull requests (lint + build + consistency + artifacts)
344+
4. ★ Capturas de output en consola para los 7 snippets principales
345+
5. ★ Enriquecer páginas con poco contenido (LCP-Trail, FCP, LongTask, Scroll-Performance)
346+
6. ★ `Speculation-Rules-Audit.js` — API moderna, alta demanda en 2025-2026
347+
7. ★ `Third-Party-Impact-Score.js` — pregunta más frecuente en auditorías
348+
349+
### Media prioridad — mejora la calidad global
350+
351+
8. Páginas índice por categoría
352+
9. ★ RUM integration en LCP, CLS, TTFB
353+
10. ★ `HTTP-Cache-Audit.js` y `Fetch-Priority-Audit.js`
354+
11. ★ Plantilla para nuevos snippets + `new-snippet.js`
355+
12. `docs/ARCHITECTURE.md` y `docs/RELEASING.md`
356+
13. ★ Tabla de compatibilidad de APIs en cada página
357+
14. Glosario técnico
358+
15. Guía de inicio rápido por perfil
359+
360+
### Baja prioridad — madurez del proyecto
361+
362+
16. Testing de snippets (smoke tests + Playwright)
363+
17. Nueva categoría Security & Privacy Performance
364+
18. Nueva categoría Resilience & Offline
365+
19. Videos cortos por workflow
366+
20. Playbooks de casos de uso reales
367+
21. Botón de "Demo Live"
368+
22. Internacionalización (español)
369+
23. Snippet output schema (TypeScript types)
370+
371+
---
372+
373+
## Quick wins muy concretos
374+
375+
Acciones de menos de 1 hora cada una:
376+
377+
- [ ] Corregir versión en `skills/webperf/SKILL.md` (1.1.0 → 1.2.0)
378+
- [ ] Añadir frontmatter `type: guide` a `Get-Your-Head-in-Order.mdx`
379+
- [ ] Añadir `npm run check:consistency` al script section de `package.json`
380+
- [ ] Añadir sección "Start here" en `README.md`
381+
- [ ] Añadir badges (release, CI status, snippet count) en `README.md`
382+
- [ ] Añadir tabla de compatibilidad a `LCP.mdx`, `CLS.mdx`, `TTFB.mdx`
383+
- [ ] Añadir al menos 3 capturas de consola en snippets clave
384+
385+
---
386+
387+
*Fusión consolidada — 2026-04-05*

0 commit comments

Comments
 (0)