Bienvenida
Este módulo no introduce una nueva tecnología. Su propósito es demostrar que puedes combinar lo aprendido para resolver un problema completo.
Durante el curso construiste:
- interfaces semánticas con HTML;
- diseños adaptables con CSS;
- comportamiento con JavaScript;
- componentes e interacción con React;
- rutas, layouts y páginas con Next.js;
- estilos con Tailwind CSS;
- historial y publicación con Git, GitHub y Vercel;
- un proceso profesional de desarrollo asistido por inteligencia artificial.
Ahora reunirás esas capacidades en una aplicación propia.
Problema real
↓
Alcance y requisitos
↓
Diseño de la experiencia
↓
Arquitectura
↓
Implementación
↓
Pruebas y revisión
↓
Publicación
↓
Defensa técnicaEl proyecto final no consiste en seguir un tutorial paso a paso. Recibirás requisitos, restricciones, ejemplos y criterios de evaluación, pero las decisiones concretas serán tuyas.
No se evaluará cuántas líneas escribiste ni qué herramienta produjo cada fragmento. Se evaluará si:
- la aplicación resuelve un problema comprensible;
- las funciones principales operan;
- la arquitectura tiene sentido;
- puedes explicar el código;
- utilizaste IA con criterio;
- comprobaste el resultado;
- el proyecto está disponible públicamente.
Principio del proyecto final: una aplicación profesional no es la que contiene más funciones, sino la que cumple con claridad un alcance útil, estable y verificable.
Objetivos del Proyecto Final
Al completar este proyecto demostrarás que puedes:
- Elegir un problema apropiado para una aplicación web.
- Definir un usuario y una necesidad concreta.
- Reducir una idea amplia a un producto mínimo viable.
- Redactar requisitos y criterios de aceptación.
- Organizar contenido, rutas y componentes.
- Crear una aplicación con Next.js App Router.
- Mantener componentes de servidor por defecto.
- Utilizar componentes de cliente solamente donde exista interacción.
- Crear rutas estáticas y dinámicas.
- Representar colecciones de datos.
- Implementar búsqueda, filtros y estados vacíos.
- Mantener estado de React sin mutación.
- Crear valores derivados.
- Persistir una preferencia mediante
localStorage. - Diseñar un formulario controlado y validarlo.
- Utilizar Tailwind CSS con enfoque móvil primero.
- Construir navegación semántica y accesible.
- Optimizar imágenes y metadatos.
- Manejar contenido inexistente.
- Probar funciones nuevas y regresiones.
- Diagnosticar errores a partir de evidencias.
- Trabajar mediante ramas y commits significativos.
- Utilizar inteligencia artificial como acelerador.
- Rechazar o modificar sugerencias incorrectas.
- Documentar la aplicación en GitHub.
- Revisar una vista previa antes de producción.
- Publicar en Vercel.
- Presentar y defender decisiones técnicas.
El desafío
Construye una aplicación web moderna que ayude a una persona a explorar una colección, consultar detalles y tomar una decisión.
La colección puede estar formada por:
- cursos;
- eventos;
- experiencias turísticas;
- servicios profesionales;
- recursos educativos;
- actividades culturales;
- libros;
- proyectos comunitarios;
- espacios de trabajo;
- rutas de aprendizaje;
- oportunidades de voluntariado;
- otra propuesta aprobada que pueda resolverse dentro del alcance.
La aplicación debe tener datos propios, varias páginas, una experiencia interactiva y una función personal persistente.
Fórmula del proyecto
Colección
+
Búsqueda y filtros
+
Detalles dinámicos
+
Espacio personal
+
Formulario validado
+
Diseño accesible
+
Publicación
=
Proyecto Final IntegradorLo que no es este proyecto
No es:
- una página estática de una sola pantalla;
- un clon visual sin problema definido;
- una aplicación generada completa en un solo prompt;
- un sistema con autenticación;
- una tienda con pagos reales;
- una red social;
- una aplicación con base de datos;
- una integración con una API privada;
- un proyecto que necesita un servidor propio;
- una demostración de una biblioteca de componentes;
- una colección de efectos visuales sin utilidad;
- una versión idéntica del portal construido durante el curso.
Puedes continuar con COA, pero deberás agregar una experiencia final distinta y demostrar decisiones propias.
Opciones de proyecto
Elige una opción. Todas se evalúan con la misma rúbrica.
Opción A. Planificador de rutas de aprendizaje COA
Amplía el portal COA con una experiencia para:
- explorar cursos;
- filtrar por categoría, nivel o duración;
- consultar detalles;
- seleccionar cursos;
- construir una ruta ordenada;
- calcular duración total;
- eliminar o reordenar decisiones mediante controles sencillos;
- completar un formulario simulado de interés.
Rutas posibles:
/
├── /cursos
│ └── /cursos/[slug]
├── /mi-ruta
├── /metodologia
└── /contactoNo basta con entregar el portal del Módulo 5. La ruta personal, sus reglas, sus estados y el formulario deben constituir una experiencia nueva.
Opción B. Explorador de experiencias y creador de itinerario
Construye una aplicación para:
- explorar lugares o experiencias;
- filtrar por región, tipo y duración;
- consultar detalles;
- agregar experiencias a un itinerario;
- calcular duración o costo estimado;
- limitar el itinerario mediante una regla documentada;
- completar un formulario simulado de consulta.
Rutas posibles:
/
├── /experiencias
│ └── /experiencias/[slug]
├── /mi-itinerario
├── /acerca
└── /consultaNo utilices reservas, pagos ni datos reales.
Opción C. Agenda de eventos
Construye una aplicación para:
- explorar eventos;
- buscar por nombre;
- filtrar por categoría, fecha o modalidad;
- consultar detalles;
- guardar eventos en una agenda personal;
- detectar o explicar un límite sencillo;
- mostrar un resumen;
- completar una inscripción simulada.
Rutas posibles:
/
├── /eventos
│ └── /eventos/[slug]
├── /mi-agenda
├── /organizacion
└── /inscripcionLa inscripción no debe enviar datos a ningún servicio.
Opción D. Catálogo de servicios y creador de solicitud
Construye una aplicación para:
- explorar servicios;
- filtrar por categoría, modalidad o precio;
- consultar detalles;
- seleccionar servicios;
- obtener un resumen o estimación;
- quitar y limpiar selecciones;
- completar un formulario simulado de solicitud.
Rutas posibles:
/
├── /servicios
│ └── /servicios/[slug]
├── /mi-solicitud
├── /proceso
└── /contactoLa estimación debe identificarse como demostrativa. No implementes cobros.
Opción E. Propuesta propia
Puedes proponer otro tema si cumple estas condiciones:
- existe una colección de al menos ocho elementos;
- cada elemento tiene una página de detalle;
- existe una decisión o selección personal;
- la selección produce un resumen útil;
- existe un formulario relacionado con el problema;
- no requiere autenticación, base de datos ni API privada;
- puede completarse con las tecnologías del curso;
- cumple todos los requisitos comunes.
La originalidad del tema no otorga puntos adicionales. Elige un problema que puedas terminar y explicar.
Requisitos comunes obligatorios
Problema y usuario
El proyecto debe definir:
- nombre de la aplicación;
- problema;
- usuario principal;
- necesidad;
- solución propuesta;
- límite del producto;
- resultado esperado.
Ejemplo:
Nombre:
Ruta COA
Usuario:
Persona que desea comenzar una formación tecnológica.
Problema:
Encuentra varios cursos, pero no sabe en qué orden estudiarlos
ni cuánto tiempo requiere completar su selección.
Solución:
Explorador con detalles y una ruta personal que calcula
la duración total y conserva la selección.
Fuera del alcance:
Matrícula real, pagos, cuentas y seguimiento académico.Datos
La colección debe contener al menos ocho elementos.
Cada elemento debe incluir:
{
id: "item-01",
slug: "identificador-legible",
title: "Nombre visible",
category: "Categoría",
summary: "Descripción breve",
description: "Descripción completa",
image: "/images/example.webp",
// tres o más propiedades específicas del proyecto
}Requisitos:
- identificadores únicos;
- slugs únicos;
- contenido realista;
- categorías coherentes;
- imágenes propias, libres o correctamente acreditadas;
- datos almacenados en un módulo separado;
- ninguna credencial;
- ningún dato personal real;
- ningún texto de relleno.
Rutas
La aplicación debe tener como mínimo:
| Ruta | Responsabilidad |
|---|---|
/ | Presentar el producto y conducir a la acción principal |
| Ruta de colección | Mostrar búsqueda, filtros y resultados |
Ruta dinámica [slug] | Mostrar el detalle de un elemento |
| Ruta de espacio personal | Mostrar selección, resumen y acciones |
| Ruta informativa | Explicar organización, metodología o proceso |
| Ruta de formulario | Recoger una solicitud simulada |
| Ruta inexistente | Mostrar una página 404 útil |
La ruta de formulario puede integrarse en el espacio personal si la experiencia continúa siendo clara.
Página de inicio
Debe incluir:
- un único
h1; - nombre y propuesta de valor;
- explicación breve del problema;
- llamada a la acción;
- al menos tres elementos destacados;
- enlace a la colección;
- contenido real;
- metadatos específicos.
No llenes la página con secciones repetidas para hacerla parecer extensa.
Colección
Debe permitir:
- ver todos los elementos;
- buscar por al menos dos campos;
- filtrar por al menos dos criterios;
- combinar búsqueda y filtros;
- conocer la cantidad de resultados;
- limpiar los controles;
- reconocer un estado vacío;
- abrir detalles;
- agregar o quitar elementos del espacio personal.
Los filtros deben resolver el problema del proyecto. No agregues un filtro que siempre produce el mismo resultado.
Detalles dinámicos
Cada detalle debe:
- obtener el elemento mediante el slug;
- utilizar App Router;
- leer
paramscon la forma vigente; - utilizar
notFound()cuando no existe; - mostrar información suficiente;
- utilizar al menos una imagen optimizada;
- enlazar hacia la colección;
- permitir una acción personal;
- generar título y descripción propios;
- funcionar mediante acceso directo y recarga.
Debe existir generateStaticParams cuando los datos sean locales y conocidos durante la construcción.
Espacio personal
El nombre depende del proyecto:
- mi ruta;
- mi agenda;
- mi itinerario;
- mi solicitud;
- mi selección.
Debe:
- guardar identificadores estables;
- impedir duplicados;
- permitir quitar un elemento;
- permitir limpiar;
- persistir mediante
localStorage; - restaurar la información al recargar;
- obtener elementos completos como valor derivado;
- mostrar un resumen;
- tener al menos una regla o límite;
- explicar estados vacío, parcial, completo y límite;
- funcionar con teclado.
Ejemplos de resumen:
- duración total;
- costo estimado;
- cantidad por categoría;
- número de actividades;
- modalidad;
- nivel de avance.
No almacenes dos copias de la misma información.
Datos originales + identificadores guardados
↓
selección derivada
↓
resumenFormulario controlado
El formulario debe incluir:
- al menos tres campos;
- etiquetas visibles;
- un campo requerido;
- validación propia;
- mensajes de error;
- estado de envío simulado;
- confirmación útil;
- botón con tipo correcto;
- funcionamiento mediante teclado;
- prevención del envío si existen errores.
El formulario no debe transmitir datos.
Incluye una indicación visible:
Formulario demostrativo. La información no será enviada.
Utiliza datos ficticios durante las pruebas.
React
La aplicación debe demostrar:
- componentes reutilizables;
- propiedades;
- estado;
- eventos;
- renderizado condicional;
- listas con claves estables;
- formulario controlado;
- actualización inmutable;
- valores derivados;
- efectos solamente cuando se sincroniza con un sistema externo;
- persistencia en
localStorage.
No utilices:
- manipulación directa del DOM;
- índices como claves permanentes;
- mutación del estado;
- efectos para calcular valores que pueden derivarse;
- estado duplicado;
- componentes gigantes sin responsabilidad clara.
Next.js
Debe utilizar:
- proyecto actual de Next.js;
- App Router;
- JavaScript;
page.js;layout.js;Link;- ruta dinámica;
- componentes de servidor por defecto;
- fronteras de cliente limitadas;
not-found.js;loading.jsdonde aporte valor;- API de metadatos;
next/image;- construcción de producción.
No utilices:
- Pages Router;
- carpeta
pages; getServerSideProps;getStaticProps;- React Router;
- todo el sitio como componente de cliente.
Tailwind CSS
Debe demostrar:
- enfoque móvil primero;
- escala consistente de espacios;
- jerarquía tipográfica;
- colores coherentes;
- estados
hoveryfocus; - diseño adaptable;
- grillas o Flexbox cuando corresponda;
- componentes visualmente relacionados;
- estado vacío;
- mensajes de error y confirmación;
- diseño desde 320 píxeles.
No construyas clases mediante fragmentos como:
className={`bg-${color}-600`}Utiliza nombres completos que puedan detectarse durante la construcción.
Accesibilidad
Requisitos mínimos:
<html lang="es">;- encabezados en orden lógico;
- un
h1por página; - navegación semántica;
- enlaces para navegación;
- botones para acciones;
- campos con etiquetas;
- texto alternativo correcto;
- controles con nombre accesible;
- foco visible;
- orden de tabulación lógico;
- ausencia de trampas de teclado;
- contraste suficiente;
- información no dependiente solamente del color;
- mensajes comprensibles;
- zoom sin pérdida esencial;
- interfaz utilizable a 320 píxeles.
Una puntuación automática no sustituye la prueba manual.
Estados de la experiencia
La aplicación debe representar:
- carga cuando corresponda;
- colección completa;
- resultados filtrados;
- búsqueda sin resultados;
- espacio personal vacío;
- espacio personal con elementos;
- límite alcanzado;
- formulario con errores;
- formulario confirmado;
- elemento inexistente;
- ruta inexistente.
Una interfaz profesional explica qué ocurre y qué puede hacer el usuario.
Imágenes
- Utiliza
Imagepara imágenes de contenido. - Incluye dimensiones o una estrategia de tamaño apropiada.
- Evita deformación.
- Utiliza texto alternativo que describa propósito.
- Usa texto alternativo vacío para imágenes puramente decorativas.
- No marques todas las imágenes como prioritarias.
- Comprime los archivos.
- Documenta procedencia y licencia cuando no sean propias.
Metadatos
- Título base y plantilla.
- Descripción general.
- Títulos diferentes por ruta.
- Descripciones específicas.
- Metadatos dinámicos en los detalles.
- Título útil para página inexistente cuando corresponda.
No repitas la misma descripción en todas las páginas.
Calidad del código
- Nombres claros.
- Responsabilidades identificables.
- Datos separados de la interfaz.
- Componentes organizados por función.
- Sin código muerto.
- Sin registros de depuración en producción.
- Sin comentarios que contradigan el código.
- Sin dependencias innecesarias.
- Sin advertencias evitables.
- ESLint correcto.
- Construcción correcta.
Git y GitHub
- Repositorio disponible.
- Rama principal estable.
- Al menos una rama de trabajo.
- Mínimo diez commits significativos.
- Mensajes claros.
- Sin
node_modules. - Sin
.env. - README completo.
- Historial que muestre etapas.
- Enlace público de producción.
Vercel
- Vista previa de una rama.
- Pruebas en vista previa.
- Producción desplegada.
- Dirección pública funcional.
- Rutas directas comprobadas.
- Recargas comprobadas.
- Sin errores activos.
- Versión de producción identificable.
Uso profesional de inteligencia artificial
Debes utilizar ChatGPT, Claude o GitHub Copilot durante el proyecto.
La IA debe apoyar al menos seis tareas:
- Revisión del alcance.
- Revisión de arquitectura.
- Implementación acotada.
- Diagnóstico de un problema real.
- Revisión de código o accesibilidad.
- Apoyo para documentación basada en hechos.
Debes:
- escribir primero tu problema y criterios;
- entregar contexto seguro;
- dividir las solicitudes;
- revisar los cambios;
- comprobar el código;
- registrar decisiones;
- modificar o rechazar al menos dos propuestas;
- identificar al menos una limitación de la herramienta.
No debes:
- solicitar la aplicación completa;
- entregar código que no entiendes;
- inventar pruebas;
- publicar conversaciones con datos privados;
- compartir credenciales;
- aceptar una dependencia sin justificarla;
- usar IA como sustituto de la defensa técnica.
Restricciones generales
El proyecto final no debe incluir:
- TypeScript;
- Redux;
- Bootstrap;
- jQuery;
- PHP;
- base de datos;
- autenticación;
- pagos;
- panel administrativo;
- correo real;
- API de inteligencia artificial;
- APIs privadas;
- secretos;
- bibliotecas de componentes;
- configuraciones avanzadas de Next.js;
- animaciones que bloqueen la interacción;
- funciones fuera de los contenidos del curso.
Si una idea requiere alguna de estas tecnologías, reduce el alcance.
Distribución de las 6 horas y 30 minutos
| Fase | Tiempo aproximado |
|---|---|
| 1. Selección del problema y alcance | 30 minutos |
| 2. Requisitos, contenido y experiencia | 35 minutos |
| 3. Arquitectura y preparación | 30 minutos |
| 4. Rutas, datos e interfaz principal | 110 minutos |
| 5. Interacción, persistencia y formulario | 65 minutos |
| 6. Accesibilidad, pruebas y correcciones | 40 minutos |
| 7. Documentación, vista previa y producción | 45 minutos |
| 8. Verificación final y defensa | 35 minutos |
| Total | 6 horas y 30 minutos |
El tiempo comienza cuando ya tienes instaladas las herramientas utilizadas durante el curso. Si necesitas más tiempo para corregir, prioriza completar el núcleo antes de agregar mejoras.
Fase 1. Selección del problema y alcance
1 Redacta el resumen del producto
Completa:
NOMBRE:
USUARIO:
PROBLEMA:
SOLUCIÓN:
ACCIÓN PRINCIPAL:
COLECCIÓN:
ESPACIO PERSONAL:
RESUMEN QUE GENERA:
FORMULARIO:
FUERA DEL ALCANCE:2 Define el producto mínimo viable
Clasifica ideas:
| Esencial | Deseable | Fuera del alcance |
|---|---|---|
| Necesario para resolver el problema | Mejora si queda tiempo | No se construirá |
Ejemplo:
| Esencial | Deseable | Fuera del alcance |
|---|---|---|
| Buscar cursos | Ordenar selección | Cuentas de usuario |
| Filtrar por nivel | Compartir por texto | Pagos |
| Abrir detalles | Tema oscuro | Certificados automáticos |
| Crear ruta | Pequeña animación | Base de datos |
Todo elemento “deseable” puede eliminarse sin invalidar el proyecto.
3 Historias de usuario
Escribe al menos cinco:
Como [tipo de usuario],
quiero [acción],
para [beneficio].Ejemplo:
Como persona que inicia en tecnología,
quiero filtrar cursos por nivel,
para evitar opciones que todavía no corresponden a mi experiencia.4 Criterios de aceptación
Escribe al menos doce.
Utiliza:
Dado [estado],
cuando [acción],
entonces [resultado].Ejemplo:
Dado que existen tres elementos en mi ruta,
cuando intento agregar un cuarto que supera el límite definido,
entonces la selección se conserva y aparece una explicación.5 Revisión asistida
Después de redactar el alcance, pide a una IA:
Revisa este alcance para una aplicación final de 6 horas y 30 minutos.
No agregues funciones.
Identifica:
- requisito ambiguo;
- función demasiado grande;
- caso límite ausente;
- parte que requiere una tecnología fuera del curso;
- criterio difícil de comprobar.
Propón solamente reducciones o aclaraciones.
[alcance]La decisión final es tuya. Registra qué aceptaste y qué rechazaste.
Salida de la fase
- resumen del producto;
- tabla de alcance;
- cinco historias;
- doce criterios;
- primera interacción de IA;
- lista de datos necesarios.
Fase 2. Requisitos, contenido y experiencia
1 Mapa de rutas
Dibuja:
/
├── /coleccion
│ └── /coleccion/[slug]
├── /mi-seleccion
├── /informacion
└── /formularioReemplaza los nombres según el proyecto.
Para cada ruta anota:
| Ruta | Objetivo | Contenido | Interacción | Servidor o cliente |
|---|
La página puede ser de servidor y contener una isla de cliente.
2 Inventario de contenido
Prepara antes de diseñar:
- nombre;
- logotipo textual si corresponde;
- propuesta de valor;
- textos de navegación;
- ocho elementos;
- categorías;
- descripciones;
- imágenes;
- mensajes vacíos;
- mensajes de límite;
- errores del formulario;
- confirmación;
- texto de la página informativa.
No diseñes alrededor de Lorem ipsum.
3 Flujos principales
Dibuja tres flujos.
Explorar
Inicio
↓
Colección
↓
Búsqueda o filtro
↓
DetalleDecidir
Tarjeta o detalle
↓
Agregar
↓
Espacio personal
↓
ResumenSolicitar
Espacio personal
↓
Formulario
↓
Validación
↓
Confirmación simulada4 Bocetos
Crea bocetos sencillos para:
- inicio;
- colección;
- detalle;
- espacio personal;
- formulario;
- móvil.
Ejemplo:
┌────────────────────────────────────────────┐
│ Marca Inicio Explorar Mi selección │
├────────────────────────────────────────────┤
│ │
│ Título del producto │
│ Explicación breve [Explorar] │
│ │
├────────────────────────────────────────────┤
│ Destacados │
│ [Tarjeta] [Tarjeta] [Tarjeta] │
├────────────────────────────────────────────┤
│ Pie │
└────────────────────────────────────────────┘El boceto define jerarquía, no colores finales.
5 Matriz de estados
| Experiencia | Estado | Mensaje o interfaz |
|---|---|---|
| Colección | Sin filtros | Todos los resultados |
| Colección | Sin coincidencias | Explicación y limpiar |
| Selección | Vacía | Instrucción |
| Selección | Parcial | Resumen provisional |
| Selección | Límite | Explicación |
| Formulario | Error | Mensaje junto al campo |
| Formulario | Correcto | Confirmación |
| Detalle | Inexistente | Página 404 |
Salida de la fase
- mapa de rutas;
- inventario;
- tres flujos;
- seis bocetos;
- matriz de estados;
- datos completos.
Fase 3. Arquitectura y preparación
1 Árbol sugerido
src/
├── app/
│ ├── coleccion/
│ │ ├── [slug]/
│ │ │ └── page.js
│ │ ├── loading.js
│ │ └── page.js
│ ├── mi-seleccion/
│ │ └── page.js
│ ├── informacion/
│ │ └── page.js
│ ├── formulario/
│ │ └── page.js
│ ├── globals.css
│ ├── layout.js
│ ├── not-found.js
│ └── page.js
├── components/
│ ├── collection/
│ ├── layout/
│ ├── selection/
│ └── ui/
├── data/
│ └── items.js
└── lib/
└── helpers.jsNo crees carpetas vacías ni una abstracción que no utilices.
2 Clasificación servidor-cliente
Ejemplo:
RootLayout — servidor
├── SiteHeader — servidor
├── HomePage — servidor
├── CollectionPage — servidor
│ └── CollectionExplorer — cliente
├── DetailPage — servidor
│ └── PersonalAction — cliente
├── PersonalPage — servidor
│ └── PersonalWorkspace — cliente
├── InformationPage — servidor
└── FormPage — servidor
└── RequestForm — clienteUna página de servidor puede importar un componente de cliente y entregarle datos serializables.
3 Flujo de datos
items.js
│
├──► páginas de servidor
│ ├── destacados
│ └── detalles
│
└──► componentes de cliente
├── búsqueda
├── filtros
└── selección
localStorage
│
└──► identificadores personales
│
└──► elementos derivados4 Preparación del repositorio
- Crea o prepara el proyecto.
- Confirma App Router, JavaScript y Tailwind.
- Inicializa Git.
- Crea el repositorio.
- Realiza una construcción inicial.
- Crea la rama:
git switch -c feature/final-project- Agrega:
docs/
├── PROJECT_BRIEF.md
├── TEST_PLAN.md
└── AI_LOG.md5 Revisión de arquitectura con IA
Solicita:
Revisa esta arquitectura para Next.js App Router.
El proyecto utiliza JavaScript, Tailwind y datos locales.
No escribas código.
No agregues dependencias.
Comprueba:
- responsabilidad de rutas;
- frontera servidor-cliente;
- ubicación del estado;
- valores derivados;
- persistencia;
- riesgo de duplicación;
- funciones fuera del alcance.
[árbol, flujo y requisitos]Registra tu decisión.
Salida de la fase
- árbol;
- clasificación;
- flujo;
- repositorio;
- rama;
- construcción inicial;
- documentos;
- segunda interacción de IA.
Fase 4. Rutas, datos e interfaz principal
1 Construye en vertical
No crees primero todas las páginas vacías.
Completa una experiencia:
Datos
↓
Colección
↓
Detalle
↓
Navegación
↓
PruebaDespués agrega el espacio personal.
2 Orden recomendado
- Datos y utilidades.
- Layout, encabezado y pie.
- Inicio.
- Colección sin interacción.
- Detalle dinámico.
- Página informativa.
- Página 404.
- Metadatos.
- Imágenes.
- Búsqueda y filtros.
Antes de agregar persistencia, confirma:
- todas las rutas abren;
- la navegación utiliza
Link; - los detalles corresponden al slug;
- un slug inventado muestra 404;
- la recarga funciona;
- existe contenido real;
- la estructura semántica es correcta.
4 Implementación asistida limitada
La tercera interacción de IA puede utilizarse para una unidad:
Crea solamente [nombre del componente].
Contexto:
[proyecto y arquitectura]
Entrada:
[propiedades]
Criterios:
[lista]
Restricciones:
- JavaScript;
- sin dependencias;
- no modificar otros archivos;
- HTML semántico;
- Tailwind móvil primero;
- explicar supuestos.
Devuelve:
1. componente;
2. explicación;
3. riesgos;
4. pruebas.Debes revisar:
- importaciones;
- nombres;
- propiedades;
- APIs;
- Tailwind;
- accesibilidad;
- alcance;
- pruebas.
Punto de control 1. Esqueleto funcional
No continúes hasta comprobar:
- Inicio completo.
- Colección visible.
- Ocho elementos.
- Detalles dinámicos.
- Navegación.
- Página informativa.
- 404.
- Metadatos básicos.
- Diseño móvil básico.
- Construcción correcta.
Fase 5. Interacción, persistencia y formulario
1 Búsqueda y filtros
El estado mínimo puede contener:
const [query, setQuery] = useState("");
const [category, setCategory] = useState("all");
const [secondaryFilter, setSecondaryFilter] = useState("all");Los resultados deben derivarse:
items
↓ búsqueda
↓ categoría
↓ segundo filtro
visibleItemsNo guardes visibleItems como estado si se puede calcular.
2 Selección personal
Guarda identificadores:
const [selectedSlugs, setSelectedSlugs] = useState([]);Deriva:
const selectedItems = items.filter((item) =>
selectedSlugs.includes(item.slug)
);La actualización debe:
- evitar duplicados;
- no mutar;
- respetar límite;
- permitir quitar;
- utilizar el estado anterior cuando corresponda.
3 Persistencia
Sincroniza con localStorage solamente en cliente.
Decide:
- nombre de la clave;
- formato;
- valor por defecto;
- manejo de datos inválidos;
- momento de lectura;
- momento de escritura.
No guardes información personal del formulario.
4 Resumen
Ejemplos:
const totalDuration = selectedItems.reduce(
(total, item) => total + item.durationHours,
0
);El resumen debe ser:
- correcto;
- derivado;
- comprensible;
- útil para decidir;
- visible en móvil;
- actualizado al quitar.
5 Formulario
Flujo:
Datos iniciales
↓
Escritura
↓
Validación
├── errores → corregir
└── correcto
↓
confirmación simuladaNo utilices alertas como única confirmación.
6 Diagnóstico asistido
Registra un problema real.
Solicitud:
No propongas una corrección todavía.
Analiza:
- comportamiento esperado;
- comportamiento actual;
- pasos;
- error exacto;
- código mínimo;
- cambio reciente.
Devuelve tres hipótesis ordenadas, evidencia y experimento mínimo.
[información]Confirma la causa antes de pedir la corrección.
Esta será la cuarta interacción obligatoria.
Punto de control 2. Funciones completas
- Búsqueda.
- Dos filtros.
- Combinación de controles.
- Estado vacío.
- Selección estable.
- Persistencia.
- Regla o límite.
- Resumen.
- Formulario.
- Validación.
- Confirmación.
- Diagnóstico registrado.
- Funciones anteriores intactas.
Fase 6. Accesibilidad, pruebas y correcciones
1 No pruebes solamente el camino feliz
Prueba:
- primera visita;
- recarga;
- búsqueda parcial;
- mayúsculas y minúsculas;
- filtros combinados;
- cero resultados;
- selección repetida;
- límite;
- eliminación;
- limpieza;
- datos persistidos;
- formulario vacío;
- formulario inválido;
- formulario correcto;
- slug inexistente;
- ruta inexistente;
- teclado;
- móvil;
- construcción;
- producción.
2 Plan de pruebas
Crea docs/TEST_PLAN.md.
| ID | Área | Estado inicial | Acción | Resultado esperado | Resultado | Evidencia |
|---|---|---|---|---|---|---|
| NAV-01 | Navegación | Inicio | Abrir colección | Carga sin recarga completa | ||
| COL-01 | Búsqueda | Colección | Escribir coincidencia | Filtra resultados | ||
| PER-01 | Persistencia | Un elemento | Recargar | Conserva selección | ||
| FOR-01 | Formulario | Vacío | Enviar | Muestra errores |
Incluye al menos veinte casos.
3 Matriz mínima
Navegación
| ID | Caso |
|---|---|
| NAV-01 | Inicio a colección |
| NAV-02 | Colección a detalle |
| NAV-03 | Detalle a colección |
| NAV-04 | Acceso directo a detalle |
| NAV-05 | Ruta inexistente |
Colección
| ID | Caso |
|---|---|
| COL-01 | Búsqueda válida |
| COL-02 | Búsqueda sin resultados |
| COL-03 | Primer filtro |
| COL-04 | Segundo filtro |
| COL-05 | Combinación |
| COL-06 | Limpiar |
Espacio personal
| ID | Caso |
|---|---|
| PER-01 | Agregar |
| PER-02 | Evitar duplicado |
| PER-03 | Quitar |
| PER-04 | Limpiar |
| PER-05 | Límite |
| PER-06 | Recargar |
| PER-07 | Resumen |
Formulario
| ID | Caso |
|---|---|
| FOR-01 | Vacío |
| FOR-02 | Dato inválido |
| FOR-03 | Corregir error |
| FOR-04 | Confirmar |
Calidad
| ID | Caso |
|---|---|
| QUA-01 | Teclado |
| QUA-02 | 320 px |
| QUA-03 | Consola |
| QUA-04 | ESLint |
| QUA-05 | Build |
4 Prueba de teclado
Sin utilizar el mouse:
- recorre la navegación;
- abre la colección;
- escribe una búsqueda;
- cambia filtros;
- abre un detalle;
- agrega un elemento;
- abre el espacio personal;
- quita un elemento;
- completa el formulario;
- corrige un error;
- envía la demostración.
Comprueba:
- foco visible;
- orden lógico;
- ausencia de trampas;
- botones activables;
- enlaces correctos;
- mensajes comprensibles.
5 Revisión adaptable
Prueba:
- 320 px;
- 375 px;
- 768 px;
- 1024 px;
- escritorio amplio.
Revisa:
- desbordamiento;
- texto cortado;
- controles pequeños;
- tablas imposibles de leer;
- imágenes deformadas;
- navegación;
- formularios;
- tarjetas;
- resumen.
6 Revisión automática
Puedes utilizar Lighthouse como apoyo para:
- accesibilidad;
- prácticas recomendadas;
- rendimiento;
- SEO.
No es obligatorio alcanzar 100. Debes:
- registrar resultados;
- investigar los hallazgos;
- corregir los relacionados con el alcance;
- explicar los que no correspondan;
- combinar la revisión con pruebas manuales.
7 Revisión asistida por IA
Entrega un diff o archivos concretos, no todo el proyecto sin necesidad.
Revisa estos archivos.
No los reescribas completos.
Categorías:
- funcionalidad;
- React;
- Next.js;
- accesibilidad;
- Tailwind;
- privacidad;
- mantenibilidad.
Para cada hallazgo:
- gravedad;
- evidencia;
- impacto;
- corrección mínima;
- prueba.
No inventes hallazgos para llenar una cuota.
[archivos]Esta será la quinta interacción obligatoria.
Verifica cada observación. Corrige al menos tres hallazgos reales del proceso completo, incluyendo uno de accesibilidad o experiencia.
Punto de control 3. Candidato a publicación
- Veinte pruebas registradas.
- Prueba de teclado.
- Prueba a 320 px.
- ESLint.
- Build.
- Consola limpia.
- Revisión asistida.
- Tres correcciones verificadas.
- Sin secretos.
- Sin dependencias innecesarias.
Fase 7. Documentación, vista previa y producción
1 README obligatorio
El README.md debe incluir:
Nombre del proyecto
Descripción
Problema que resuelve
Funciones principales
Tecnologías
Rutas
Arquitectura
Instalación local
Comandos
Pruebas
Uso de inteligencia artificial
Decisiones técnicas
Limitaciones
Enlaces
Autor
No agregues insignias, estadísticas o decoración que no ayude a comprender el proyecto.2 Instrucciones locales
Incluye comandos reales:
npm install
npm run dev
npm run lint
npm run build
npm startConfirma que coincidan con package.json.
3 Arquitectura documentada
Incluye:
Datos locales
├── páginas de servidor
└── islas de cliente
├── explorador
├── selección
└── formulario
localStorage
└── identificadores personalesExplica:
- por qué una parte es cliente;
- por qué otra permanece en servidor;
- dónde vive el estado;
- qué se deriva;
- cómo se verifica.
4 Documentación asistida
La sexta interacción puede ayudar a redactar:
Redacta una sección de README utilizando solamente estos hechos.
No inventes funciones, pruebas, comandos ni resultados.
[hechos verificados]Revisa cada afirmación.
5 Bitácora final de IA
docs/AI_LOG.md:
| ID | Objetivo | Herramienta | Contexto | Propuesta | Decisión | Verificación | Commit |
|---|---|---|---|---|---|---|---|
| IA-01 | Alcance | ||||||
| IA-02 | Arquitectura | ||||||
| IA-03 | Implementación | ||||||
| IA-04 | Diagnóstico | ||||||
| IA-05 | Revisión | ||||||
| IA-06 | Documentación |
Incluye al menos:
- dos propuestas aceptadas;
- dos modificadas o rechazadas;
- una limitación;
- una decisión tomada sin IA.
6 Historial sugerido
chore: initialize final project
docs: define project scope and acceptance criteria
feat: add application layout and navigation
feat: add collection data and cards
feat: add dynamic detail routes
feat: add search and filters
feat: add personal selection
feat: persist personal selection
feat: add validated demonstration form
style: complete responsive accessible interface
fix: resolve verified interaction issue
test: document final test matrix
docs: complete README and AI logNo copies exactamente los mensajes si no describen tus cambios.
7 Vista previa
Antes de producción:
- sube la rama;
- abre la vista previa de Vercel;
- prueba rutas directas;
- recarga detalles;
- prueba persistencia;
- prueba teclado;
- prueba móvil;
- revisa consola;
- comprueba metadatos;
- registra la URL.
8 Producción
Después de aprobar la vista previa:
- integra la rama;
- espera el despliegue;
- repite las pruebas críticas;
- confirma que la URL pública funciona;
- actualiza el README;
- crea una etiqueta opcional:
git tag v1.0.0No cambies la aplicación después de registrar las evidencias sin volver a probar.
Fase 8. Verificación final y defensa
1 Lista de verificación técnica
Producto
- Problema definido.
- Usuario definido.
- Alcance realista.
- Ocho elementos.
- Contenido propio.
- Acción principal clara.
HTML y accesibilidad
- HTML semántico.
- Un
h1por página. - Encabezados lógicos.
- Enlaces y botones correctos.
- Etiquetas en formularios.
- Texto alternativo.
- Foco visible.
- Teclado completo.
- Contraste.
- Idioma.
React
- Componentes reutilizables.
- Propiedades claras.
- Estado mínimo.
- Actualización inmutable.
- Valores derivados.
- Listas con claves.
- Estados condicionales.
- Formulario controlado.
- Persistencia.
Next.js
- App Router.
- Layout.
- Páginas.
- Rutas dinámicas.
Link.- Componentes de servidor.
- Fronteras de cliente.
notFound().not-found.js.loading.js.- Metadatos.
Image.
Tailwind
- Móvil primero.
- 320 px.
- Espaciado consistente.
- Tipografía.
- Estados de interacción.
- Sin clases dinámicas incompletas.
Calidad
- Sin errores de consola.
- Sin código muerto.
- Sin secretos.
- Sin dependencias innecesarias.
- ESLint correcto.
- Build correcto.
- Veinte pruebas.
- Tres correcciones.
Proceso
- Rama.
- Diez commits.
- README.
- Brief.
- Plan de pruebas.
- Bitácora de IA.
- Vista previa.
- Producción.
2 Demostración
Prepara una demostración de 7 a 10 minutos.
Orden recomendado:
0:00 — problema y usuario
1:00 — mapa de la aplicación
2:00 — colección, búsqueda y filtros
3:30 — detalle dinámico
4:30 — espacio personal y persistencia
6:00 — formulario y estados
7:00 — móvil y teclado
8:00 — arquitectura y uso de IA
9:00 — pruebas, limitaciones y cierreNo leas el README completo. Demuestra.
3 Defensa técnica
Debes poder responder:
Producto
- ¿Qué problema resuelve?
- ¿Qué decidiste dejar fuera?
- ¿Cuál es el camino principal?
React
- ¿Dónde vive el estado?
- ¿Qué valor se deriva?
- ¿Cómo evitas mutación y duplicados?
- ¿Por qué utilizaste un efecto?
Next.js
- ¿Cómo se crea una ruta?
- ¿Cómo funciona
[slug]? - ¿Qué componente es servidor?
- ¿Cuál necesita
"use client"y por qué?
Calidad
- ¿Qué error real diagnosticabas?
- ¿Qué prueba detectaría una regresión?
- ¿Qué problema de accesibilidad corregiste?
IA
- ¿Qué propuesta rechazaste?
- ¿Qué contexto produjo una respuesta útil?
- ¿Qué limitación detectaste?
- ¿Qué parte decidiste sin IA?
Si no puedes responder una pregunta, revisa el proyecto antes de la entrega.
Un único punto de entrega
Este módulo utiliza una sola entrega final.
No envíes cada fase por separado. Conserva las evidencias durante el desarrollo y reúne todo al terminar.
La entrega debe incluir:
- nombre completo;
- nombre del proyecto;
- opción elegida;
- descripción de 100 a 150 palabras;
- enlace al repositorio de GitHub;
- enlace a vista previa;
- enlace de producción;
- enlace o archivo de demostración;
- mapa de rutas;
- árbol de componentes;
- diagrama servidor-cliente;
- captura de inicio;
- captura de colección;
- captura de detalle;
- captura del espacio personal;
- captura del formulario;
- captura móvil a 320 o 375 píxeles;
PROJECT_BRIEF.md;TEST_PLAN.md;AI_LOG.md;- README;
- resultado de ESLint;
- resultado de construcción;
- tabla de veinte pruebas;
- evidencia de tres correcciones;
- reflexión final.
Nombre de archivos
Utiliza nombres claros:
apellido-nombre-proyecto-final/
├── 01-inicio.png
├── 02-coleccion.png
├── 03-detalle.png
├── 04-seleccion.png
├── 05-formulario.png
├── 06-movil.png
└── reflexion-final.pdf o reflexion-final.mdNo incluyas:
node_modules;- archivos
.env; - claves;
- conversaciones completas con información privada;
- duplicados innecesarios;
- un archivo comprimido si el repositorio y los documentos ya son accesibles.
Reflexión final
Escribe entre 400 y 600 palabras.
Responde:
- ¿Qué problema elegiste y por qué?
- ¿Cómo redujiste el alcance?
- ¿Cuál fue la decisión de arquitectura más importante?
- ¿Qué parte resultó más difícil?
- ¿Qué error diagnosticabas y cómo confirmaste su causa?
- ¿Qué propuesta de IA rechazaste o modificaste?
- ¿Cómo verificaste que el proyecto funciona?
- ¿Qué mejorarías en una segunda versión?
- ¿Qué puedes construir ahora que no podías construir al iniciar?
Entrega del Proyecto Final Integrador
Último paso del cursoCuando hayas completado, probado, documentado y publicado el proyecto, reúne todos los enlaces y evidencias en una sola entrega final.
La entrega debe incluir:
- Nombre completo
- Nombre del proyecto y opción elegida
- Descripción de 100 a 150 palabras
- Enlaces al repositorio, vista previa, producción y demostración
- Mapa de rutas, árbol de componentes y diagrama servidor-cliente
- Capturas solicitadas en escritorio y móvil
- PROJECT_BRIEF.md, TEST_PLAN.md, AI_LOG.md y README
- Resultados de ESLint y construcción
- Tabla de veinte pruebas y evidencia de tres correcciones
- Reflexión final de 400 a 600 palabras
Ejemplo de nombre: Juan Pérez - Desarrollo Web - Proyecto Final.pdf
Antes de enviar, verifica que el archivo tenga el nombre solicitado.
Rúbrica del Proyecto Final
Puntuación total: 100 puntos Puntuación mínima para aprobar: 70 puntos, sin incumplir un requisito crítico
| Criterio | Excelente | Satisfactorio | En proceso | Insuficiente | Puntos |
|---|---|---|---|---|---|
| Problema, alcance y contenido | Problema claro, alcance realista, contenido completo y criterios comprobables | Propósito claro con omisiones menores | Idea amplia o contenido incompleto | No existe problema ni alcance defendible | 10 |
| Funcionalidad | Colección, búsqueda, filtros, detalles, selección, persistencia, resumen y formulario funcionan en todos los estados | Núcleo completo con fallos menores | Varias funciones parciales | La experiencia principal no funciona | 20 |
| React y JavaScript | Estado mínimo, valores derivados, inmutabilidad, formularios y componentes bien resueltos | Implementación correcta con mejoras menores | Duplicación, efectos o componentes problemáticos | Mutación, DOM directo o código no comprendido | 15 |
| Next.js y arquitectura | App Router, rutas, servidor-cliente, metadatos, imágenes y estados especiales correctamente aplicados | Arquitectura sólida con detalles menores | Separación o rutas incompletas | Arquitectura incorrecta o sitio convertido completamente a cliente | 15 |
| Diseño y accesibilidad | Diseño coherente, móvil primero, teclado completo, foco, contraste y estados claros | Buena experiencia con detalles menores | Problemas adaptables o accesibles | Interfaz rota o inaccesible | 15 |
| Calidad y pruebas | Veinte casos, regresiones, tres correcciones, lint, build y producción verificados | Pruebas principales completas | Evidencia parcial o superficial | Sin pruebas o construcción fallida | 10 |
| Uso profesional de IA | Seis usos documentados, contexto seguro, dos rechazos o modificaciones y criterio demostrable | Uso razonado con documentación suficiente | Bitácora superficial o verificación incompleta | Copia total, resultados inventados o código no explicado | 10 |
| Git, documentación, despliegue y defensa | Historial claro, README completo, vista previa, producción y defensa precisa | Entrega completa con detalles menores | Historial, documentación o presentación incompletos | Sin trazabilidad, publicación o defensa | 5 |
| Total | 100 |
Requisitos críticos
El proyecto debe corregirse antes de aprobarse si:
- la URL pública no funciona;
npm run buildfalla;- no utiliza App Router;
- no existe ruta dinámica;
- no existe una colección de al menos ocho elementos;
- búsqueda y filtros no funcionan;
- el espacio personal no funciona;
- no existe persistencia;
- el formulario no valida;
- el proyecto depende de una tecnología fuera del curso;
- se publicaron credenciales o datos personales;
- existen errores activos que impiden la experiencia;
- la aplicación no puede utilizarse con teclado;
- falla a 320 píxeles;
- no existe repositorio;
- faltan pruebas;
- falta la bitácora de IA;
- el estudiante no puede explicar el código;
- el proyecto fue generado completo y copiado sin proceso verificable;
- no existe una demostración o defensa;
- la entrega presenta como reales funciones simuladas.
Proceso de corrección
Si el proyecto recibe observaciones:
- revisa cada criterio;
- corrige en una rama;
- registra commits;
- repite pruebas;
- actualiza la evidencia;
- publica una nueva vista previa;
- entrega la versión corregida.
No es necesario comenzar de nuevo salvo que la aplicación no corresponda al alcance del curso.
Videos recomendados
Los videos apoyan etapas concretas. No necesitas reproducir todos antes de empezar.
| Etapa | Video | Canal | Duración aproximada | Motivo |
|---|---|---|---|---|
| Alcance y MVP | ¿Cómo programar un software MVP? | Hdeleon Clips | 5 min | Explica de forma breve por qué conviene construir primero el núcleo útil. |
| Proceso de proyecto | Mi paso a paso para desarrollar proyectos de software | Fazt | 15 min | Presenta un flujo completo desde requisitos hasta publicación. |
| Accesibilidad y rendimiento | Analiza la accesibilidad y performance de tu web como un profesional | Programación en español | 32 min | Revisa WAVE, estructura, ARIA, Lighthouse y una aplicación de Next.js. |
| README | Crea tu primer README para un proyecto profesional | Dani Code | 14 min | Muestra cómo presentar propósito, uso y estructura en GitHub. |
| Despliegue | Cómo desplegar en Vercel proyectos de React y Next.js | CleanKoder | 10 min | Canal pequeño con un recorrido directo de GitHub y Vercel. |
| Presentación | Crea tu portafolio y consigue trabajo como programador | MoureDev TV | 10 min | Ayuda a pensar cómo mostrar proyectos y explicar su valor. |
Reproductores de video
¿Cómo programar un software MVP?
Mi paso a paso para desarrollar proyectos de software
Analiza la accesibilidad y performance de tu web como un profesional
Crea tu primer README para un proyecto profesional
Cómo desplegar en Vercel proyectos de React y Next.js
Crea tu portafolio y consigue trabajo como programador
Orden recomendado
- Mira MVP antes de cerrar la Fase 1.
- Consulta el proceso de proyecto durante la planificación.
- Revisa accesibilidad antes de la Fase 6.
- Mira README al comenzar la Fase 7.
- Consulta despliegue antes de publicar.
- Mira presentación antes de preparar la defensa.
Los videos de despliegue pueden mostrar una interfaz anterior de Vercel. Utiliza la documentación oficial para confirmar el flujo actual.
Documentación y lecturas
Planificación y repositorio
Next.js
React
Tailwind CSS
Accesibilidad
Vercel
Inteligencia artificial
Orden para resolver una duda
1. Reproducir
2. Leer el código
3. Consultar documentación oficial
4. Preparar una reproducción mínima
5. Solicitar ayuda con contexto
6. Probar la propuesta
7. Registrar la decisiónGlosario del Proyecto Final
Alcance: conjunto de funciones que se construirán y límites que se respetarán.
Aplicación web: producto interactivo utilizado mediante un navegador.
Candidato a publicación: versión que contiene el alcance completo y está lista para pruebas finales.
Criterio de aceptación: resultado observable que permite decidir si un requisito se cumplió.
Defensa técnica: explicación oral o grabada de decisiones, código, pruebas y proceso.
Definición de terminado: lista de condiciones que debe cumplir una función antes de considerarse completa.
Despliegue: versión de la aplicación disponible en un entorno.
Espacio personal: área que representa las decisiones guardadas por el usuario.
Historia de usuario: descripción de una necesidad desde la perspectiva de una persona.
Iteración: ciclo breve de construcción, revisión y mejora.
Matriz de estados: tabla que enumera situaciones posibles y su representación.
MVP: versión mínima que resuelve el problema principal de forma útil.
Prueba crítica: comprobación de una función cuya falla impide aprobar o publicar.
Regresión: fallo introducido en una función que antes operaba.
Resumen derivado: información calculada a partir de los datos y la selección existentes.
Trazabilidad: capacidad de relacionar requisitos, cambios, pruebas y decisiones.
Vista previa: despliegue utilizado para revisar cambios antes de producción.
Cierre del curso
El Proyecto Final reúne el recorrido completo:
HTML
└── estructura y significado
CSS + Tailwind
└── presentación y adaptación
JavaScript
└── datos y comportamiento
React
└── componentes, estado e interacción
Next.js
└── rutas, servidor, cliente y producción
Git + GitHub
└── historial y documentación
Inteligencia artificial
└── asistencia revisada y verificada
Vercel
└── aplicación públicaAl finalizar debes poder mostrar una aplicación y explicar:
- qué problema resuelve;
- cómo está organizada;
- qué ocurre cuando el usuario interactúa;
- qué código se ejecuta en cliente;
- qué contenido permanece en servidor;
- cómo conservas preferencias;
- cómo validas un formulario;
- cómo manejas errores;
- cómo probaste;
- cómo utilizaste IA;
- qué decisiones tomaste;
- cómo publicaste.
Ese conjunto de capacidades permite continuar aprendiendo:
- consumo de APIs;
- pruebas automatizadas;
- TypeScript;
- autenticación;
- bases de datos;
- desarrollo de aplicaciones de mayor escala.
No forman parte de este curso y no son necesarios para aprobar el proyecto actual.
Requisitos para obtener el certificado
El certificado de participación se entrega cuando:
- completaste los seis módulos;
- aprobaste los proyectos de los Módulos 1 al 5;
- aprobaste las evaluaciones del curso;
- aprobaste el Proyecto Final Integrador;
- realizaste las correcciones solicitadas;
- entregaste todos los enlaces y evidencias.
El certificado representa que completaste satisfactoriamente el proceso formativo y desarrollaste el proyecto requerido.
No representa una licencia profesional ni garantiza dominio experto de todas las tecnologías.
El curso concluye cuando el Proyecto Final recibe aprobación.