WEB ATELIER (UDIT) · Aprender haciendo, con teoría, práctica y reflexión compartida

Bootstrap CSS: Construcción y Despliegue — Portafolio Listo para Producción

URL: https://ruvebal.github.io/web-atelier-udit/lessons/es/bootstrap/final-project-deployment/

Bootstrap CSS: Construcción y Despliegue — Portafolio Listo para Producción

Resumen de Sesión

Esta sesión final se enfoca en despliegue de producción y completación de proyectos. Los estudiantes aprenderán cómo optimizar sus proyectos Bootstrap para rendimiento de producción, desplegarlos en GitHub Pages, e implementar mejores prácticas de SEO.

¿Por qué es importante? Saber programar es solo la mitad del trabajo. Un desarrollador profesional debe entender cómo llevar su trabajo del entorno de desarrollo a producción, asegurando que sea rápido, accesible y descubrible por motores de búsqueda. Esta sesión cierra el ciclo completo del desarrollo web profesional.

Flujo de la sesión:

  1. Conceptos → Entender qué significa “producción” y por qué optimizamos
  2. Preparación → Organizar el proyecto para despliegue
  3. Optimización → Mejorar rendimiento y SEO
  4. Despliegue → Publicar en GitHub Pages
  5. Verificación → Comprobar que todo funciona correctamente

Objetivos de Aprendizaje

  • Optimizar proyectos Bootstrap para rendimiento de producción
  • Desplegar proyectos exitosamente en GitHub Pages
  • Implementar mejores prácticas de SEO
  • Presentar y criticar proyectos completados

Conceptos Core

Optimización de Producción

La optimización de producción implica preparar tu proyecto para despliegue en el mundo real:

  • Minificación - Reducir tamaños de archivos para carga más rápida
    • ¿Por qué? Un archivo CSS de 200KB puede reducirse a 150KB, mejorando tiempos de carga
    • Ejemplo: bootstrap.css (200KB) vs bootstrap.min.css (150KB)
  • Compresión - Habilitar compresión gzip/brotli
    • ¿Por qué? Reduce el tamaño de transferencia hasta un 70-80%
    • Cuándo: GitHub Pages lo hace automáticamente
  • Entrega CDN - Usar redes de entrega de contenido para rendimiento global
    • ¿Por qué? Los usuarios en Asia descargan desde servidores en Asia, no desde USA
    • Ejemplo: jsDelivr, cdnjs distribuyen archivos globalmente
  • Caché - Implementar estrategias de caché apropiadas
    • ¿Por qué? El navegador guarda archivos localmente para no descargarlos de nuevo
    • Cómo: Usar versiones numeradas en URLs (bootstrap@5.3.0)

Despliegue en GitHub Pages

GitHub Pages es un servicio de hosting gratuito para sitios web estáticos:

  • Hosting gratuito - Sin costo para sitios web básicos
    • Ideal para: Portafolios, documentación, proyectos de curso
    • Limitación: Solo sitios estáticos (HTML/CSS/JS), no backend
  • Despliegue automático - Despliegue directamente desde repositorios Git
    • Ventaja: Cada git push actualiza tu sitio automáticamente
    • Flujo: Código → GitHub → Publicación (en ~1 minuto)
  • Dominios personalizados - Soporte para nombres de dominio personalizados
    • Por defecto: usuario.github.io/proyecto
    • Personalizado: www.miportafolio.com
  • HTTPS - Certificado SSL automático
    • ¿Por qué importa? Seguridad, confianza, mejor ranking en Google

Fundamentos de SEO

