Sprint Activo · Versión 0.0.3 Rama: feature/milestone-04-docs Actualizado: Septiembre 2026

Curso Gamificado de
Spring Boot 4 con Kotlin

Aprende Spring Boot 4.1.1, Kotlin 2.2.x y JDK 25 construyendo el sistema del Gran Hotel Pokémon. Domina Screaming Architecture por features, arquitectura hexagonal desacoplada, TDD real y supera los 22 retos de la Liga de Campeones.

Spring Boot 4.1.1 Kotlin 2.2.x JDK 25 Screaming Architecture TDD (Red-Green-Refactor) PostgreSQL + Flyway Docker + Testcontainers Actuator + Prometheus Sentry Tracking
Estatus del Proyecto v0.0.3

Panel de Control y Estado del Backlog

Sigue el desarrollo en vivo sincronizado con la rama activa feature/milestone-04-docs.

Nivel Actual

LVL 5

La Fortaleza de la Seguridad

Insignia: Llave Maestra JWT
Curso Base

5 / 11

Semanas 0-4 completadas (45%)

6 semanas restantes
Quality Gates

≥ 80%

Cobertura JaCoCo obligatoria

Detekt + KtLint + Testcontainers
Post-Curso

22

Retos en 6 Fases Legendarias

95-130 hrs estimadas

Estado de Features del Gran Hotel Pokémon

Estructura por vertical slices (Screaming Architecture) con su estado de desarrollo y cobertura de pruebas.

Feature Modelo Dominio Entidad JPA Repository Service Controller Tests Estado
ping ✅ Ping ✅ PingService ✅ PingController ✅ Unit + Controller Completo
examples ✅ Example ✅ ExampleEntity ✅ ExampleJpaRepository ✅ ExampleServicePort ✅ ExampleController ✅ Unit + Controller + Adapter Completo
hotels ✅ Hotel ✅ HotelEntity ✅ HotelJpaRepository ✅ HotelService ✅ HotelController ✅ Unit + Integration + E2E Completo
rooms
Entidad y repo listos. Service y Controller en S7
✅ Room ✅ RoomEntity ✅ RoomJpaRepository ❌ — ❌ — ❌ — Planificado (S7)
users
Active sprint: CRUD, BCrypt y JWT stateless
✅ User + Value Objects ❌ — ✅ UserRepository (port) ⚠️ Stubs (Create/Get/Update) ❌ UserController (vacío) ✅ Unit (dominio y VOs) En desarrollo (S5)
sentry
Error tracking integrado
✅ SentryController ✅ Unit test Operativo

Matriz de Entidades del Dominio

Seguimiento de la capa de dominio a persistencia, adapters y controladores para el Gran Hotel Pokémon.

Entidad Dominio JPA Repo Service Controller Tests Semana Asignada
Example Semana 3
Hotel Semanas 4-5
Room 🔲 🔲 🔲 Semana 7
User 🔲 ⚠️ ⚠️ 🔲 ⚠️ Semana 5
Role / Authority 🔲 🔲 🔲 🔲 🔲 Semana 5
Reservation 🔲 🔲 🔲 🔲 🔲 🔲 Semana 9
Payment 🔲 🔲 🔲 🔲 🔲 🔲 Semana 10
Review 🔲 🔲 🔲 🔲 🔲 🔲 Semana 10
Completo ⚠️ Parcial / Stubs en progreso 🔲 Pendiente en Backlog No aplica o desacoplado

Infraestructura Transversal y Quality Gates Operativos

Configuración lista para producción implementada en las semanas 0 a 4 del proyecto.

GlobalExceptionHandler & ErrorResponse

Clean Web

Manejo estructurado y uniforme para validaciones Jakarta, type mismatches, 404 Not Found y 500.

OpenAPI 3.0 + Swagger UI Operativo

Docs

Documentación interactiva disponible en /swagger-ui.html con tags organizados por feature y soporte de seguridad.

WebConfig con CORS Multi-Origen

Networking

Configuración desacoplada de CORS para integración sin fricciones con apps web frontend y clientes móviles.

Paginación Neutra Clean Core

