¡Ven a la JSConf España 2026!
14 de marzo
con speakers TOP.
Comprar entradas
Buscar
⌘K
Iniciar sesión
Módulo 01
Introducción al Bootcamp
¿Por qué Aprender Programación?
Programación FullStack, Frontend y Backend
Presentación del Proyecto
Diseñando nuestro Proyecto
Requisitos para el Bootcamp
¿Qué tienes que instalar?
Extensión y Terminal recomendada
Acceso al Código del Proyecto
Módulo 02
HTML y CSS
¿Qué es HTML?
La estructura básica
La etiqueta body y más
La etiqueta main, section y img
Formularios
Article y footer
Curso completo de HTML
¿Qué es CSS?
Escribiendo nuestro primer CSS
Selectores CSS
Responsive design
Ejercicios y cursos HTML/CSS
Enlaces en HTML
Comentarios en HTML
Creando múltiples páginas HTML
Arreglando el logo del header
Pseudo-clases en CSS
Aplicar estilos con clases en HTML
La directiva !important y especificidad en CSS
Estilizando la página de empleos
Creando una paginación desde cero
Examen de HTML y CSS
Módulo 03
JavaScript
Introducción a JavaScript
Tipos de datos y variables
Funciones en JavaScript
Examen: Fundamentos de JavaScript
Aprender JavaScript, curso completo
Eventos y JavaScript en el navegador
Manipulación del DOM
Delegación de Eventos
Examen: DOM y Eventos
Optional Chaining
Ejercicios, filtrando resultados
Manejar evento change en JavaScript
Más eventos; input, blur, submit, preventDefault
Cómo recuperar datos de los elementos HTML
Estilando el elemento select
Mejorando las opciones con optgroup
Examen: Atributos, Clases y Filtrado
Aplicando clases CSS dinámicamente con JavaScript
Introducción a JSON
Comprendiendo fetch paso a paso
Mostrando datos dinámicamente con fetch
Evitando inyecciones al pintar HTML dinámico
Separando código en módulos de JavaScript
Creando tu primer Web Component
Iterando nuestro Web Component con atributos
Ejercicios prácticos con el buscador de empleos
Despliegue a producción
Examen Final: JavaScript Moderno
Módulo 04
React
¿Qué es React?
Primeros pasos en React
JSX: La sintaxis de React
Componentes en React
Componentes vs Funciones normales
Creando JobCard: Nuestro primer componente real
Eventos en React
Estado con useState
Renderizado y Virtual DOM
Vite: Empaquetador moderno
Instalación de Vite
Fast Refresh y Actualizaciones de Estado
Migrando el Proyecto DevJobs a React
Ejercicios de práctica
Props - Comunicación entre Componentes
Módulos JavaScript - Import y Export
Paginación - Props y Comunicación Padre-Hijo
Callbacks - Pasar Funciones como Props
Estado por Props - Lifting State Up
Keys y Renderizado de Listas
Terminando la paginación
CSS Modules
Hook useId()
Gestión de Formularios y Filtros
Ejercicios: Formularios y Eventos
Filtros automáticos y Routing básico
Hook useEffect: Efectos secundarios en React
Cuándo usar useEffect
Creando una Single Page Application (SPA) desde cero con React
Custom Hooks: Reutilizar lógica en React
Integrando navegación con formulario de búsqueda
Creando un componente <Route> declarativo
Creando custom hook para formulario
9 Ejercicios prácticos: Router y Formularios
Llamada a la API: Consumiendo datos reales con fetch
Integrando filtros en la petición HTTP
Arreglando paginación con limit y offset
Ejercicios: Mejoras en la aplicación
Problemas con la etiqueta title
Técnica de debounce en el buscador
Hook useRef: referencias y valores que persisten entre renders
Arreglando la paginación
Sincronización de la URL con el buscador
Módulo 05
Estado Global y React Router
Qué es React Router y por qué usarlo
Cómo crear rutas con React Router
Link y hooks useNavigate y useLocation de React Router
Parámetros en React Router con useParams
Trabajando en los estilos del detalle de cada empleo
Navegación a la página de detalle
Ejercicio: terminar de estilar la página de detalle
Hook useSearchParams de React Router
Técnica de lazy load en las rutas
Estilos activos con NavLink
Ejercicios de refuerzo: detalle, paginación y filtros
Autenticación y Prop Drilling
Introducción a React Context
Optimizando el código del Contexto
Usar use en lugar de useContext
Prop Drilling vs Context API
Qué pasa con Redux y por qué hoy casi nunca lo necesitas
Introducción a Zustand para estado global
Store de favoritos con Zustand
Integrar un store de favoritos en la UI
Sincronización del estado global y logout limpio
Rutas protegidas con React Router y estado global
Quitar la persistencia de favoritos al cerrar sesión
Módulo 06
Backend con Node.js y Express
Introducción a Node.js
Examen: Introducción a Node.js
Instalar Node.js y gestionar versiones
Ficheros y sistema de módulos en Node.js
Nuestro primer script con Node.js: leer y escribir archivos
Examen: Gestión de Versiones y Módulos
Trabajar con rutas de archivos en Node.js
Información del sistema operativo e instalación de paquetes
Importante al instalar cualquier paquete en Node.js
Sistema de permisos en Node.js
Creando nuestro propio CLI con Node.js
Creando nuestro primer servidor HTTP y usando watch
Cambiar el puerto usando variables de entorno
Discriminar rutas y devolver respuestas correctas en Node.js
Comprueba que la API funciona bien
Métodos HTTP y cómo debe responder una API
Crear usuarios con POST en una API Node.js
Filtrar usuarios con query params
Introducción a Express: Qué es y para qué sirve
Creando nuestro primer servidor con Express
Diferencias entre usar Express y no usarlo
Middlewares en Express
Rutas con parámetros dinámicos en Express
Devolver los empleos en JSON
Filtrar empleos con query params
Paginación de resultados en Express
Creando nuestra primera REST API
Creando un CRUD con Express
Middleware para parsear el body de las peticiones
Utilizar la REST API y configurar CORS
Aplicando el patrón MVC en nuestra API
Módulo 07
Testing
Pruebas en JavaScript
¡Próximamente!
Pruebas unitarias con Jest
¡Próximamente!
Pruebas de componentes con React Testing Library
¡Próximamente!
Mocking y pruebas de integración
¡Próximamente!
Buenas prácticas de testing
¡Próximamente!
Automatización de tareas con npm scripts
¡Próximamente!
Módulo 08
Inteligencia Artificial
Introducción a la Inteligencia Artificial en el Desarrollo
¡Próximamente!
Herramientas de IA para Desarrolladores
¡Próximamente!
Conexión con la API de OpenAI
¡Próximamente!
Model Context Protocol (MCP)
¡Próximamente!
Generación de Imágenes con Nano Banana
¡Próximamente!
Integración de IA en Aplicaciones Web
¡Próximamente!
Ética y Buenas Prácticas con IA
¡Próximamente!
Módulo 09
TypeScript
Fundamentos de TypeScript
¡Próximamente!
Tipos e interfaces
¡Próximamente!
Integración de TypeScript con React
¡Próximamente!
Beneficios de usar TypeScript en proyectos grandes
¡Próximamente!
Migración de proyectos JavaScript a TypeScript
¡Próximamente!
Módulo 10
SQL
SQL
¡Próximamente!
Creación de bases de datos
¡Próximamente!
Manipulación de datos con SQL
¡Próximamente!
Uso de ORM como Sequelize
¡Próximamente!
Migraciones y seeding de datos
¡Próximamente!
Módulo 11
CI/CD
CI/CD
¡Próximamente!
Configuración de CI/CD con GitHub Actions
¡Próximamente!
Desplegar aplicaciones con GitHub Actions
¡Próximamente!
Módulo 12
DevOps y Docker
DevOps
¡Próximamente!
Conceptos básicos de Docker
¡Próximamente!
Creación de imágenes Docker
¡Próximamente!
Uso de Docker Compose
¡Próximamente!
Integración de Docker en el flujo de trabajo de desarrollo
¡Próximamente!
Examen de conocimientos
Pregunta 1 de 5
¿Cómo accederías en JavaScript al valor del atributo "data-id" de un elemento?
<
div
id
="
user
"
data-id
="
123
"></
div
>
A
element.getAttribute("id")
B
element.dataset.id
C
element.dataId
D
element.values.id
Mostrar pista
Selecciona una opción para continuar
Verificar respuesta