Workshop: Arquitectura y Diagramas con IA

Spring Boot + React + Mermaid + Gamma AI

Contenido del Workshop

Objetivo del Workshop

Diseñar la arquitectura de un proyecto Spring Boot + React, generar diagramas UML con Cursor AI y crear una presentación profesional con Gamma AI.

Duración total: ~45 minutos

Paso 0: Formar Equipos y Elegir Proyecto (3 min)

Equipos

2-3 personas por equipo

Instrucciones
  1. Cada equipo elige UNO de los 7 proyectos disponibles
  2. Leer rápidamente la descripción del proyecto
  3. Asegurarse de que entienden qué hace el proyecto

Proyectos Disponibles

Proyecto 1: Sistema de Reserva de Salas

Qué hace: App para reservar salas de reuniones en una oficina

Funcionalidades:

  • Ver salas disponibles con capacidad y equipamiento
  • Reservar sala (fecha, hora inicio, hora fin)
  • Ver mis reservas activas
  • Cancelar reserva
  • Dashboard admin: ver todas las reservas del día
Proyecto 2: Gestor de Recetas de Cocina

Qué hace: App para guardar y compartir recetas

Funcionalidades:

  • Crear receta (nombre, ingredientes, pasos, tiempo, categoría)
  • Ver todas las recetas con filtro por categoría
  • Marcar recetas como favoritas
  • Buscar recetas por ingrediente
  • Ver detalle de una receta
Proyecto 3: Sistema de Préstamos de Biblioteca

Qué hace: Gestión de préstamos de libros

Funcionalidades:

  • Catálogo de libros (título, autor, ISBN, disponibilidad)
  • Buscar libros
  • Solicitar préstamo (máx 3 libros por usuario)
  • Devolver libro
  • Ver historial de préstamos
Proyecto 4: Tracker de Hábitos Diarios

Qué hace: App para seguir hábitos saludables

Funcionalidades:

  • Crear hábito (nombre, frecuencia)
  • Marcar hábito completado hoy
  • Ver racha (días consecutivos)
  • Dashboard con estadísticas del mes
  • Lista de hábitos activos
Proyecto 5: Gestor de Gastos Personales

Qué hace: App para controlar gastos mensuales

Funcionalidades:

  • Registrar gasto (monto, categoría, fecha, descripción)
  • Ver gastos del mes
  • Filtrar por categoría
  • Ver total gastado por categoría
  • Gráfico de gastos mensuales
Proyecto 6: Sistema de Turnos para Clínica

Qué hace: Gestión de citas médicas

Funcionalidades:

  • Ver turnos disponibles por médico y fecha
  • Solicitar turno
  • Ver mis turnos próximos
  • Cancelar turno
  • Dashboard médico: agenda del día
Proyecto 7: Marketplace de Productos Artesanales

Qué hace: Plataforma de compra-venta simple

Funcionalidades:

Fase 1: Crear Arquitectura con Claude/ChatGPT (5 min)

Paso 1.1: Ir a Claude.ai o ChatGPT

Abrir en el navegador:

Paso 1.2: Usar el Prompt de Arquitectura

IMPORTANTE: Copiad y pegad este prompt EXACTAMENTE, solo cambiando [VUESTRO PROYECTO]:
Soy desarrolladora full-stack con Java Spring Boot y React.

Quiero crear [DESCRIPCIÓN DE VUESTRO PROYECTO - copiáis de arriba].

Necesito una arquitectura SIMPLE Y CLARA con:

BACKEND (Spring Boot):
- Qué Controllers necesito (con sus endpoints principales)
- Qué Services con su lógica
- Qué Repositories
- Qué Entities/Models (con sus atributos principales)
- DTOs si son necesarios

FRONTEND (React):
- Qué Pages/Vistas principales
- Qué Components clave
- Qué llamadas a la API hace cada page

BASE DE DATOS:
- Qué tablas necesito
- Relaciones entre tablas

Dame la estructura en formato texto claro, bien organizado y SIN código.
Solo la arquitectura y nombres de clases/componentes.

Ejemplo para Proyecto 1 (Reserva de Salas)

Soy desarrolladora full-stack con Java Spring Boot y React.