Hexagonal

Contratos de paginación PageRequest, PageResult y SortOrder independientes de Spring Data en el núcleo de dominio.

DateTimeExtensions Idiomáticas

Kotlin

Funciones de extensión Kotlin para manipulación segura de Instant, LocalDateTime y conversiones UTC.

Perfiles de Entorno Configurables

Config

Perfiles dev, prod, test, generate-ddl y migration con properties estrictamente separadas por entorno.

Flyway Migrations (V1 & V2)

Database

Control de versiones de base de datos relacional con migraciones automáticas idempotentes.

Pool de Conexiones HikariCP

Performance

Pool de conexiones de máximo rendimiento configurado para alta concurrencia y cero fugas de conexión.

Actuator + Métricas Prometheus

Observability

Observabilidad total: health probes (liveness / readiness), métricas del sistema y endpoint Prometheus activo.

Sentry Error Tracking en Tiempo Real

Monitoring

Captura de excepciones no controladas en tiempo real con tags de release, stacktraces y breadcrumbs.

Quality Gates: JaCoCo + Detekt + KtLint

Quality

Pipeline local obligatorio: cobertura mínima requerida ≥80%, complejidad ciclomática ≤10 y linter estricto.

Testcontainers con PostgreSQL Real

Testing

Pruebas de integración y E2E contra instancias reales de Postgres en contenedores Docker efímeros sin H2.

🎮

El Viaje del Héroe

"Cada semana desbloquea un Templo del Código y una insignia legendaria."

Nivel actual LVL 5
Progreso base 5 / 11 semanas

5

Completadas

6

Pendientes

Enemigo en turno: ⚔️ Team Rocket
Insignia en juego: 🏅 Llave Maestra JWT
Metodología: TDD 🔴→🟢→🔵

🗓️ Roadmap Semanal Tentativo (Semanas 0 a 10)

11 hitos planificados
🌱
Semana 0 M0 - Introducción 🏅 Semilla de Kotlin

La Aldea Inicial — Bienvenida y entorno

Completada

Setup del entorno con JDK 25, Gradle Kotlin DSL, introducción a la narrativa de Kai en el Gran Hotel Pokémon y bases de la arquitectura.

Estado: Completada
🎒
Semana 1 M0 - Introducción 🏅 Semilla de Kotlin

Kit del Entrenador — Proyecto base

Completada

Estructura del proyecto Spring Boot 4.1.1, dependencias base, Git conventional commits, perfiles y primeros tests unitarios.

Estado: Completada
🌲
Semana 2 M1 - Persistencia 🏅 Ruta de las 1000 Peticiones

El Bosque de los Controladores — Conceptos básicos

Completada

Rutas HTTP REST, inyección de dependencias idiomática en Kotlin, perfiles dev/prod/test y migración inicial con Flyway V1.

Estado: Completada
⛏️
Semana 3 M1 - Persistencia 🏅 Reliquia de las Entidades

Las Minas de Datos — Persistencia con JPA

Completada

Entidades JPA con Kotlin, Flyway V2, ciclo TDD con MockK y CRUD Example aplicando desacoplamiento de capas mediante Port-Adapter.

Estado: Completada
🛡️
Semana 4 M2 - Validación 🏅 Escudo de Validación

El Dojo de la Validación — Screaming Architecture

Completada

Organización por Features (hotels, rooms, users), Jakarta Validation en DTOs, GlobalExceptionHandler y documentación interactiva OpenAPI/Swagger.

Estado: Completada
🏰
Semana 5 M3 - Seguridad 🏅 Llave Maestra JWT ⚔️ Team Rocket

La Fortaleza de la Seguridad — Users, Security & JWT

En curso

CRUD de Users con Value Objects (Email, Password, PhoneNumber), BCrypt, Spring Security con JWT stateless, roles y autoridades granulares (GUEST, STAFF, ADMIN), Flyway V3 y V4.

Estado: En curso (Rama activa)
🗼
Semana 6 M4 - Testing 🏅 Cinturón de Pruebas ⚔️ Mewtwo

La Torre Pokémon de las Pruebas — Estrategia de testing

