Una app no termina cuando funciona en tu máquina
A lo largo del track has construido las piezas por separado: el frontend que consume la API, el backend que la sirve, la autenticación, los tests, la CI y el despliegue. El capstone las conecta en una sola tubería: el camino que recorre tu código desde que escribes la primera línea hasta que un usuario real lo usa.
IDEA
│
├─▶ CONSTRUIR front (React + fetch) + back (API REST + datos)
│
├─▶ PROBAR tests unitarios y de integración (verde antes de avanzar)
│
├─▶ EMPAQUETAR contenedor (Docker): la app + su entorno, idéntico en todas partes
│
├─▶ AUTOMATIZAR CI: en cada push, instalar → testear → construir la imagen
│
├─▶ DESPLEGAR CD: si la CI está verde, publicar la nueva versión
│
├─▶ OBSERVAR logs, métricas, health check y alertas (¿sigue viva?)
│
└─▶ ASEGURAR HTTPS, secretos fuera del repo, validación de entrada, auth
Cada etapa es una puerta
Lo importante no es que existan las etapas, sino que cada una es una puerta: no avanzas hasta que la anterior está verde. Si los tests fallan, la CI corta y nada se despliega. Si el contenedor no arranca, no llega a producción. Esa cadena de puertas es lo que convierte "funciona en mi máquina" en "funciona en producción, y lo sé".
Construir: front y back que respetan un contrato
El frontend pide datos con fetch y los pinta; el backend valida la entrada,
autentica y responde con el código de estado correcto (201 al crear,
400 si la entrada es inválida, 401 si falta autenticación). Ambos respetan
el mismo contrato: las mismas rutas y la misma forma de los datos.
Empaquetar: el contenedor
Un contenedor (Docker) empaqueta tu app junto con su entorno (versión de Node, dependencias, variables). Así la imagen que pasa los tests en la CI es exactamente la que corre en producción: se acaba el "en mi máquina funciona".
Automatizar: la CI como red de seguridad
La CI ejecuta, en cada cambio, la misma secuencia: instalar dependencias →
correr los tests → construir la imagen. Es una tubería de pasos donde, si uno
falla, los siguientes no se ejecutan. En el capstone modelarás esa tubería con
una función ejecutarPipeline(pasos).
Observar: saber que sigue viva
Una vez en producción, necesitas ojos: un health check (/health) que
responde "estoy viva", logs de lo que pasa, métricas y alertas que te
avisan antes de que el usuario note el problema. Desplegar sin observar es
volar a ciegas.