Quiero crear una app para reservar salas de reuniones en una oficina donde:
- Ver salas disponibles con capacidad y equipamiento
- Reservar sala (fecha, hora inicio, hora fin)
- Ver mis reservas activas
- Cancelar reserva
- Dashboard admin: ver todas las reservas del día

Necesito una arquitectura SIMPLE Y CLARA con:

BACKEND (Spring Boot):
- Qué Controllers necesito (con sus endpoints principales)
- Qué Services con su lógica
- Qué Repositories
- Qué Entities/Models (con sus atributos principales)
- DTOs si son necesarios

FRONTEND (React):
- Qué Pages/Vistas principales
- Qué Components clave
- Qué llamadas a la API hace cada page

BASE DE DATOS:
- Qué tablas necesito
- Relaciones entre tablas

Dame la estructura en formato texto claro, bien organizado y SIN código.
Solo la arquitectura y nombres de clases/componentes.

Paso 1.3: Copiar la Respuesta

Claude/ChatGPT os devolverá algo como esto:

BACKEND (Spring Boot):

Controllers:
- RoomController
  - GET /api/rooms → listar todas las salas
  - GET /api/rooms/{id} → obtener detalle de sala
  - POST /api/rooms → crear sala (admin)

- ReservationController
  - GET /api/reservations → listar mis reservas
  - POST /api/reservations → crear reserva
  - DELETE /api/reservations/{id} → cancelar reserva
  - GET /api/reservations/today → reservas del día (admin)

Services:
- RoomService
  - Lógica: obtener salas disponibles en un horario
  - Validar capacidad y equipamiento

- ReservationService
  - Lógica: verificar disponibilidad antes de reservar
  - Validar que la sala esté libre en el horario
  - No permitir reservas en el pasado

Repositories:
- RoomRepository extends JpaRepository<Room, Long>
- ReservationRepository extends JpaRepository<Reservation, Long>

Entities:
- Room
  - id: Long
  - name: String
  - capacity: Integer
  - equipment: String (proyector, pizarra, etc)
  - isAvailable: Boolean

- Reservation
  - id: Long
  - room: Room (ManyToOne)
  - userName: String
  - reservationDate: LocalDate
  - startTime: LocalTime
  - endTime: LocalTime

DTOs:
- ReservationRequestDTO (userName, roomId, date, startTime, endTime)
- RoomAvailabilityDTO (room info + available slots)

FRONTEND (React):

Pages:
- HomePage: vista general con lista de salas
- RoomDetailPage: detalle de sala + formulario de reserva
- MyReservationsPage: lista de mis reservas
- AdminDashboardPage: todas las reservas del día

Components:
- RoomCard: muestra una sala en la lista
- ReservationForm: formulario para crear reserva
- ReservationList: lista de reservas con botón cancelar
- TimeSlotPicker: selector de hora inicio/fin

BASE DE DATOS:

Tablas:
- rooms (id, name, capacity, equipment, is_available)
- reservations (id, room_id, user_name, reservation_date, start_time, end_time)

Relaciones:
- reservations.room_id → rooms.id (ManyToOne)
COPIAD TODO ESTO → Lo necesitáis para el siguiente paso

Fase 2: Crear Diagramas con Cursor (15 min)

Paso 2.1: Abrir Cursor

  1. Abrir Cursor IDE
  2. Crear una nueva carpeta vacía o abrir una existente
  3. NO necesitáis crear ningún proyecto Java ni React
  4. Solo vais a crear un archivo Markdown

Paso 2.2: Crear el Archivo de Arquitectura

  1. En Cursor, crear un nuevo archivo llamado: arquitectura.md
  2. Pegar la respuesta completa de Claude/ChatGPT que copiásteis antes
  3. Guardar el archivo (Cmd+S o Ctrl+S)

Paso 2.3: Usar Cursor Agent Mode para Generar Diagramas

AHORRO DE TOKENS: Solo vamos a pedir 2 diagramas para no gastar muchos requests
Opción A: Equipos 1, 3, 5, 7 → Arquitectura + Clases
  1. Abrir Agent Mode: Cmd + I (Mac) o Ctrl + I (Windows/Linux)
  2. Pegar este prompt:
Analiza la arquitectura que está en este archivo y crea 2 diagramas Mermaid:

1. DIAGRAMA DE ARQUITECTURA GENERAL (graph TB):
   - Muestra Frontend (React) con las pages principales
   - Muestra Backend (Spring Boot) con las 3 capas: Controllers → Services → Repositories
   - Muestra Base de Datos (PostgreSQL)
   - Muestra las flechas de comunicación HTTP entre capas
   - Usa colores para diferenciar: Frontend en azul, Backend en morado, BD en verde

2. DIAGRAMA DE CLASES (classDiagram):
   - Muestra todas las Entities con sus atributos
   - Muestra las relaciones entre entidades (OneToMany, ManyToOne, etc)
   - Indica el tipo de dato de cada atributo

Genera ambos diagramas en bloques ```mermaid dentro de este mismo archivo.
Añádelos AL FINAL del archivo después de todo el contenido actual.
Opción B: Equipos 2, 4, 6 → Arquitectura + Secuencia
  1. Abrir Agent Mode: Cmd + I (Mac) o Ctrl + I (Windows/Linux)
  2. Pegar este prompt:
Analiza la arquitectura que está en este archivo y crea 2 diagramas Mermaid:

1. DIAGRAMA DE ARQUITECTURA GENERAL (graph TB):
   - Muestra Frontend (React) con las pages principales
   - Muestra Backend (Spring Boot) con las 3 capas: Controllers → Services → Repositories
   - Muestra Base de Datos (PostgreSQL)
   - Muestra las flechas de comunicación HTTP entre capas
   - Usa colores para diferenciar: Frontend en azul, Backend en morado, BD en verde

2. DIAGRAMA DE SECUENCIA (sequenceDiagram):
   - Muestra el flujo de la funcionalidad PRINCIPAL del proyecto
   - Ejemplo: "Usuario crea una reserva" o "Usuario registra un gasto"
   - Muestra: User → Frontend → Controller → Service → Repository → Database
   - Incluye las respuestas de vuelta

Genera ambos diagramas en bloques ```mermaid dentro de este mismo archivo.
Añádelos AL FINAL del archivo después de todo el contenido actual.

Paso 2.4: Revisar lo que Cursor Generó

Cursor habrá añadido los diagramas al final del archivo.

Ejemplo de lo que veréis:

[... toda vuestra arquitectura anterior ...]

---

## DIAGRAMAS

### Diagrama de Arquitectura General

```mermaid
graph TB
    subgraph Frontend[React Frontend]
        HP[HomePage]
        RDP[RoomDetailPage]
        MRP[MyReservationsPage]
    end

    subgraph Backend[Spring Boot Backend]
        RC[RoomController]
        RSC[ReservationController]
        RS[RoomService]
        RES[ReservationService]
        RR[RoomRepository]
        RER[ReservationRepository]
    end

    DB[(PostgreSQL)]

    HP -->|GET /api/rooms| RC
    RDP -->|POST /api/reservations| RSC
    RC --> RS
    RSC --> RES
    RS --> RR
    RES --> RER
    RR --> DB
    RER --> DB

    style Frontend fill:#6366f1,color:#fff
    style Backend fill:#8b5cf6,color:#fff
    style DB fill:#10b981,color:#fff
```

### Diagrama de Clases

```mermaid
classDiagram
    class Room {
        +Long id
        +String name
        +Integer capacity
        +String equipment
        +Boolean isAvailable
    }

    class Reservation {
        +Long id
        +String userName
        +LocalDate reservationDate
        +LocalTime startTime
        +LocalTime endTime
    }

    Room "1" --> "many" Reservation : has
```

Paso 2.5: Ver los Diagramas Renderizados

Para ver cómo se ven los diagramas visuales:

  1. En Cursor, con el archivo arquitectura.md abierto
  2. Click derecho en el archivo → "Open Preview"
  3. O usar atajo: Cmd + Shift + V (Mac) o Ctrl + Shift + V (Windows)

Se abrirá un panel al lado mostrando los diagramas renderizados

Paso 2.6: Hacer Screenshots de los Diagramas