La Optimización para Motores de Búsqueda (SEO) ayuda a que tu sitio sea descubierto:

  • HTML semántico - Jerarquía de encabezados y estructura apropiada
    • ¿Por qué? Google entiende mejor tu contenido si está bien organizado
    • Ejemplo: <h1> para título principal, <article> para proyectos, <nav> para navegación
  • Meta tags - Título, descripción y tags de redes sociales
    • Impacto: Aparece en resultados de Google y cuando compartes en redes sociales
    • Clave: <title> (50-60 caracteres), <meta name="description"> (150-160 caracteres)
  • Rendimiento - Tiempos de carga rápidos mejoran rankings de búsqueda
    • Meta: Carga inicial < 3 segundos (Google penaliza sitios lentos)
    • Herramientas: PageSpeed Insights, Lighthouse
  • Accesibilidad - Contenido amigable para lectores de pantalla
    • Beneficio doble: Mejor para usuarios con discapacidades Y mejor SEO
    • Básicos: Atributos alt en imágenes, aria-label en botones, contraste de colores

Proceso de Construcción de Producción

💡 Referencia práctica: Revisa el demo/ incluido en esta lección. Cada archivo tiene comentarios detallados explicando decisiones de diseño y optimización.

Paso 1: Optimización de Estructura de Proyecto

Contexto: Una estructura clara facilita el mantenimiento y el despliegue. GitHub Pages espera encontrar index.html en la raíz.

Organiza tu proyecto para despliegue:

proyecto-portafolio/
├── index.html              # Archivo HTML principal
├── assets/                 # Assets estáticos
│   ├── css/
│   │   ├── bootstrap.min.css
│   │   └── custom.css
│   ├── js/
│   │   ├── bootstrap.bundle.min.js
│   │   └── custom.js
│   └── images/
│       └── (imágenes optimizadas)
├── CNAME                   # Dominio personalizado (opcional)
└── .nojekyll              # Deshabilitar procesamiento Jekyll

Paso 2: Optimización de Bootstrap

¿Por qué minificar? Los archivos minificados eliminan espacios, comentarios y acortan nombres de variables, reduciendo el tamaño ~25-40%.

Ejemplo:

  • bootstrap.css → 200 KB
  • bootstrap.min.css → 150 KB
  • Ahorro: 50 KB = 0.5 segundos menos en 3G

Para producción, usa archivos Bootstrap minificados:

<!-- Bootstrap CSS de producción -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />

<!-- Bootstrap JS de producción -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

Paso 3: Optimización de Rendimiento

Optimiza imágenes y assets:

<!-- Imágenes optimizadas con srcset responsivo -->
<picture>
	<source media="(min-width: 768px)" srcset="hero-large.webp" />
	<source media="(min-width: 480px)" srcset="hero-medium.webp" />
	<img src="hero-small.webp" alt="Imagen hero" class="img-fluid" />
</picture>

<!-- Precarga de recursos críticos -->
<link rel="preload" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" as="style" />
<link rel="preconnect" href="https://cdn.jsdelivr.net" />

Despliegue en GitHub Pages

🎯 Objetivo de aprendizaje: Al final de esta sección, tendrás tu portafolio en vivo con una URL pública que puedes compartir.

Configuración de Repositorio

Decisión importante: ¿Repositorio de usuario o de proyecto?

Tipo Nombre del Repo URL Final Uso
Usuario tu-usuario.github.io https://tu-usuario.github.io Portafolio principal
Proyecto cualquier-nombre https://tu-usuario.github.io/nombre-repo Proyecto específico

Recomendación: Para tu portafolio personal, usa repositorio de usuario.

Pasos:

  1. Crea un repositorio de GitHub

    • Nombre: tu-usuario.github.io (reemplaza con tu usuario real)
    • Visibilidad: Público (requerido para Pages gratuito)
    • NO inicialices con README (lo crearás local)
  2. Habilita GitHub Pages

    • Settings > Pages
    • Aparecerá automáticamente habilitado para repos de usuario
  3. Elige fuente de despliegue

    • Opción 1: Branch (más simple) → Rama main
    • Opción 2: GitHub Actions (más flexible) → Ver workflow en demo/.github/workflows/deploy.yml

Métodos de Despliegue

Método 1: Push Directo (Sitios de Usuario)

Para sitios de usuario (usuario.github.io):

