Proyecto final: un filtro de proyectos accesible para tu portfolio

Una funcionalidad completa en la que aplicas lo del curso: AGENTS.md, rama, encargo con límites, PRIMM, pruebas, revisión de accesibilidad y seguridad, diario de prompts y README con el uso de IA.

El proyecto: un filtro de proyectos por disciplina para tu portfolio, en HTML, CSS y JavaScript sin librerías, que funcione con teclado y lector de pantalla.

Puedes usar la IA como quieras, siempre que puedas explicar cada línea y lo documentes.

Entregas: el código en una rama, AGENTS.md, pruebas con probar(), un diario de prompts y el README con créditos y uso de IA.

Se valora el resultado, pero también el proceso: lo que comprobaste, lo que descartaste y por qué.

  • Un filtro de proyectos por disciplina.
  • Tu portfolio tiene una rejilla de proyectos y cada tarjeta lleva su disciplina en data-categoria. Quieres unos botones (Todos, Branding, Cartel, Editorial) que muestren solo los proyectos de esa disciplina.
  • Requisitos: sin librerías; el botón activo se marca con aria-pressed="true"; las tarjetas se ocultan con hidden; un texto anuncia cuántos proyectos se ven (aria-live); las categorías se comparan normalizadas (mayúsculas y espacios), porque en los datos reales vienen como vienen.
  • Si tu portfolio no tiene proyectos todavía, usa el HTML del reto de esta lección como punto de partida.
  • Cada fase deja algo que puedes enseñar.

El encargo

Un filtro de proyectos por disciplina.

Tu portfolio tiene una rejilla de proyectos y cada tarjeta lleva su disciplina en data-categoria. Quieres unos botones (Todos, Branding, Cartel, Editorial) que muestren solo los proyectos de esa disciplina.

Requisitos: sin librerías; el botón activo se marca con aria-pressed="true"; las tarjetas se ocultan con hidden; un texto anuncia cuántos proyectos se ven (aria-live); las categorías se comparan normalizadas (mayúsculas y espacios), porque en los datos reales vienen como vienen.

Si tu portfolio no tiene proyectos todavía, usa el HTML del reto de esta lección como punto de partida.

Cinco fases (una por bloque del curso)

Cada fase deja algo que puedes enseñar.

El diario de prompts

Una entrada por cada petición importante.

Guarda en docs/diario-ia.md una entrada por cada petición importante: la herramienta, el prompt tal cual, qué hiciste con la respuesta y qué cambiaste o descartaste. No hace falta apuntar cada pregunta suelta; sí las que dieron forma al código.

El diario sirve para tres cosas: te obliga a pensar qué pides, te deja ver qué prompts funcionan y cuáles no, y demuestra (a un cliente, a tu docente o a ti en seis meses) qué parte del trabajo es tuya.

Cómo se valora

Cuatro aspectos, con el mismo peso.

AspectoConseguidoEn caminoPor empezar FuncionaFiltra bien con datos reales (mayúsculas y espacios), anuncia el resultado y no hay errores en la consolaFiltra, pero falla con algún dato o no anuncia el resultadoNo filtra o hay errores Accesible y seguroBotones nativos con aria-pressed, todo con teclado, foco visible, sin innerHTML con datosFalla una de esas cosasFallan varias ComprobadoPruebas de normalizar() y filtrar() con límites, que avisan si rompes el códigoPruebas solo del caso normalSin pruebas DocumentadoAGENTS.md, diario con al menos tres entradas, README con créditos, uso de IA y licenciaFalta una de las tres piezasFaltan varias

Y una comprobación final, sin IA: abre filtrar() y explica en voz alta qué hace cada línea. Si alguna no puedes explicarla, vuelve a la fase 2 con ella.

IA para programar
13

Proyecto final: un filtro de proyectos accesible para tu portfolio

Una funcionalidad completa en la que aplicas lo del curso: AGENTS.md, rama, encargo con límites, PRIMM, pruebas, revisión de accesibilidad y seguridad, diario de prompts y README con el uso de IA.

Código del tema: filtrar(categoria) + diario de prompts

📘 Teoría

El encargo

Un filtro de proyectos por disciplina.

Tu portfolio tiene una rejilla de proyectos y cada tarjeta lleva su disciplina en data-categoria. Quieres unos botones (Todos, Branding, Cartel, Editorial) que muestren solo los proyectos de esa disciplina.

Requisitos: sin librerías; el botón activo se marca con aria-pressed="true"; las tarjetas se ocultan con hidden; un texto anuncia cuántos proyectos se ven (aria-live); las categorías se comparan normalizadas (mayúsculas y espacios), porque en los datos reales vienen como vienen.

Si tu portfolio no tiene proyectos todavía, usa el HTML del reto de esta lección como punto de partida.

Cinco fases (una por bloque del curso)

Cada fase deja algo que puedes enseñar.

1

1. Preparar

AGENTS.md con las reglas del proyecto, commit limpio y rama ia/filtro-proyectos.

2

2. Encargar y entender

Encargo con tarea, ficheros, límites y «terminado cuando». Lo que te proponga la IA, con PRIMM: predice, ejecuta, investiga.

3

3. Comprobar

Pruebas con probar() para normalizar() y filtrar(), límites incluidos. Rompe el código a propósito y mira que avisan.

4

4. Revisar

Diff fichero a fichero, teclado (Tab, Intro, Espacio), lector de pantalla o panel de Accesibilidad, nada de innerHTML con datos.

5

5. Documentar

Diario de prompts y README con créditos, uso de IA y licencia. Commit con mensaje claro y fusión de la rama.

El diario de prompts

Una entrada por cada petición importante.

Guarda en docs/diario-ia.md una entrada por cada petición importante: la herramienta, el prompt tal cual, qué hiciste con la respuesta y qué cambiaste o descartaste. No hace falta apuntar cada pregunta suelta; sí las que dieron forma al código.

El diario sirve para tres cosas: te obliga a pensar qué pides, te deja ver qué prompts funcionan y cuáles no, y demuestra (a un cliente, a tu docente o a ti en seis meses) qué parte del trabajo es tuya.

Cómo se valora

Cuatro aspectos, con el mismo peso.

AspectoConseguidoEn caminoPor empezar
FuncionaFiltra bien con datos reales (mayúsculas y espacios), anuncia el resultado y no hay errores en la consolaFiltra, pero falla con algún dato o no anuncia el resultadoNo filtra o hay errores
Accesible y seguroBotones nativos con aria-pressed, todo con teclado, foco visible, sin innerHTML con datosFalla una de esas cosasFallan varias
ComprobadoPruebas de normalizar() y filtrar() con límites, que avisan si rompes el códigoPruebas solo del caso normalSin pruebas
DocumentadoAGENTS.md, diario con al menos tres entradas, README con créditos, uso de IA y licenciaFalta una de las tres piezasFaltan varias

Y una comprobación final, sin IA: abre filtrar() y explica en voz alta qué hace cada línea. Si alguna no puedes explicarla, vuelve a la fase 2 con ella.

🏁 Retos

Reto Reto 1: el filtro de proyectos Completa normalizar(), filtrar() y los eventos de los botones. Pruébalo con ratón y con teclado en la vista previa.
⌄
Reto Reto 2: la primera entrada de tu diario de prompts Escribe la entrada de la petición más importante que hiciste para el filtro.
⌄

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com