Necesitáis capturas de pantalla para Gamma:

  1. Aseguraos de que el preview está abierto y se ven los diagramas
  2. Hacer screenshot de cada diagrama:
    • Mac: Cmd + Shift + 4 → seleccionar área
    • Windows: Win + Shift + S → seleccionar área
  3. Guardar las imágenes como:
    • diagrama-arquitectura.png
    • diagrama-clases.png (o diagrama-secuencia.png)
TIP: Ampliad el zoom del preview para que se vean bien grandes

Fase 3: Crear Contenido de Slides con Claude/ChatGPT (5 min)

Paso 3.1: Volver a Claude/ChatGPT

En la MISMA conversación donde ya tenéis la arquitectura, añadir este nuevo mensaje:

Perfecto, ahora necesito crear una presentación en Gamma.

Ayúdame a crear el contenido para 4 slides:

SLIDE 1 - PORTADA:
- Título atractivo para mi proyecto
- Subtítulo que explique en 1 frase qué hace
- Stack: Java Spring Boot + React + PostgreSQL

SLIDE 2 - ¿QUÉ RESUELVE?:
- Descripción breve del proyecto (2-3 líneas)
- Lista de 4-5 funcionalidades principales (bullets muy cortos)

SLIDE 3 - ARQUITECTURA DEL SISTEMA:
- Título: "Arquitectura del Sistema"
- 3-4 bullets explicando:
  * Capa Frontend (qué hace)
  * Capa Backend (qué hace)
  * Comunicación entre capas
  * Base de datos
[Aquí voy a poner la imagen del diagrama de arquitectura]

SLIDE 4 - MODELO DE DATOS (o FLUJO):
- Título: "Modelo de Datos" (o "Flujo de Secuencia" si hicisteis ese diagrama)
- 2-3 bullets explicando las entidades principales y sus relaciones
  (o explicando el flujo paso a paso)
[Aquí voy a poner la imagen del diagrama de clases/secuencia]

Dame SOLO el texto para cada slide, sin formato markdown, en español, texto claro y corto.

Paso 3.2: Copiar el Contenido de los Slides

Claude/ChatGPT os devolverá algo así:

SLIDE 1 - PORTADA
Título: Sistema de Reserva de Salas Inteligente
Subtítulo: Gestión eficiente de espacios de trabajo colaborativos
Stack: Java Spring Boot + React + PostgreSQL

SLIDE 2 - ¿QUÉ RESUELVE?
Descripción: Plataforma digital para optimizar el uso de salas de reuniones,
eliminando conflictos de reservas y facilitando la gestión de espacios en tiempo real.

Funcionalidades:
• Visualización en tiempo real de salas disponibles
• Reserva rápida con validación de disponibilidad
• Gestión de reservas personales (ver y cancelar)
• Panel administrativo con vista diaria completa
• Filtros por capacidad y equipamiento

SLIDE 3 - ARQUITECTURA DEL SISTEMA
Título: Arquitectura del Sistema

• Frontend React: Interfaz intuitiva con vistas de catálogo, detalle de salas y gestión de reservas
• Backend Spring Boot: API REST con 3 capas (Controllers, Services, Repositories) que valida
  disponibilidad y gestiona lógica de negocio
• Comunicación: Peticiones HTTP (GET, POST, DELETE) entre cliente y servidor
• Base de Datos PostgreSQL: Almacena información de salas y reservas con relaciones definidas

SLIDE 4 - MODELO DE DATOS
Título: Modelo de Datos

• Entidad Room: Define salas con capacidad, equipamiento y estado de disponibilidad
• Entidad Reservation: Registra reservas con fecha, horario y usuario asociado
• Relación ManyToOne: Múltiples reservas pueden pertenecer a una misma sala
COPIAD TODO ESTE CONTENIDO → Lo usaréis en Gamma

Fase 4: Crear Presentación con Gamma (10 min)

Paso 4.1: Ir a Gamma.app

  1. Abrir: https://gamma.app
  2. Si no tenéis cuenta, crear una (es gratis con email)
  3. Click en "Create new" o "Nueva presentación"

Paso 4.2: Usar el Modo de IA de Gamma

  1. Gamma os preguntará cómo queréis crear la presentación
  2. Seleccionar: "Generate with AI" o "Generar con IA"
  3. Se abrirá un cuadro de texto

Paso 4.3: Pegar el Contenido en Gamma