# Inicializar repositorio git
git init
git add .
git commit -m "Commit inicial: Portafolio Bootstrap"

# Añadir origen remoto
git remote add origin https://github.com/tu-usuario/tu-usuario.github.io.git

# Push a rama main (esto despliega automáticamente)
git push -u origin main

Método 2: GitHub Actions (Sitios de Proyecto)

Para sitios de proyecto en repositorios de organización:

# .github/workflows/deploy.yml
name: Deploy to GitHub Pages

on:
 push:
  branches: [main]
 workflow_dispatch:

permissions:
 contents: read
 pages: write
 id-token: write

concurrency:
 group: 'pages'
 cancel-in-progress: false

jobs:
 build:
  runs-on: ubuntu-latest
  steps:
   - name: Checkout
     uses: actions/checkout@v4

   - name: Setup Node
     uses: actions/setup-node@v4
     with:
      node-version: '20'

   - name: Setup Pages
     uses: actions/configure-pages@v4

   - name: Upload artifact
     uses: actions/upload-pages-artifact@v3
     with:
      path: './'

 deploy:
  environment:
   name: github-pages
   url: $
  runs-on: ubuntu-latest
  needs: build
  steps:
   - name: Deploy to GitHub Pages
     id: deployment
     uses: actions/deploy-pages@v4

SEO y Meta Tags

Meta Tags Esenciales

Añade estos a tu sección <head>:

<!-- SEO básico -->
<title>Mi Portafolio Bootstrap - Desarrollador Web</title>
<meta
	name="description"
	content="Desarrollador web profesional especializado en diseño responsivo, frameworks CSS modernos, e interfaces de usuario accesibles." />
<meta name="keywords" content="desarrollador web, bootstrap, diseño responsivo, desarrollo front-end" />

<!-- Open Graph (Facebook) -->
<meta property="og:title" content="Mi Portafolio Bootstrap" />
<meta
	property="og:description"
	content="Portafolio de desarrollador web profesional mostrando proyectos de diseño responsivo." />
<meta property="og:image" content="https://tu-sitio.com/assets/images/og-image.jpg" />
<meta property="og:url" content="https://tu-sitio.com" />
<meta property="og:type" content="website" />

<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Mi Portafolio Bootstrap" />
<meta name="twitter:description" content="Portafolio de desarrollador web profesional" />
<meta name="twitter:image" content="https://tu-sitio.com/assets/images/twitter-card.jpg" />

<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />

Datos Estructurados (JSON-LD)

Añade marcado de esquema para mejor entendimiento de motores de búsqueda:

<script type="application/ld+json">
	{
		"@context": "https://schema.org",
		"@type": "Person",
		"name": "Tu Nombre",
		"jobTitle": "Desarrollador Web",
		"url": "https://tu-sitio.com",
		"sameAs": ["https://github.com/tu-usuario", "https://linkedin.com/in/tu-perfil"],
		"knowsAbout": ["Desarrollo Web", "Diseño Responsivo", "Bootstrap", "CSS", "JavaScript"]
	}
</script>

Práctica Práctica

💡 Nota pedagógica: Los ejercicios siguientes están diseñados para ser realizados paso a paso. No intentes hacer todo a la vez. Cada sección construye sobre la anterior.

Ejercicio Guiado: Entendiendo la Estructura

Tiempo estimado: 20-30 minutos
Objetivo: Comprender cada parte del portafolio antes de crear el tuyo

Antes de crear tu propio portafolio, examina el ejemplo completo en demo/index.html. Este archivo incluye:

  • ✅ Estructura HTML5 semántica completa
  • ✅ Meta tags para SEO y redes sociales
  • ✅ Datos estructurados (Schema.org)
  • ✅ Optimización de rendimiento
  • ✅ Componentes Bootstrap bien implementados