Pendiente

Estrategia rigurosa de 6 niveles de pruebas (Unitarias sin Spring <100ms, WebMvcTest, integration, DataJpaTest, E2E con Testcontainers PostgreSQL) y JaCoCo ≥80%.

Estado: Próximamente
📜
Semana 7 M5 - Documentación 🏅 Libro de las API ⚔️ Ditto

El Mapa del Merodeador — OpenAPI completa y CRUD Rooms

Pendiente

Documentación interactiva exhaustiva con schemas, responses y JWT Authorize; CRUD completo de habitaciones temáticas anidadas bajo hoteles y Flyway V5.

Estado: Próximamente
☁️
Semana 8 M6 - Producción 🏅 Puerta de los Sistemas en Vivo ⚔️ Kyogre

El Portal a la Nube — Docker, Actuator y CI/CD

Pendiente

Dockerfile multi-stage layered JARs (<200MB), docker-compose local con Postgres y Redis, métricas Prometheus, health probes Kubernetes y pipeline CI/CD en GitHub Actions.

Estado: Próximamente
Semana 9 M7 - Avanzado 🏅 Energía de la Caché ⚔️ Rayquaza

La Liga de los Maestros — Reservaciones, eventos y caché

Pendiente

Feature reservations con máquina de estados finita, eventos de dominio asíncronos desacoplados con @TransactionalEventListener, caché Caffeine y Flyway V6.

Estado: Próximamente
🏆
Semana 10 M8 - Final 🏅 Corona del Arquitecto ⚔️ Arceus

El Hotel Pokémon de Lujo — Pagos, reviews y release v1.0

Pendiente

Feature payments con simulación de pasarela, reviews de huéspedes, test E2E del flujo completo de reserva y checkout, verificación global de quality gates y release v1.0.0.

Estado: Próximamente

⚠️ El calendario se actualiza continuamente en el Project Board y en el archivo BACKLOG.md del repositorio.

🏆 Práctica Deliberada Post-Curso · Documento IDEAS_X_IMPLEMENTAR.md

Liga de Campeones Pokémon: Retos Avanzados

Completar los 10 templos del curso base te otorga la Corona del Arquitecto. Pero la Liga Pokémon tiene desafíos que van más allá del proyecto base: 22 ejercicios avanzados organizados en 6 fases temáticas con insignias legendarias para consolidar tu perfil de desarrollador backend medio-senior a experto.

6 Fases Legendarias
22 Ejercicios Prácticos
95 - 130h Práctica Deliberada
100% Con Criterios y Métricas
🛡️

Fase 1 · Liga de Campeones

Resiliencia y Tolerancia a Fallos

Escudo de Onix

"El Hotel Pokémon depende de servicios externos (pasarelas de pago, APIs de clima y Pokédex). Cuando fallan, el hotel no puede detenerse. Kai construye defensas inquebrantables como Onix: automáticas, confiables y con fallback garantizado."

Resilience4j Circuit Breaker Exponential Backoff Rate Limiter Bulkhead Time Limiter

Retos Técnicos (4) 12-17 horas

  • 1.1 — Circuit Breaker con Resilience4j
    Intermedio 4-6h

    Control de estados CLOSED, OPEN y HALF_OPEN en la pasarela de pagos con fallback instantáneo a PENDING_RETRY y métricas en Actuator.

  • 1.2 — Retry con backoff exponencial
    Intermedio 2-3h

    Reintentos automáticos con backoff escalonado (500ms → 1s → 2s), discriminando fallos transitorios de errores de validación.

  • 1.3 — Rate Limiting & Bulkhead
    Intermedio 3-4h

    Protección per-user con HTTP 429 Retry-After contra ataques de fuerza bruta y aislamiento por semáforo para llamadas concurrentes.

  • 1.4 — Time Limiter y fallback en cascada
    Avanzado 3-4h

    Timeout estricto de 2s y degradación suave en 3 niveles: Servicio externo → Caché local → Respuesta de contingencia.

🏅 Insignia: Escudo de Onix 12-17 horas
🔍