Pegar TODO el texto que copiásteis de Claude/ChatGPT:

[PEGÁIS AQUÍ TODO EL CONTENIDO DE LOS 4 SLIDES]

Además:
- Estilo: Moderno y profesional
- Colores: Morado (#4737bb) y azul (#6366f1)
- En Slide 3 y Slide 4, deja espacio para que yo añada imágenes de diagramas

Paso 4.4: Dejar que Gamma Genere las Slides

Gamma tardará 30-60 segundos en generar la presentación.

Os mostrará un preview de las 4 slides ya creadas

Paso 4.5: Añadir las Imágenes de los Diagramas

  1. Click en Slide 3
  2. Buscar un área vacía o un placeholder de imagen
  3. Click en "+ Add image" o arrastrar directamente
  4. Subir la imagen diagrama-arquitectura.png
  1. Click en Slide 4
  2. Hacer lo mismo con diagrama-clases.png o diagrama-secuencia.png

Paso 4.6: Ajustes Finales (Opcional)

Si tenéis tiempo:

  • Cambiar colores de fondo si no os gustan
  • Ajustar tamaño de las imágenes de los diagramas
  • Cambiar fuentes si queréis

Si NO tenéis tiempo: ¡Dejadlo así! Gamma ya lo hace bonito por defecto

Paso 4.7: Guardar y Obtener el Link

  1. En la esquina superior derecha: "Share" o "Compartir"
  2. Copiar el link de la presentación
  3. Este link lo usaréis para presentar

Fase 5: Presentación al Grupo (12 min - 3 min por equipo)

Estructura de la Presentación (3 min por equipo)

Minuto 1: ¿Qué hace vuestro proyecto?
  • Mostrar Slide 1 y Slide 2
  • Explicar en 1 frase qué problema resuelve
  • Mencionar las funcionalidades clave
Minuto 2: Arquitectura
  • Mostrar Slide 3 con el diagrama de arquitectura
  • Explicar las capas: Frontend → Backend → BD
  • Mencionar los controllers y services principales
Minuto 3: Modelo de datos o flujo
  • Mostrar Slide 4 con el diagrama de clases/secuencia
  • Explicar las entidades principales
  • O explicar el flujo paso a paso si hicisteis secuencia
Bonus 30 seg: ¿Qué aprendisteis?
  • ¿La IA entendió bien vuestro proyecto?
  • ¿Algo os sorprendió?
  • ¿Cambiaríais algo?

Checklist Final

Antes de presentar, verificad que tenéis:

Troubleshooting (Si algo sale mal)

"Cursor no me genera los diagramas"

Solución:

  1. Verificad que el prompt está bien copiado
  2. Probad a simplificar: "Crea solo el diagrama de arquitectura en Mermaid"
  3. Si sigue sin funcionar, pedid ayuda a Irina
"No veo los diagramas renderizados en Cursor"

Solución:

  1. Aseguraos de que estáis en el archivo .md (Markdown)
  2. Probad el atajo: Cmd/Ctrl + Shift + V
  3. Si no funciona, copiad el código Mermaid y probadlo en: https://mermaid.live
"Gamma no me deja subir imágenes"

Solución:

  1. Verificad que las imágenes son PNG o JPG
  2. Probad a arrastrar la imagen directamente a la slide
  3. O usar el botón "+ Add content" → "Image"
"Me quedé sin tokens de Cursor"

Solución:

  1. Cambiad de cuenta (usar otra persona del equipo)
  2. O pedid ayuda a Irina para optimizar el prompt
  3. O completad el workshop sin el paso de Cursor (usad solo Claude + Gamma)

Objetivos de Aprendizaje

Al terminar el workshop, habréis:

Y todo en menos de 1 hora

Ejemplo Real: AI Code Reviewer

Proyecto de referencia con arquitectura documentada

Si quieres ver cómo se documenta la arquitectura de un proyecto real con Spring Boot + React usando diagramas Mermaid:

Este proyecto usa exactamente lo que aprendéis en este workshop: arquitectura hexagonal, diagramas de capas y flujos de ejecución.

Key Takeaway Final

"La IA no piensa por ti. Tú diseñas la arquitectura, la IA te ayuda a visualizarla y presentarla. El cerebro arquitecto eres TÚ."