Pasos de exploración:

  1. Abre demo/index.html en tu navegador

    • Navega por todas las secciones
    • Prueba la responsividad (F12 > Device toolbar)
    • Interactúa con el formulario
  2. Inspecciona el código con DevTools (F12)

    • Pestaña Elements: estructura HTML
    • Pestaña Network: recursos cargados
    • Pestaña Lighthouse: auditoría de calidad
  3. Lee los comentarios en el código

    • Cada sección tiene comentarios explicativos
    • Busca los bloques <!-- ========== -->
    • Entiende el “por qué” de cada decisión
  4. Observa el <head> (líneas 1-90)

    • Meta tags SEO (líneas 14-19)
    • Open Graph (líneas 24-31)
    • Optimización rendimiento (líneas 62-66)
  5. Nota los datos estructurados JSON-LD (líneas 826-851)

    • Busca el script al final del body
    • Observa cómo Google entiende tu información

Preguntas de reflexión:

  • ¿Por qué <main> envuelve el contenido principal?
  • ¿Cuál es la diferencia entre <section> y <div>?
  • ¿Por qué algunos links tienen rel="noopener"?
  • ¿Qué hace el atributo loading="lazy" en imágenes?

Ejercicio 1: Portafolio Completo con SEO

Ahora crea tu propio portafolio listo para producción con SEO apropiado. Usa el demo como referencia pero personalízalo con tu información:

<!DOCTYPE html>
<html lang="es">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />

		<!-- Meta Tags SEO -->
		<title>John Doe - Desarrollador Web Profesional | Portafolio Bootstrap</title>
		<meta
			name="description"
			content="Desarrollador web profesional especializado en diseño responsivo, frameworks CSS modernos, e interfaces de usuario accesibles. Portafolio mostrando proyectos Bootstrap y habilidades de desarrollo front-end." />
		<meta
			name="keywords"
			content="desarrollador web, desarrollador bootstrap, diseño responsivo, desarrollador front-end, portafolio" />
		<meta name="author" content="John Doe" />

		<!-- Open Graph -->
		<meta property="og:title" content="John Doe - Desarrollador Web Profesional" />
		<meta
			property="og:description"
			content="Portafolio mostrando proyectos Bootstrap responsivos y habilidades de desarrollo web moderno." />
		<meta property="og:image" content="https://johndoe-portfolio.com/assets/images/og-image.jpg" />
		<meta property="og:url" content="https://johndoe-portfolio.com" />
		<meta property="og:type" content="website" />

		<!-- Twitter Card -->
		<meta name="twitter:card" content="summary_large_image" />
		<meta name="twitter:title" content="John Doe - Portafolio Desarrollador Web" />
		<meta name="twitter:description" content="Portafolio de desarrollador web profesional con proyectos Bootstrap" />
		<meta name="twitter:image" content="https://johndoe-portfolio.com/assets/images/twitter-card.jpg" />

		<!-- Favicon -->
		<link rel="icon" type="image/x-icon" href="/favicon.ico" />

		<!-- Precarga de recursos críticos -->
		<link rel="preload" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" as="style" />
		<link rel="preconnect" href="https://cdn.jsdelivr.net" />

		<!-- Bootstrap CSS -->
		<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />

		<!-- CSS personalizado -->
		<link href="/assets/css/custom.css" rel="stylesheet" />
	</head>
	<body>
		<!-- Navegación con marcado de esquema -->
		<nav
			class="navbar navbar-expand-lg navbar-dark bg-primary"
			itemscope
			itemtype="https://schema.org/SiteNavigationElement">
			<div class="container">
				<a class="navbar-brand" href="/" itemprop="url">
					<span itemprop="name">John Doe</span>
				</a>

				<button
					class="navbar-toggler"
					type="button"
					data-bs-toggle="collapse"
					data-bs-target="#navbarNav"
					aria-label="Toggle navigation">
					<span class="navbar-toggler-icon"></span>
				</button>

				<div class="collapse navbar-collapse" id="navbarNav">
					<ul class="navbar-nav ms-auto" itemscope itemtype="https://schema.org/ItemList">
						<li class="nav-item" itemprop="itemListElement">
							<a class="nav-link" href="#acerca" itemprop="url">
								<span itemprop="name">Acerca de</span>
							</a>
						</li>
						<li class="nav-item" itemprop="itemListElement">
							<a class="nav-link" href="#proyectos" itemprop="url">
								<span itemprop="name">Proyectos</span>
							</a>
						</li>
						<li class="nav-item" itemprop="itemListElement">
							<a class="nav-link" href="#contacto" itemprop="url">
								<span itemprop="name">Contacto</span>
							</a>
						</li>
					</ul>
				</div>
			</div>
		</nav>

		<!-- Contenido principal con datos estructurados -->
		<main itemscope itemtype="https://schema.org/WebSite">
			<!-- Sección Hero -->
			<section id="acerca" class="hero-section bg-gradient-primary py-5">
				<div class="container">
					<div class="row align-items-center">
						<div class="col-lg-6">
							<h1 class="display-4 fw-bold" itemprop="name">Desarrollador Web Profesional</h1>
							<p class="lead" itemprop="description">
								Creo aplicaciones web responsivas, accesibles y de alto rendimiento usando frameworks modernos y mejores
								prácticas.
							</p>
							<div class="d-flex gap-3">
								<a href="#proyectos" class="btn btn-light btn-lg">Ver Mi Trabajo</a>
								<a href="#contacto" class="btn btn-outline-light btn-lg">Ponerse en Contacto</a>
							</div>
						</div>
						<div class="col-lg-6">
							<img
								src="/assets/images/profile.jpg"
								class="img-fluid rounded-circle shadow"
								alt="John Doe - Desarrollador Web Profesional"
								itemprop="image" />
						</div>
					</div>
				</div>
			</section>

			<!-- Sección de Proyectos con marcado de portafolio -->
			<section id="proyectos" class="py-5" itemscope itemtype="https://schema.org/CollectionPage">
				<div class="container">
					<h2 class="text-center mb-5" itemprop="name">Proyectos Destacados</h2>

					<div class="row" itemscope itemtype="https://schema.org/ItemList">
						<div class="col-lg-4 mb-4">
							<article class="card h-100 project-card" itemscope itemtype="https://schema.org/CreativeWork">
								<img src="/assets/images/project1.jpg" class="card-img-top" alt="Plataforma E-commerce" itemprop="image" />
								<div class="card-body">
									<h5 class="card-title" itemprop="name">Plataforma E-commerce</h5>
									<p class="card-text" itemprop="description">
										Solución de e-commerce moderna con diseño responsivo y experiencia de usuario seamless.
									</p>
									<div class="project-tech-stack">
										<span class="badge bg-primary">React</span>
										<span class="badge bg-secondary">Node.js</span>
										<span class="badge bg-success">MongoDB</span>
									</div>
								</div>
								<div class="card-footer">
									<a href="#" class="btn btn-primary btn-sm" itemprop="url">Ver Proyecto</a>
								</div>
							</article>
						</div>

						<div class="col-lg-4 mb-4">
							<article class="card h-100 project-card" itemscope itemtype="https://schema.org/CreativeWork">
								<img src="/assets/images/project2.jpg" class="card-img-top" alt="CMS de Portafolio" itemprop="image" />
								<div class="card-body">
									<h5 class="card-title" itemprop="name">Sistema de Gestión de Contenido</h5>
									<p class="card-text" itemprop="description">CMS personalizado para profesionales creativos.</p>
									<div class="project-tech-stack">
										<span class="badge bg-primary">Vue.js</span>
										<span class="badge bg-info">Bootstrap</span>
										<span class="badge bg-warning">Firebase</span>
									</div>
								</div>
								<div class="card-footer">
									<a href="#" class="btn btn-primary btn-sm" itemprop="url">Ver Proyecto</a>
								</div>
							</article>
						</div>

						<div class="col-lg-4 mb-4">
							<article class="card h-100 project-card" itemscope itemtype="https://schema.org/CreativeWork">
								<img src="/assets/images/project3.jpg" class="card-img-top" alt="App de Tareas Móvil" itemprop="image" />
								<div class="card-body">
									<h5 class="card-title" itemprop="name">App de Gestión de Tareas</h5>
									<p class="card-text" itemprop="description">
										App web progresiva para productividad y gestión de tareas en dispositivos.
									</p>
									<div class="project-tech-stack">
										<span class="badge bg-primary">React Native</span>
										<span class="badge bg-info">PWA</span>
										<span class="badge bg-success">Offline-first</span>
									</div>
								</div>
								<div class="card-footer">
									<a href="#" class="btn btn-primary btn-sm" itemprop="url">Ver Proyecto</a>
								</div>
							</article>
						</div>
					</div>
				</div>
			</section>

			<!-- Sección de Contacto -->
			<section id="contacto" class="py-5 bg-light">
				<div class="container">
					<div class="row justify-content-center">
						<div class="col-lg-8">
							<h2 class="text-center mb-4">Ponerse en Contacto</h2>
							<form class="contact-form" action="/contact" method="POST">
								<div class="row">
									<div class="col-md-6 mb-3">
										<label for="nombre" class="form-label">Nombre</label>
										<input type="text" class="form-control" id="nombre" name="nombre" required />
									</div>
									<div class="col-md-6 mb-3">
										<label for="email" class="form-label">Email</label>
										<input type="email" class="form-control" id="email" name="email" required />
									</div>
								</div>
								<div class="mb-3">
									<label for="mensaje" class="form-label">Mensaje</label>
									<textarea class="form-control" id="mensaje" name="mensaje" rows="5" required></textarea>
								</div>
								<div class="d-grid">
									<button type="submit" class="btn btn-primary btn-lg">Enviar Mensaje</button>
								</div>
							</form>
						</div>
					</div>
				</div>
			</section>
		</main>

		<!-- Pie de página con datos estructurados -->
		<footer class="bg-dark text-white py-4" itemscope itemtype="https://schema.org/Organization">
			<div class="container text-center">
				<p>
					&copy; 2024
					<span itemprop="name">John Doe</span>
					. Construido con Bootstrap y tecnologías web modernas.
				</p>
				<div class="social-links">
					<a href="https://github.com/johndoe" class="text-white me-3" itemprop="sameAs">GitHub</a>
					<a href="https://linkedin.com/in/johndoe" class="text-white me-3" itemprop="sameAs">LinkedIn</a>
					<a href="mailto:john@example.com" class="text-white" itemprop="email">Email</a>
				</div>
			</div>
		</footer>

		<!-- Bootstrap JS -->
		<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

		<!-- JavaScript personalizado -->
		<script src="/assets/js/main.js"></script>

		<!-- Datos Estructurados para Persona -->
		<script type="application/ld+json">
			{
				"@context": "https://schema.org",
				"@type": "Person",
				"name": "John Doe",
				"jobTitle": "Desarrollador Web",
				"url": "https://johndoe-portfolio.com",
				"sameAs": ["https://github.com/johndoe", "https://linkedin.com/in/johndoe"],
				"knowsAbout": ["Desarrollo Web", "Diseño Responsivo", "Bootstrap", "JavaScript", "CSS", "HTML"],
				"address": {
					"@type": "PostalAddress",
					"addressCountry": "US"
				}
			}
		</script>
	</body>