Fase 2 · Liga de Campeones

Consultas Flexibles con GraphQL y gRPC

Lente de Alakazam

"Los entrenadores buscan habitaciones con filtros complejos y atributos a medida. Alakazam lee los requerimientos: GraphQL permite a cada cliente pedir exactamente lo necesario y gRPC comunica servicios internos a velocidad binaria."

Spring for GraphQL GraphQL Subscriptions gRPC Protocol Buffers WebSockets

Retos Técnicos (3) 16-22 horas

  • 2.1 — GraphQL con Spring for GraphQL
    Intermedio 6-8h

    Schema tipado, consultas avanzadas con paginación, filtros de hoteles y mutaciones para crear y cancelar reservaciones.

  • 2.2 — Subscriptions GraphQL en tiempo real
    Avanzado 4-6h

    Notificaciones reactivas vía WebSockets cuando una habitación cambia de disponibilidad o se confirma una reserva.

  • 2.3 — gRPC para servicios internos
    Avanzado 6-8h

    Definición de contratos con Protocol Buffers proto3 y comunicación binaria multiplexada HTTP/2 entre microservicios.

🏅 Insignia: Lente de Alakazam 16-22 horas

Fase 3 · Liga de Campeones

Concurrencia y Rendimiento Extremo

Velocidad de Jolteon

"Miles de entrenadores reservando en temporada alta provocan saturación de hilos en servidores convencionales. Jolteon desata la velocidad de Virtual Threads en JDK 25, corrutinas en Kotlin y control de concurrencia optimista."

Virtual Threads (Loom) Kotlin Coroutines Spring WebFlux Optimistic Locking JDK 25

Retos Técnicos (4) 18-24 horas

  • 3.1 — Virtual Threads con Project Loom (JDK 25)
    Intermedio 3-4h

    Migración a hilos virtuales en Tomcat con zero overhead en operaciones bloqueantes y benchmarking de rendimiento.

  • 3.2 — Kotlin Coroutines en lógica de negocio
    Avanzado 6-8h

    Concurrencia estructurada, suspend functions, async/await y Flow reactivo integrados de forma nativa con Spring.

  • 3.3 — WebFlux reactivo comparativo
    Avanzado 6-8h

    Implementación reactiva paralela con R2DBC y análisis empírico de latencia P99 frente a Virtual Threads bajo estrés.

  • 3.4 — Optimistic Locking y concurrencia
    Intermedio 3-4h

    Anotación @Version en habitaciones y reservas para prevenir sobreventa concurrente con reintentos limpios.

🏅 Insignia: Velocidad de Jolteon 18-24 horas
🧠

Fase 4 · Liga de Campeones

Inteligencia Artificial Aplicada

Psíquico de Mewtwo

"El Gran Hotel Pokémon incorpora capacidades cognitivas de vanguardia. Mewtwo canaliza Spring AI: asistentes conversacionales con memoria, RAG sobre políticas del hotel con base vectorial y análisis automático del feedback de huéspedes."

Spring AI RAG pgvector Vector Embeddings OpenAI / Ollama Sentiment Analysis

Retos Técnicos (4) 20-26 horas

  • 4.1 — Chatbot con Spring AI
    Avanzado 6-8h

    Asistente inteligente con memoria contextual y system prompt gamificado para recomendar estancias y habitaciones.

  • 4.2 — RAG con pgvector en PostgreSQL
    Experto 8-10h

    Indexación semántica de políticas y amenidades con embeddings y búsqueda por similitud vectorial directamente en Postgres.

  • 4.3 — Análisis de sentimiento de reseñas
    Intermedio 3-4h

    Clasificación automática de comentarios de huéspedes en 3 polaridades con extracción de temas frecuentes para gerencia.

  • 4.4 — Generación de contenido con IA
    Intermedio 3-4h

    Creación asistida de descripciones temáticas inmersivas y sugerencias de promociones personalizadas.

🏅 Insignia: Psíquico de Mewtwo 20-26 horas
🌐

Fase 5 · Liga de Campeones

Comunicación y Caché Distribuido

Red de Porygon

