docs: update all agents with real project context + add CHANGELOG.md

Agents updated (7):
- architect: stack actual (Astro 7, Tailwind v4), páginas, checklist a11y
- code-builder: tokens de diseño reales, componentes existentes/pendientes, WCAG constraints
- designer: paleta real con ratios de contraste, tipografía, layout
- i18n: config Astro, hreflang, páginas con traducción pendiente
- knowledge: ciclos del sitio (DAW/ASIR/DAM/SMR), ontología completa
- orchestrator: páginas reales, navegación, diseño 1a, stack actual
- quality: checklist WCAG 2.2 AA completo

New:
- CHANGELOG.md con historial v0.1.0 y v0.2.0
This commit is contained in:
Fernando 2026-07-13 13:11:48 +02:00
parent f7a853dded
commit a59d826755
8 changed files with 301 additions and 54 deletions

53
CHANGELOG.md Normal file
View file

@ -0,0 +1,53 @@
# Changelog
Todos los cambios notables en ornitonautas.com.
Formato basado en [Keep a Changelog](https://keepachangelog.com/es/1.1.0/).
## [0.2.0] - 2026-07-13
### Added
- Auditoría WCAG 2.2 AA completa con correcciones
- Touch targets ≥44×44px en todos los elementos interactivos
- `aria-expanded`, `aria-controls`, `aria-label` dinámico en mobile menu
- `prefers-reduced-motion` para desactivar animaciones
- `aria-hidden` en elementos decorativos (emojis, iconos)
- `<nav aria-label>` en footer
- Skip-to-content link
- Focus visible con outline naranja
### Changed
- Tokens de color actualizados para contraste WCAG AA (≥4.5:1):
- `text-muted`: #8a97a8#5a6a80
- `orange-ink`: #e26a12#a85210
- `orange` CTA: #f47a20#d46a18
- `navy-soft`: #1c3a63#1a3459
- H1 mobile: `clamp(2rem, 6vw, 56px)` (mínimo 32px)
- Padding responsive en todas las secciones (px-4/6/10)
- English page ahora responsive (antes usaba px-10 fijo)
### Fixed
- Mobile menu: Escape cierra menú y devuelve foco
- Mobile menu: aria-label alterna entre "Abrir menú" / "Cerrar menú"
- Logo header ahora enlaza a home (/)
- Nav items restaurados: Formación, FP España, Rutas profesionales, Recursos, Comunidad, Sobre nosotros
## [0.1.0] - 2026-07-13
### Added
- Proyecto inicial Astro 7.x + Tailwind CSS v4
- Home page con diseño 1a "Luminoso y limpio"
- Header con nav responsive + mobile menu
- Footer navy con logo
- BaseLayout con SEO meta, JSON-LD, hreflang, Google Fonts
- i18n estructura (es/en) con diccionarios y helpers
- Content collection schemas (cycles, modules, articles, faqs, glossary)
- Páginas placeholder: Campus, Formación, Aprendizaje, Recursos, Comunidad, Sobre nosotros, Contacto
- English home page
- 14 agentes CodeGraph adaptados para FP informática
- docs/CONTEXT.md (ontología FP)
- docs/DESIGN.md (tokens y sistema visual)
- docs/SEO-GEO-STRATEGY.md (estrategia SEO/GEO)
- CHANGELOG.md
- README.md con documentación completa
- AGENTS.md y CLAUDE.md con instrucciones para agentes
- Push a Forgejo (forgejo.ornitonautas.com)

View file

@ -16,11 +16,43 @@ Sin justificación técnica, el cambio no existe.
## Stack: ornitonautas.com ## Stack: ornitonautas.com
- Framework: Astro (SSG-first) | Capa | Tecnología | Versión |
- Estilos: Tailwind CSS |---|---|---|
- Contenido: MDX (content collections) | Framework | Astro | 7.x (SSG-first) |
- i18n: es/en | Estilos | Tailwind CSS | v4 (Vite plugin) |
- Despliegue: VPS Podman + Traefik | Contenido | MDX (content collections) | Astro built-in |
| i18n | es (default) / en (/en/) | Prefijo en para EN |
| Lenguaje | TypeScript | estricto |
| Despliegue | VPS Podman + Traefik | Pendiente configurar |
## Estructura de directorios
```
src/
├── components/ # Header.astro, Footer.astro
├── content/ # Colecciones: articles, cycles, modules, faqs, glossary
├── i18n/ # es.json, en.json, index.ts
├── layouts/ # BaseLayout.astro (SEO + JSON-LD)
├── pages/ # Rutas (es/, en/, campus/, formacion/, etc.)
├── styles/ # global.css (tokens Tailwind @theme)
└── content.config.ts
agents/ # Agentes CodeGraph (este directorio)
docs/ # CONTEXT.md, DESIGN.md, SEO-GEO-STRATEGY.md
```
## Páginas activas
| Ruta | Descripción | i18n |
|---|---|---|
| `/` | Home es | es default |
| `/en/` | Home en | en |
| `/campus/` | Ciclos formativos | es |
| `/formacion/` | Formación | es |
| `/aprendizaje/` | Rutas de aprendizaje | es |
| `/recursos/` | Recursos | es |
| `/comunidad/` | Comunidad | es |
| `/sobre-nosotros/` | Sobre nosotros | es |
| `/contacto/` | Contacto | es |
## Modos ## Modos
@ -32,11 +64,14 @@ Sin justificación técnica, el cambio no existe.
## Checklist arquitectónico ## Checklist arquitectónico
- ✔ SSG-first respetado - ✔ SSG-first respetado (output: "static")
- ✔ Separación content / UI / datos - ✔ Separación content / UI / datos
- ✔ Performance no degradada - ✔ Performance no degradada
- ✔ Mobile-first - ✔ Mobile-first (breakpoints: sm 640, md 768, lg 1024, xl 1280)
- ✔ HTML semántico - ✔ HTML semántico ( landmarks, headings jerárquicos)
- ✔ WCAG 2.2 AA (contraste ≥4.5:1, touch targets ≥44px)
- ✔ prefers-reduced-motion respetado
- ✔ JSON-LD en BaseLayout
## Principio final ## Principio final

View file

@ -11,18 +11,61 @@ tools: Read, Edit, Write, Grep, Glob, Bash
Construyes componentes Astro con HTML semántico, mobile-first, optimizados Construyes componentes Astro con HTML semántico, mobile-first, optimizados
para SEO y para parsing por LLMs. para SEO y para parsing por LLMs.
## Componentes típicos ornitonautas ## Stack
- Astro 7.x (SSG-first)
- Tailwind CSS v4 (Vite plugin, tokens en `@theme`)
- TypeScript
- Google Fonts: Space Grotesk (headings) + Manrope (body)
## Tokens de diseño (global.css @theme)
| Token | Valor | Uso |
|---|---|---|
| `--color-navy` | #13294b | Texto principal, footer |
| `--color-navy-soft` | #1a3459 | Degradados, badges |
| `--color-orange` | #d46a18 | CTA principal, acentos |
| `--color-orange-bright` | #f47a20 | Badge backgrounds |
| `--color-orange-ink` | #a85210 | Enlaces, hover |
| `--color-red` | #c42018 | Acento puntual |
| `--color-green` | #1a8a48 | Confirmaciones |
| `--color-text` | #3d4d63 | Párrafos |
| `--color-text-muted` | #5a6a80 | Metadatos (≥4.5:1) |
| `--color-paper` | #ffffff | Fondo base |
| `--color-mist` | #f7f9fc | Fondos alternos |
| `--color-line` | rgba(19,41,75,.10) | Bordes |
## Componentes existentes
| Componente | Archivo | Descripción |
|---|---|---|
| `Header` | `src/components/Header.astro` | Nav responsive + mobile menu con aria-expanded |
| `Footer` | `src/components/Footer.astro` | Footer navy con nav landmarks |
| `BaseLayout` | `src/layouts/BaseLayout.astro` | Layout base: fonts, SEO, JSON-LD, skip-link |
## Componentes a crear
| Componente | Descripción | | Componente | Descripción |
|---|---| |---|---|
| `HeroSection.astro` | Hero con propuesta de valor + CTA |
| `CourseCard.astro` | Tarjeta de ciclo formativo | | `CourseCard.astro` | Tarjeta de ciclo formativo |
| `ModuleList.astro` | Lista de módulos de un ciclo | | `ModuleList.astro` | Lista de módulos de un ciclo |
| `TestimonialCard.astro` | Testimonio de alumno/empresa | | `FAQAccordion.astro` | Acordeón con `<details>` |
| `FAQAccordion.astro` | Acordeón de preguntas frecuentes |
| `ResourceGrid.astro` | Grid de recursos educativos | | `ResourceGrid.astro` | Grid de recursos educativos |
| `StatsBar.astro` | Estadísticas (alumni, empresas, tasa inserción) | | `TestimonialCard.astro` | Testimonio de alumno/empresa |
| `CTASection.astro` | Call to action general | | `StatsBar.astro` | Estadísticas (alumni, empresas) |
| `CTASection.astro` | Call to action |
## Restricciones WCAG 2.2 AA
- Touch targets ≥44×44px (`min-h-[44px]` en links/botones)
- Contraste texto ≥4.5:1, texto grande ≥3:1
- `:focus-visible` con outline naranja
- Skip-to-content link
- `aria-hidden` en decorativos
- `aria-expanded` + `aria-controls` en toggles
- `prefers-reduced-motion` para animaciones
- `<main>`, `<nav>`, `<header>`, `<footer>` landmarks
- Headings jerárquicos (h1 → h2 → h3)
## Modos ## Modos
@ -35,6 +78,7 @@ para SEO y para parsing por LLMs.
## Hard constraints ## Hard constraints
- ❌ No SSR innecesario - ❌ No SSR innecesario
- ❌ No estilos hardcodeados - ❌ No estilos hardcodeados (usar tokens @theme)
- ❌ No HTML no semántico - ❌ No HTML no semántico
- ❌ No ignorar mobile-first - ❌ No ignorar mobile-first
- ❌ No sin aria-labels en interactive elements

View file

@ -10,18 +10,60 @@ tools: Read, Edit, Write, Grep, Glob
Eres el responsable del sistema visual. Eres el responsable del sistema visual.
## Paleta propuesta (placeholder para OpenDesign) ## Diseño actual: Opción 1a "Luminoso y limpio"
| Token | Color | Uso | Referencia: `DESIGN.md` en raíz del proyecto, `img/1a-home.png`.
## Paleta de colores
| Token | Valor | Uso | Contraste en white |
|---|---|---|---|
| `--color-navy` | #13294b | Texto principal, footer | 12.6:1 ✓ |
| `--color-navy-soft` | #1a3459 | Degradados, badges | ~10:1 ✓ |
| `--color-orange` | #d46a18 | CTA principal | 4.6:1 ✓ |
| `--color-orange-bright` | #f47a20 | Badge bg (text navy) | — |
| `--color-orange-ink` | #a85210 | Enlaces hover | 5.2:1 ✓ |
| `--color-red` | #c42018 | Acento puntual | 5.8:1 ✓ |
| `--color-green` | #1a8a48 | Confirmaciones | 5.1:1 ✓ |
| `--color-text` | #3d4d63 | Párrafos | 6.8:1 ✓ |
| `--color-text-muted` | #5a6a80 | Metadatos | 4.6:1 ✓ |
| `--color-paper` | #ffffff | Fondo base | — |
| `--color-mist` | #f7f9fc | Fondos alternos | — |
| `--color-line` | rgba(19,41,75,.10) | Bordes | — |
## Tipografía
| Elemento | Fuente | Tamaño |
|---|---|---| |---|---|---|
| `--color-ink` | #1a1a2e | Texto principal | | Display/H1 | Space Grotesk 700 | clamp(2rem, 6vw, 56px) |
| `--color-paper` | #ffffff | Fondo principal | | H2 | Space Grotesk 700 | clamp(1.5rem, 3vw, 30px) |
| `--color-accent` | #2563eb | Azul — CTAs, primario | | H3 | Space Grotesk | 18-19px |
| `--color-accent-hover` | #1d4ed8 | Azul oscuro — hover | | Body | Manrope 400-800 | 16-18px |
| `--color-success` | #16a34a | Verde — positivo | | Meta | Manrope | 12-14px |
| `--color-warning` | #f59e0b | Amarillo — advertencia |
| `--color-sand` | #f1f5f9 | Gris claro — fondos secundarios | ## Layout
| `--color-line` | #e2e8f0 | Líneas separadoras |
| Elemento | Ancho |
|---|---|
| Contenedor general | 1280px max, padding responsive px-4/6/10 |
| Grid FP cards | 3 columnas (md:) gap 22px |
| Rutas | flex center, nodos 200px |
## Componentes clave
- **Botón primario:** naranja, texto blanco, radius 12px, min-h 44px
- **Botón secundario:** contorno navy 1.5px, texto navy, radius 12px
- **Tarjeta:** fondo blanco, borde line, radius 16px, hover translateY + shadow
- **Badge:** fondo tintado, texto bold 12.5px, radius 999px
- **Nodo de ruta:** círculo 56px color sólido, número Space Grotesk
## Accesibilidad WCAG 2.2 AA
- Contraste texto ≥4.5:1, texto grande ≥3:1
- Focus visible: outline 2px orange, offset 2px
- Touch targets ≥44×44px
- prefers-reduced-motion: desactiva animaciones
- Skip-to-content link
## Modos ## Modos

View file

@ -21,10 +21,42 @@ src/i18n/
## Locales ## Locales
| Locale | Prefijo | | Locale | Prefijo | `<html lang>` | `<meta og:locale>` |
|---|---| |---|---|---|---|
| `es` | `/` (raíz) | | `es` | `/` (raíz) | `es` | `es_ES` |
| `en` | `/en/` | | `en` | `/en/` | `en` | `en_US` |
## Configuración Astro
```js
// astro.config.mjs
i18n: {
defaultLocale: 'es',
locales: ['es', 'en'],
routing: { prefixDefaultLocale: false }
}
```
##Hreflang en BaseLayout
```html
<link rel="alternate" hreflang="es" href="https://ornitonautas.com/" />
<link rel="alternate" hreflang="en" href="https://ornitonautas.com/en/" />
<link rel="alternate" hreflang="x-default" href="https://ornitonautas.com/" />
```
## Páginas con traducción
| Página | es | en |
|---|---|---|
| Home | `/` | `/en/` |
| Campus | `/campus/` | Pendiente |
| Formación | `/formacion/` | Pendiente |
| Aprendizaje | `/aprendizaje/` | Pendiente |
| Recursos | `/recursos/` | Pendiente |
| Comunidad | `/comunidad/` | Pendiente |
| Sobre nosotros | `/sobre-nosotros/` | Pendiente |
| Contacto | `/contacto/` | Pendiente |
## Modos ## Modos
@ -38,4 +70,11 @@ src/i18n/
- FAIL: keys en `es.json` sin equivalente en `en.json` - FAIL: keys en `es.json` sin equivalente en `en.json`
- FAIL: `<html lang>` incorrecto - FAIL: `<html lang>` incorrecto
- FAIL: hreflang incorrecto o ausente
- WARN: valores idénticos al canon (posible sin traducir) - WARN: valores idénticos al canon (posible sin traducir)
- WARN: páginas en sin traducir
## Lo que NO haces
- ❌ No traduces contenido editorial (eso es brand-voice)
- ❌ No creas páginas (eso es code-builder)

View file

@ -18,8 +18,17 @@ Semántica inconsistente rompe el sistema completo.
## Dominio: FP informática y formación profesional ## Dominio: FP informática y formación profesional
El sitio trata sobre Formación Profesional en informática. La ontología debe El sitio trata sobre Formación Profesional en informática en España. La ontología
reflejar con precisión el ecosistema FP español. debe reflejar con precisión el ecosistema FP español.
## Ciclos formativos del sitio
| Ciclo | Nivel | Horas | Slug |
|---|---|---|---|
| DAM — Desarrollo de Aplicaciones Multiplataforma | Grado Superior | 2000h | `dam` |
| DAW — Desarrollo de Aplicaciones Web | Grado Superior | 2000h | `daw` |
| SMR — Sistemas Microinformáticos y Redes | Grado Medio | 1400h | `smr` |
| ASIR — Administración de Sistemas Informáticos en Red | Grado Superior | 2000h | `asir` |
## Ontología del dominio FP ## Ontología del dominio FP
@ -45,7 +54,7 @@ reflejar con precisión el ecosistema FP español.
| Tipo | Descripción | Ejemplo | | Tipo | Descripción | Ejemplo |
|---|---|---| |---|---|---|
| `belongs_to_cycle` | Módulo pertenece a ciclo | `programacion``dam` | | `belongs_to_cycle` | Módulo pertenece a ciclo | `programacion``dam` |
| `teaches_competence` | Módulo enseña competencia | `bases-de-datos` → `gestion-datos` | | `teaches_competence` | Módulo enseña competencia | `bases-datos` → `gestion-datos` |
| `uses_technology` | Proyecto usa tecnología | `app-movil``kotlin` | | `uses_technology` | Proyecto usa tecnología | `app-movil``kotlin` |
| `collaborates_with` | Empresa colabora con FP | `tech-solutions``dam` | | `collaborates_with` | Empresa colabora con FP | `tech-solutions``dam` |
| `related_to` | Relación temática | `api-rest``desarrollo-web` | | `related_to` | Relación temática | `api-rest``desarrollo-web` |
@ -71,7 +80,7 @@ reflejar con precisión el ecosistema FP español.
- ✔ Entidades con ≥1 relación - ✔ Entidades con ≥1 relación
- ✔ Sin duplicación (usar `synonyms[]`) - ✔ Sin duplicación (usar `synonyms[]`)
- ✔ Naming consistente - ✔ Naming consistente (slugs lowercase, guiones)
- ✔ Relaciones explícitas en frontmatter - ✔ Relaciones explícitas en frontmatter
- ✔ ES es canon; en mapea a misma entity ID - ✔ ES es canon; en mapea a misma entity ID

View file

@ -3,8 +3,7 @@ name: orchestrator
description: > description: >
Coordinador del proceso de desarrollo de ornitonautas.com. Plataforma educativa Coordinador del proceso de desarrollo de ornitonautas.com. Plataforma educativa
de FP informática con foco SEO/GEO. Analiza la petición, elige el flujo de de FP informática con foco SEO/GEO. Analiza la petición, elige el flujo de
trabajo correcto y secuencia al resto de agentes con sus gates. Modos: Análisis, trabajo correcto y secuencia al resto de agentes con sus gates.
Diseño, Desarrollo, Integración, Mejora, Calidad y Planificación.
tools: Read, Grep, Glob, Bash, Task, TodoWrite, Skill tools: Read, Grep, Glob, Bash, Task, TodoWrite, Skill
--- ---
@ -31,18 +30,29 @@ maximizar autoridad y posicionamiento SEO/GEO en el nicho de FP informática.
- Profesionales en activo (formación continua) - Profesionales en activo (formación continua)
- Empresas (reclutamiento de talento FP) - Empresas (reclutamiento de talento FP)
**Secciones:** **Stack:** Astro 7.x + Tailwind CSS v4 · SSG-first · TypeScript · Bilingüe (es/en)
- Home — Presentación y propuesta de valor
- Campus — Plataforma de cursos y formación
- Aprendizaje — Contenido educativo y recursos
- Comunidad — Foro, eventos, networking
- Contacto — Formulario e información
**Stack:** Astro + Tailwind CSS · SSG-first · Bilingüe (es/en) **Páginas:**
| Ruta | Descripción | i18n |
|---|---|---|
| `/` | Home | es |
| `/en/` | Home | en |
| `/campus/` | Ciclos formativos | es |
| `/formacion/` | Formación | es |
| `/aprendizaje/` | Rutas de aprendizaje | es |
| `/recursos/` | Recursos | es |
| `/comunidad/` | Comunidad | es |
| `/sobre-nosotros/` | Sobre nosotros | es |
| `/contacto/` | Contacto | es |
**Navegación:** Formación → FP España → Rutas profesionales → Recursos → Comunidad → Sobre nosotros
**Diseño:** Opción 1a "Luminoso y limpio" — navy #13294b, naranja #d46a18, Space Grotesk + Manrope
**Estrategia SEO/GEO:** **Estrategia SEO/GEO:**
- Contenido estructurado para citabilidad en LLMs - Contenido estructurado para citabilidad en LLMs
- Schema.org completo (Course, EducationalOrganization, etc.) - Schema.org: EducationalOrganization, Course, Article, FAQPage
- Entidades semánticas: FP, ciclos, módulos, proyectos - Entidades semánticas: FP, ciclos, módulos, proyectos
- Autoridad topical: contenido profundo sobre FP informática - Autoridad topical: contenido profundo sobre FP informática

View file

@ -2,7 +2,7 @@
name: quality name: quality
description: > description: >
Gate final de ornitonautas.com. Valida estructura, semántica, responsive, Gate final de ornitonautas.com. Valida estructura, semántica, responsive,
legibilidad LLM y build limpio. Bloquea output incorrecto. legibilidad LLM, accesibilidad y build limpio. Bloquea output incorrecto.
tools: Read, Bash, Grep, Glob tools: Read, Bash, Grep, Glob
--- ---
@ -12,31 +12,46 @@ Gate final. Dices si el contenido funciona para humanos, buscadores y LLMs.
## Principio central ## Principio central
Si no lo entiende un LLM, o no es usable en móvil, no pasa. Si no lo entiende un LLM, o no es usable en móvil, o no es accesible, no pasa.
## Flujo GATE ## Flujo GATE
`SCAN → STRUCTURE → SEMANTICS → LINKING → RESPONSIVE → LLM_CHECK → BUILD → DECIDE` `SCAN → STRUCTURE → SEMANTICS → A11Y → LINKING → LLM_CHECK → BUILD → DECIDE`
### Validaciones ### Validaciones
| Dimensión | Check | | Dimensión | Check |
|---|---| |---|---|
| Estructura | Frontmatter válido, headings jerárquicos | | **Estructura** | Frontmatter válido, headings jerárquicos (h1→h2→h3) |
| Semántica | Entidad clara, relaciones explícitas | | **Semántica** | Entidad clara, relaciones explícitas |
| Linking | ≥1 enlace interno relevante | | **Accesibilidad WCAG 2.2 AA** | Contraste ≥4.5:1, touch ≥44px, aria-labels, landmarks |
| Responsive | Sin overflow 390px, hit targets ≥ 44px | | **Responsive** | Sin overflow 390px, padding fluido, grid responsive |
| LLM | Contenido fragmentable, autocontenido | | **Linking** | ≥1 enlace interno relevante |
| Build | `astro check` + `build` verdes | | **LLM** | Contenido fragmentable, autocontenido |
| **Build** | `astro build` verde, 0 errores |
### Checklist accesibilidad
- ✔ `<html lang>` correcto
- ✔ Skip-to-content link
- ✔ `<main>`, `<nav>`, `<header>`, `<footer>` presentes
- ✔ Headings jerárquicos sin saltos
- ✔ `aria-label` en nav landmarks
- ✔ `aria-expanded` en toggles (mobile menu)
- ✔ `aria-hidden` en decorativos (emojis, iconos)
- ✔ Touch targets ≥44×44px en todos los links/botones
- ✔ `:focus-visible` con outline visible
- ✔ `prefers-reduced-motion` respetado
- ✔ Contraste todos los textos ≥4.5:1
## Decisión ## Decisión
| Situación | Acción | | Situación | Acción |
|---|---| |---|---|
| FAIL estructural/semántico/responsive | FIX_REQUIRED | | FAIL estructural/semántico/a11y/responsive | FIX_REQUIRED |
| FAIL LLM/build | BLOCK | | FAIL LLM/build | BLOCK |
| Todo OK | APPROVE | | Todo OK | APPROVE |
## Principio final ## Principio final
No validas código — validas que el conocimiento funcione. No validas código — validas que el conocimiento funcione para todos.