</html>

Lista de Verificación de Despliegue

🎯 Usa esta lista antes de cada despliegue: Imprime o guarda esta checklist para verificar cada proyecto.

Lista de Verificación Pre-Despliegue

Contenido y Personalización:

  • Todos los textos están personalizados (sin placeholders)
  • Información de contacto es real y funcional
  • Links externos abren en nueva pestaña con rel="noopener"
  • No hay console.log() en JavaScript de producción
  • No hay comentarios TODO o FIXME en el código

Imágenes y Multimedia:

  • Todas las imágenes están optimizadas (< 200KB cada una)
  • Imágenes tienen atributos alt descriptivos
  • Imágenes usan loading="lazy" (excepto hero)
  • Formato WebP cuando sea posible (con fallback JPG)
  • Imágenes de Open Graph tienen tamaño correcto (1200x630)

Bootstrap y CSS:

  • Bootstrap CSS/JS usando versiones minificadas de producción
  • CDN tiene atributo integrity para seguridad
  • CSS personalizado carga DESPUÉS de Bootstrap
  • No hay !important innecesarios en CSS
  • Colores cumplen contraste WCAG AA (mínimo 4.5:1)

JavaScript e Interactividad:

  • Todos los enlaces y navegación funcionan correctamente
  • Smooth scroll funciona en enlaces internos
  • Formularios tienen validación HTML5
  • Botones interactivos funcionan (navbar toggle, etc.)
  • No hay errores en la consola del navegador