"Para operar a gran escala, la aplicación no debe almacenar estado en memoria local. Porygon teje la red con Redis: caché multi-nodo, sesiones HTTP centralizadas y normalización de errores según el estándar RFC 9457."

Redis Spring Session Spring Cache RFC 9457 Problem Details

Retos Técnicos (3) 9-13 horas

  • 5.1 — Redis como caché distribuido
    Intermedio 4-6h

    Serialización JSON de hoteles y habitaciones con invalidación @CacheEvict atómica y métricas de hit/miss en Actuator.

  • 5.2 — Sesiones distribuidas con Redis
    Intermedio 2-3h

    Spring Session con Redis para habilitar escalado horizontal elástico sin requerir sticky sessions en el balanceador.

  • 5.3 — Problem Details RFC 9457
    Intermedio 3-4h

    Estandarización de respuestas de error con spec RFC 9457 (type, title, status, detail, instance) adoptado por la industria.

🏅 Insignia: Red de Porygon 9-13 horas
💎

Fase 6 · Liga de Campeones

Compilación Nativa con GraalVM

Cristal de Dialga

"El pináculo del rendimiento. Dialga manipula el tiempo: compilación anticipada AOT con GraalVM Native Image para lograr arranques en menos de 50ms y un consumo de memoria inferior a 80MB, ideal para serverless y Kubernetes."

GraalVM Native Image Spring AOT Reflection Metadata k6 Benchmarking

Retos Técnicos (2) 12-18 horas

  • 6.1 — Compilación nativa AOT con GraalVM
    Experto 8-12h

    Generación de binario ejecutable independiente sin máquina virtual tradicional, con arranque instantáneo y mínimo footprint.

  • 6.2 — Benchmarking JVM vs Native
    Avanzado 4-6h

    Pruebas de carga comparativas con k6 midiendo tiempo de cold start, throughput sostenido, latencia P99 y memoria residente.

🏅 Insignia: Cristal de Dialga 12-18 horas

🔗 Grafo de Dependencias y Guía Completa de Implementación

Cada ejercicio en IDEAS_X_IMPLEMENTAR.md incluye contexto narrativo, tareas con checkboxes, criterios de aceptación verificables, métricas de éxito (P99, cold start), hints técnicos y recursos de la documentación oficial.

Explorar IDEAS_X_IMPLEMENTAR.md

🏛️ Arquitectura & Principios de Diseño

Construcción sólida basada en estándares de la industria, no en ejemplos de juguete

📂

Screaming Architecture

Las carpetas gritan la intención del dominio del Gran Hotel Pokémon: hotels/, rooms/, users/, reservations/ y payments/, en lugar de capas técnicas genéricas dispersas.

🔌

Hexagonal Interna (Clean Core)

El núcleo de negocio y los Value Objects permanecen desacoplados de frameworks. La persistencia y los controladores se comunican a través de puertos e interfaces (Port-Adapter), permitiendo evolucionar la base de datos sin alterar las reglas del hotel.

🔴🟢🔵

TDD Real por Capas

Red → Green → Refactor con 6 niveles de tests: tests unitarios ultrarrápidos (<100ms) con MockK, slices de controlador con @WebMvcTest, y pruebas E2E con Testcontainers levantando PostgreSQL real en Docker efímero.

🏆 Lo que vas a dominar

Competencias clave que te preparan para entrevistas y proyectos reales en producción

🏗️

Screaming Architecture

Estructura por features (hotels, rooms, users, reservations, payments) con arquitectura hexagonal interna y clean core.

🧪

TDD Real por Niveles

Ciclo Red → Green → Refactor riguroso. Unitarias con MockK (<100ms), slices con @WebMvcTest y E2E con Testcontainers PostgreSQL.

🔐

Seguridad Stateless & JWT

Spring Security con Kotlin DSL, tokens JWT stateless, roles granulares (GUEST, STAFF, ADMIN) y protección contra fuerza bruta.

🚀

Observabilidad de Producción

Health probes Kubernetes (liveness/readiness), métricas Prometheus con Micrometer, Sentry error tracking y Docker multi-stage.