Responsive Design:

  • El sitio es responsivo en todos los puntos de interrupción
  • Probado en: móvil (320px), tablet (768px), desktop (1200px)
  • Imágenes no se distorsionan en ningún tamaño
  • Texto es legible en pantallas pequeñas (min 16px)
  • Botones son tocables en móvil (min 44x44px)

SEO y Meta Tags:

  • Tag <title> es único y descriptivo (50-60 caracteres)
  • Meta description está presente (150-160 caracteres)
  • Tags Open Graph configurados correctamente
  • URLs absolutas en meta tags (con https://)
  • Datos estructurados JSON-LD incluidos
  • Favicon presente (favicon.ico)

Rendimiento:

  • Lighthouse Performance score > 90
  • First Contentful Paint < 1.8s
  • Largest Contentful Paint < 2.5s
  • Total page weight < 3MB
  • Recursos críticos tienen preconnect/preload

Configuración de GitHub Pages

  • El repositorio es público (requerido para Pages)
  • GitHub Pages está habilitado en configuraciones del repositorio
  • La rama correcta está seleccionada como fuente
  • El dominio personalizado está configurado (si aplica)
  • El repositorio tiene archivo .gitignore apropiado

Verificación Post-Despliegue

  • El sitio carga correctamente en la URL de Pages
  • Todos los componentes interactivos funcionan
  • Las puntuaciones de rendimiento son aceptables
  • Las meta tags SEO son visibles en el código fuente
  • El sitio valida con validador HTML W3C

Preguntas Críticas de Reflexión

Exploración

  • ¿Cuáles aspectos del proceso de despliegue fueron más desafiantes versus directos?
  • ¿Cómo cambió la optimización de producción tu percepción del rendimiento web?

Reflexión

  • ¿Cómo cambia desplegar un proyecto real tu entendimiento del ciclo de desarrollo?
  • ¿De qué maneras afecta SEO y discoverabilidad tu enfoque al desarrollo web?

Conceptualización

  • ¿Cómo se relacionan despliegue y hosting con conceptos más amplios de infraestructura digital?
  • ¿Cuáles son las implicaciones de accesibilidad del rendimiento web y optimización?

Producción

  • ¿Cómo podrían escalar las estrategias de despliegue para proyectos más grandes o equipos?
  • ¿Cuáles son las compensaciones entre diferentes plataformas de hosting y métodos de despliegue?

Exhibición

  • ¿Cómo presentarás tu portafolio desplegado con Bootstrap para demostrar tus habilidades?
  • ¿Cuáles aspectos de tu proyecto muestran las prácticas de desarrollo más profesionales?

Referencias y Lecturas Adicionales

Documentación Oficial

SEO y Analytics

Despliegue y Hosting

Monitoreo de Rendimiento

🎓 Guía Paso a Paso: De Demo a Tu Portafolio

Flujo de Trabajo Recomendado

Semana 1: Comprensión y Setup

  1. ✅ Estudia el demo/ completo (20-30 min)
  2. ✅ Lee todos los comentarios en el código
  3. ✅ Crea tu repositorio tu-usuario.github.io en GitHub
  4. ✅ Clona el demo como punto de partida

Semana 2: Personalización

  1. ✅ Reemplaza información personal (nombre, contacto)
  2. ✅ Actualiza meta tags con tu información
  3. ✅ Añade tus proyectos reales (mínimo 3)
  4. ✅ Cambia colores según tu marca personal

Semana 3: Contenido y Multimedia

  1. ✅ Crea/optimiza todas las imágenes
  2. ✅ Escribe descripciones únicas de proyectos
  3. ✅ Añade tu biografía personal
  4. ✅ Configura formulario de contacto

Semana 4: Optimización y Despliegue

  1. ✅ Ejecuta Lighthouse (objetivo: > 90 en todas)
  2. ✅ Valida HTML con W3C Validator
  3. ✅ Prueba en móviles, tablets, desktop
  4. ✅ Despliega a GitHub Pages
  5. ✅ Comparte tu URL con el curso

Comandos Rápidos

# 1. Clonar el demo como punto de partida
cd ~/proyectos
cp -r ruta/al/demo mi-portafolio
cd mi-portafolio

# 2. Inicializar Git
git init
git add .
git commit -m "chore: Initial commit from Bootstrap demo"

# 3. Conectar con GitHub
git remote add origin https://github.com/tu-usuario/tu-usuario.github.io.git
git branch -M main
git push -u origin main

# 4. Después de hacer cambios
git add .
git commit -m "feat: Personalize portfolio with my information"
git push

# 5. Ver tu sitio (espera 1-2 minutos después del push)
# https://tu-usuario.github.io

Consejos Pro para Estudiantes

  1. Commit frecuentemente

    • Cada sección completada = 1 commit
    • Usa mensajes descriptivos: feat: Add projects section
  2. Prueba en múltiples dispositivos

    • Tu teléfono móvil
    • Tablet (si tienes)
    • DevTools responsive mode
  3. Pide feedback

    • Comparte con compañeros de clase
    • Pregunta al profesor en laboratorios
    • Itera basado en comentarios
  4. Documenta tu proceso

    • Toma capturas de pantalla del antes/después
    • Escribe sobre desafíos en tu README
    • Comparte aprendizajes en redes sociales
  5. Mantén actualizado

    • Añade nuevos proyectos conforme los completas
    • Actualiza habilidades según aprendes
    • Revisa y mejora cada 3-6 meses

¡Felicitaciones!

¡Has completado exitosamente la Ruta de Aprendizaje de Bootstrap CSS! Ahora tienes:

Portafolio moderno responsivo construido con Bootstrap
Código listo para producción optimizado para rendimiento
Sitio web desplegado accesible al mundo
Optimización SEO para discoverabilidad
Prácticas de desarrollo profesional para proyectos futuros

Tu portafolio demuestra tu habilidad para crear aplicaciones web profesionales, accesibles y de alto rendimiento usando herramientas estándar de la industria y mejores prácticas.

🎯 Próximos Pasos

  1. Comparte tu trabajo

    • URL de tu portafolio en el foro del curso
    • LinkedIn con hashtag #WebDevelopment
    • Twitter/X mencionando @tu-profesor
  2. Añade a tu CV

    • Incluye link a tu portafolio
    • Menciona tecnologías: Bootstrap 5, GitHub Pages, SEO
  3. Sigue aprendiendo

    • Añade animaciones con JavaScript
    • Integra con APIs (GitHub API para proyectos)
    • Experimenta con temas oscuros/claros
  4. Ayuda a otros

    • Comparte tu código en GitHub
    • Escribe un artículo sobre lo aprendido
    • Ayuda a compañeros que tengan dificultades

¡Comparte tu trabajo! Actualiza el estado de tu proyecto y muestra tu portafolio Bootstrap completado en nuestra comunidad del curso. Usa el hashtag #WebAtelierPortfolio en redes sociales.