JDK 25 & Virtual Threads

Aprovecha Project Loom, Kotlin Coroutines, eventos asíncronos desacoplados con @TransactionalEventListener y caché Caffeine/Redis.

🏆

22 Retos Liga de Campeones

Práctica deliberada post-curso: Resilience4j (Circuit Breakers), GraphQL, Spring AI, RAG con pgvector, gRPC y GraalVM Native.

🏨

La Aventura de Kai y el Hotel Pokémon

Kai es un desarrollador con bases que busca convertirse en un verdadero ingeniero de software. En el Gran Hotel Pokémon se enfrenta a problemas reales del mundo backend: reservas concurrentes, pasarelas de pago caídas, seguridad stateless contra el Team Rocket y observabilidad en producción.

"La mejor forma de aprender arquitectura de software es resolviendo problemas reales con restricciones de producción."

Los Seis Gimnasios Base

💎

Gimnasio 1

Pewter

Líder

Brock

Insignia

Boulder Badge

Los cimientos de la persistencia. Antes de construir cualquier otra cosa, el Hotel Pokémon necesita guardar datos correctamente.

Temas
  • Mapeo de entidades JPA con Kotlin
  • Relaciones reales: @OneToMany, @ManyToOne
  • Migraciones con Flyway
  • Spring Data JPA y Patrón Port-Adapter
  • Optimistic locking para concurrencia

Gimnasio 2

Vermilion

En progreso
Líder

Lt. Surge

Insignia

Thunder Badge

El escudo eléctrico. Team Rocket ha intentado entrar al sistema. Es hora de blindar el Hotel Pokémon con seguridad robusta.

Temas
  • Spring Security con Kotlin DSL
  • Autenticación stateless con JWT
  • Access tokens + Refresh tokens
  • Autorización basada en roles (RBAC)
  • Protección contra ataques comunes
🌊

Gimnasio 3

Cerulean

Líder

Misty

Insignia

Cascade Badge

La disciplina de la precisión. Un sistema que acepta datos inválidos es un sistema que miente sobre su propio estado.

Temas
  • Jakarta Bean Validation en DTOs
  • Validación de Value Objects de dominio
  • Manejo estructurado de errores RFC 9457
  • Excepciones de dominio semánticas
  • Transacciones con @Transactional
🌱

Gimnasio 4

Celadon

Líder

Erika

Insignia

Rainbow Badge

El arte del testing. El código sin tests no es código terminado, es deuda técnica disfrazada de progreso.

Temas
  • Unit tests con MockK (<100ms)
  • Tests de controlador con @WebMvcTest
  • Tests de integración con Testcontainers
  • Tests E2E con @SpringBootTest
  • Cobertura con JaCoCo ≥80% y TDD
🌋

Gimnasio 5

Cinnabar

Líder

Blaine

Insignia

Volcano Badge

Ver para operar. Un sistema que no puede ser observado no puede ser operado. Solo puedes arreglar lo que puedes ver.

Temas
  • Logging estructurado en JSON
  • Métricas con Micrometer + Prometheus
  • Spring Actuator health probes
  • Distributed Tracing con OpenTelemetry
  • Sentry para error tracking en vivo
🌍

Gimnasio 6

Viridian

Líder

Giovanni

Insignia

Earth Badge

La automatización total. El código que no está en producción no entrega valor. Pipelines que detectan bugs automáticamente.

Temas
  • Docker layered JARs (<200MB)
  • GitHub Actions CI/CD automatizado
  • Análisis estático estricto con Detekt
  • KtLint y Conventional Commits
  • Estrategia de branching profesional

¡Ayuda a que este curso llegue a más desarrolladores!

Tu ⭐ en GitHub ayuda a que más programadores descubran este contenido gratuito y de calidad. El repositorio es 100% de código abierto.

Repositorio público: clona, explora el código de cada rama, abre un PR y sé parte de la comunidad.

¡Únete a la aventura del Hotel Pokémon! 🎮

Sigue las actualizaciones semanales del backlog, debate soluciones en las discusiones de GitHub y pon a prueba tus habilidades con los retos diarios.