Saltar al contenido
Volver al inicio 100 Días de Código en Python — Día 83: Proyecto de portafolio — tu propio sitio web de portafolio

100 Días de Código en Python — Día 83: Proyecto de portafolio — tu propio sitio web de portafolio

Nivel: Grado décimo Área: Tecnología e Informática Modalidad: Tutorial práctico Fuente: Curso "100 Days of Code: The Complete Python Pro Bootcamp" (Angela Yu, App Brewery). Contenido del Día 83, proyecto de portafolio profesional (categoría Python Web Development).

Este tutorial adapta pedagógicamente el Día 83. Las secciones 📝 Contenido original del curso provienen de dos archivos: 600 - Where are the Videos and the Solution Code-.md (transcripción en español de un mensaje de la instructora) y 600-tarea2.md (el enunciado de la tarea y su pregunta de reflexión). Como en el Día 82, el curso no ofrece guía paso a paso ni código de solución, y este tutorial no entrega un sitio terminado: ofrece planificación, decisiones de diseño, un esqueleto mínimo, pruebas y retos. Todo lo que no está en esos dos archivos (conceptos, fragmentos de código, secciones sobre privacidad y accesibilidad, retos 🟢🟡🟠🔴, proyecto extra y la etapa 2 de Mi Portafolio Profesional) es creación de esta adaptación.

Nota sobre las verificaciones: el 27 de septiembre de 2026, con Python 3.14 y Flask 3.1.3, se ejecutó el esqueleto de la sección 5 con el cliente de pruebas de Flask: la página principal responde con código 200, muestra los proyectos de la lista y una ruta inexistente responde 404. No se publicó ningún sitio ni se creó ninguna cuenta en servicios externos.

🏫 Para el aula: un portafolio es una página pública. Antes de publicarlo, revisa la sección 3 con tu docente y, si eres menor de edad, con tu familia.


Tabla de contenidos

  1. Antes de empezar: ¿dónde están los videos y la solución?
  2. La tarea: tu sitio web de portafolio
  3. Planificar el sitio: contenido, público y diseño
  4. 📖 Privacidad y seguridad: qué publicar y qué no
  5. Elegir la tecnología
  6. Un esqueleto mínimo con Flask (para completar tú)
  7. 📖 Accesibilidad: un portafolio para todos
  8. 🚀 Proyecto del día: construcción por versiones
  9. 🌟 Proyecto extra: la vitrina del curso
  10. 🏗️ Mi Portafolio Profesional — Etapa 2
  11. 🧩 Comprueba lo aprendido
  12. 🤖 Programar con apoyo de IA
  13. 🛠️ Observaciones sobre el material original
  14. 📋 Matriz de trazabilidad
  15. 📦 Evidencias de aprendizaje del Día 83

0. Antes de empezar: ¿dónde están los videos y la solución?

(Fuente: 600 - Where are the Videos and the Solution Code-.md)

📝 Contenido original del curso

"Enhorabuena por lograr un gran hito". Si miras las próximas lecciones te preguntarás: ¿no hay guía paso a paso?, ¿no hay código de solución? Es intencional. Al terminar el curso debes tener las habilidades para conseguir un trabajo como desarrollador de Python, y una de las cosas más importantes que debes poder demostrar es que puedes escribir tu propio código: no el de un tutorial ni el que la instructora te guió, sino código que tú pensaste y escribiste.

Por eso esta sección te ayuda a construir tu portafolio con ideas de proyectos que suelen funcionar bien en entrevistas. Tu trabajo: usar todo lo aprendido, más investigación, búsquedas y repaso de lecciones, para crear los proyectos completos. Así podrás protegerlos con derechos de autor, convertirlos en un negocio, ponerlos en tu portafolio o en GitHub y demostrar en una entrevista que construyes proyectos sin ayuda.

La instructora cuenta que ha visto estudiantes llegar a entrevistas con un proyecto cuyo código ella misma escribió, o proyectos idénticos repetidos en Internet. Dar este paso adicional evita eso. "No digo que sea fácil. Va a ser muy difícil, pero así es como aprendes y progresas".

El curso quiere ser un espacio seguro para jugar, explorar y fallar sin repercusiones: no te preocupes si no puedes, si te equivocas o si no se ve bien; comparte tu código y la comunidad te dará retroalimentación. "Pero también debes estar dispuesto a intentarlo… Y recuerda, como siempre, creo en ti".

📖 Explicación (adaptación)

Este mensaje explica por qué los proyectos de portafolio no tienen solución: un reclutador (o un docente) no quiere ver que sabes copiar, sino que sabes resolver. Un proyecto modesto pero propio vale más que uno espectacular copiado. Y el error es parte del proceso, no una señal de que "no sirves para esto".


1. La tarea: tu sitio web de portafolio

(Fuente: 600-tarea2.md)

📝 Contenido original del curso

Usando lo que aprendiste de desarrollo web, construye tu propio sitio web de portafolio.

Puede tener el diseño que quieras. Es el lugar para mostrar tus habilidades y las cosas que has construido.

Inspírate en otros desarrolladores (se abre en otra pestaña), pero no copies sus diseños: se trata de mostrar lo que tú puedes hacer.

Usa lo aprendido en el Día 65 para planear el sitio: diseño, UI, UX, esquemas de color, tipografías. "No construyas el sitio para otras personas: constrúyelo para sentirte orgulloso".

Si quieres, publícalo para compartirlo con otros estudiantes y que admiren tu trabajo.

Pregunta de la tarea — Momento de reflexión: escribe cómo abordaste el proyecto; qué fue difícil y qué fácil; cómo mejorarías en el próximo; tu mayor aprendizaje; y qué harías distinto. Es tu diario de desarrollador: "no hay respuestas correctas o incorrectas, solo aprendizajes".

Prerequisitos: HTML y CSS (Días 41 a 44), Flask y plantillas Jinja (Días 54 a 57), Bootstrap (Día 58), diseño web (Día 65), Git y GitHub (Día 70), publicar una aplicación (Día 71).


2. Planificar el sitio: contenido, público y diseño

(Sección creada para esta adaptación, desarrollando la indicación de 600-tarea2.md de usar lo aprendido en el Día 65.)

🔍 Antes de programar

Pregunta Ejemplo de cómo pensarla
¿Quién visitará el sitio? Un docente, un comité de becas, un club de programación, una empresa de prácticas
¿Qué debe saber en 30 segundos? Quién eres (sin datos sensibles), qué sabes hacer y tus mejores proyectos
¿Qué acción quieres que haga? Ver un proyecto, abrir tu GitHub, escribirte por un medio seguro
¿Qué contenido tienes ya? Proyectos del curso (Días 1 a 82), el Laboratorio de Datos Abiertos, el traductor Morse
¿Qué te hace distinto? Tus intereses: música, deporte, ambiente, videojuegos, tu región

Secciones típicas de un portafolio

Texto
Portafolio
├── Inicio: nombre (o alias), una frase sobre ti, un botón hacia los proyectos
├── Proyectos: 3 a 6 tarjetas (imagen, título, qué hace, tecnologías, enlaces)
├── Sobre mí: tu historia con la programación y tus intereses (sin datos sensibles)
├── Habilidades: lo que sabes hacer, con evidencia (un proyecto que lo demuestre)
└── Contacto: enlace a GitHub y, si tu docente lo aprueba, un correo institucional

Calidad sobre cantidad: 3 proyectos bien presentados (con capturas, descripción y código limpio) valen más que 30 enlaces sin explicación. Elige proyectos distintos que muestren habilidades variadas: uno de datos, uno web, uno de consola, un juego.

Diseño (repaso del Día 65)

Elemento Decisión Recomendación
Color Una paleta de 2–3 colores principales Un color de acento para los botones; contraste suficiente para leer
Tipografía 1 o 2 familias Una para títulos y otra (o la misma) para el texto; tamaño mínimo cómodo en celular
Jerarquía Qué se ve primero Lo más importante arriba y más grande
Espacio en blanco Respiro entre secciones Menos es más
UX Cómo se navega Menú simple, enlaces que funcionan, se ve bien en celular

📝 Boceta primero en papel (o en una herramienta de diseño) las pantallas de celular y de computador. Cambiar un dibujo toma segundos; cambiar código, horas.


3. 📖 Privacidad y seguridad: qué publicar y qué no

(Sección creada para esta adaptación.)

Un portafolio público puede verlo cualquier persona, en cualquier parte, durante años (aunque luego lo borres, puede quedar en copias o archivos de Internet).

✅ Apropiado ⚠️ Consúltalo primero ❌ No publiques
Tus proyectos y su código Tu foto (puedes usar un avatar o ilustración) Dirección, barrio o ubicación
Un alias o tu nombre (sin apellidos, si lo prefieres) El nombre de tu colegio Número de teléfono o documento de identidad
Tus intereses y habilidades Un correo (mejor uno institucional o creado solo para esto) Horarios o rutinas ("salgo del colegio a las 12")
Enlaces a tu GitHub Fotos de eventos (con permiso de todas las personas que aparecen) Datos de otras personas (compañeros, familia)

Además:

  • Revisa que tus repositorios no contengan contraseñas ni claves de API (Días 35 y 71): si subiste una por error, cámbiala, porque borrar el commit no basta.
  • Un formulario de contacto que envía correos necesita un servicio externo y protección contra spam: para empezar, es más seguro un simple enlace a GitHub.
  • Los servicios de publicación exigen una edad mínima en sus términos: si no la cumples, la cuenta debe ser de tu docente o de la institución.

4. Elegir la tecnología

(Sección creada para esta adaptación. El enunciado no fija la tecnología: "usa lo que aprendiste de desarrollo web".)

Opción Qué aprendes o demuestras Ventajas Desventajas Dónde publicar
HTML + CSS (Días 41–44) Estructura y estilo desde cero Simple, rápido, sin servidor Repetir el HTML de cada tarjeta a mano GitHub Pages (sitios estáticos)
HTML + Bootstrap (Día 58) Diseño adaptable con componentes Se ve profesional rápido Puede parecerse a muchos otros sitios GitHub Pages
Flask + Jinja (Días 54–57) Python en el servidor; plantillas con datos Los proyectos vienen de una lista o JSON: agregar uno no requiere tocar el HTML Necesita un servidor Un proveedor como los del Día 71
Flask + base de datos (Días 63–69) CRUD, autenticación Puedes administrar los proyectos desde el sitio Mucho más complejo; más riesgos de seguridad Proveedor con base de datos

Recomendación para decidir: elige la opción más simple que te permita mostrar lo que quieres mostrar. Si tu fuerte es Python, Flask + Jinja demuestra más que un HTML estático. Si quieres terminar pronto y bien, HTML + Bootstrap es suficiente. Lo que no conviene es elegir la opción más compleja y no terminar.


5. Un esqueleto mínimo con Flask (para completar tú)

(Sección creada para esta adaptación. Verificada con el cliente de pruebas de Flask.)

Este esqueleto no es el portafolio: es el punto de partida mínimo para que los proyectos se muestren desde una lista de Python, como en el blog de los Días 57 a 59. El diseño, las demás páginas y el contenido son tuyos.

Texto
portafolio/
├── app.py
├── templates/
│   └── index.html
└── static/
    └── css/estilos.css      <- tu diseño

app.py

Python
from flask import Flask, render_template

app = Flask(__name__)

PROYECTOS = [
    {"titulo": "Traductor de código Morse", "dia": 82,
     "descripcion": "Programa de consola que traduce texto a Morse.",
     "tecnologias": ["Python"], "repositorio": "https://github.com/usuario/morse"},
]

@app.route("/")
def inicio():
    return render_template("index.html", proyectos=PROYECTOS)

if __name__ == "__main__":
    app.run(debug=True)

templates/index.html

HTML
<!doctype html>
<html lang="es">
<head><meta charset="utf-8"><title>Mi portafolio</title></head>
<body>
  <h1>Mis proyectos</h1>
  {% for proyecto in proyectos %}
    <article>
      <h2>{{ proyecto.titulo }}</h2>
      <p>{{ proyecto.descripcion }}</p>
      <p>Tecnologías: {{ proyecto.tecnologias | join(", ") }}</p>
      <a href="{{ proyecto.repositorio }}">Ver código</a>
    </article>
  {% endfor %}
</body>
</html>

Qué hace cada parte:

  • PROYECTOS es una lista de diccionarios (Día 9): cada diccionario es una tarjeta.
  • render_template envía la lista a la plantilla con el nombre proyectos.
  • {% for %} de Jinja (Día 57) repite el <article> por cada proyecto; | join(", ") es un filtro que une la lista de tecnologías.
  • Para agregar un proyecto, solo agregas un diccionario: el HTML no cambia (principio DRY).

Tu turno (sin solución):

  1. Carga PROYECTOS desde el proyectos.json del Día 82 (pista: json.load, Día 30).
  2. Crea una plantilla base (base.html) con el encabezado y el pie, y hereda de ella ({% extends %}, Día 57).
  3. Agrega las páginas "Sobre mí" y "Contacto".
  4. Agrega tu hoja de estilos con url_for('static', filename='css/estilos.css').

🛠️ Nota: debug=True es solo para tu computador. Al publicar, desactívalo (Día 71): el modo de depuración muestra información interna de tu aplicación a cualquiera.

⚠️ Errores frecuentes

Error Qué ocurre Solución
TemplateNotFound: index.html Flask no encuentra la plantilla La carpeta debe llamarse exactamente templates, junto a app.py
La hoja de estilos no carga La página se ve sin diseño Usa url_for('static', ...) y revisa la ruta; recarga sin caché (Ctrl + F5)
{{ proyecto.titulo }} aparece vacío La clave del diccionario tiene otro nombre Revisa que las claves coincidan exactamente (mayúsculas, tildes)
Enlaces rotos a los repositorios Error 404 en GitHub Repositorios públicos y URL copiadas del navegador
El sitio se ve mal en el celular Texto diminuto o desbordado <meta name="viewport" content="width=device-width, initial-scale=1"> y CSS adaptable

6. 📖 Accesibilidad: un portafolio para todos

(Sección creada para esta adaptación.)

Un sitio accesible lo pueden usar personas con discapacidad visual, motriz o cognitiva, y también es mejor para todos (y para los buscadores).

Práctica Cómo
Texto alternativo en las imágenes <img src="morse.png" alt="Captura del traductor Morse mostrando SOS en puntos y rayas">
Contraste suficiente Texto oscuro sobre fondo claro (o al revés); compruébalo con un verificador de contraste (Día 65)
Estructura con encabezados Un <h1> por página y <h2>, <h3> en orden
Enlaces que se entienden solos "Ver el código del traductor Morse", no "clic aquí"
Idioma declarado <html lang="es">
Navegación con teclado Recorre tu sitio solo con Tab: ¿se ve dónde estás?

7. 🚀 Proyecto del día: construcción por versiones

(Desarrolla la tarea 600-tarea2.md. Las versiones son una propuesta de esta adaptación; la tarea original deja todo el diseño al estudiante.)

Problema

Construir un sitio web de portafolio propio que muestre tus habilidades y proyectos.

Contexto

El sitio te servirá para postularte a un programa técnico, una beca, una práctica o un club de tecnología, y para mostrar a tu familia lo que aprendiste.

Objetivo

Un sitio propio, planeado, accesible y seguro, con al menos 3 proyectos, su código en GitHub y, si es posible, publicado.

Requisitos funcionales

  1. Página de inicio con tu presentación y acceso a los proyectos.
  2. Al menos 3 proyectos con título, descripción, tecnologías, captura y enlace al código.
  3. Sección "Sobre mí" y un medio de contacto seguro.
  4. Navegación entre secciones que funcione en celular y computador.

Restricciones técnicas

  • Diseño propio (inspirado, no copiado).
  • Cumplir la tabla de privacidad (sección 3) y la de accesibilidad (sección 6).
  • Código en un repositorio de GitHub con README.md.
  • Si usas Flask: los proyectos desde una lista o JSON, no escritos a mano en el HTML.

Planificación

  1. Comprender el objetivo y el público. 2. Entradas: tus proyectos, textos e imágenes. 3. Procesos: planear → bocetar → maquetar → estilizar → probar → publicar. 4. Salidas: el sitio y su repositorio. 5. Dividir en secciones. 6. Diseñar (boceto, paleta, tipografía). 7. Implementar por versiones. 8. Probar con la lista de verificación. 9. Corregir. 10. Mejorar con retroalimentación.

Construcción paso a paso

  • Versión 1 — Plan: respuestas de la sección 2, boceto de celular y computador, paleta y tipografías elegidas, lista de proyectos con capturas.
  • Versión 2 — Estructura: el HTML (o las plantillas) de todas las secciones, sin estilos. Comprueba que se entiende sin CSS.
  • Versión 3 — Datos: si usas Flask, los proyectos desde el JSON; si no, las tarjetas completas.
  • Versión 4 — Diseño: CSS o Bootstrap según tu boceto; adaptable al celular.
  • Versión 5 — Calidad: accesibilidad, privacidad, enlaces, ortografía.
  • Versión final — Publicación (opcional, con autorización) y diario del desarrollador.

Pruebas (lista de verificación)

# Comprobación
1 Todas las páginas cargan (en Flask: código 200) y una ruta inexistente muestra un error 404
2 Todos los enlaces funcionan, incluidos los de GitHub
3 El sitio se ve bien en un celular (o con la vista de dispositivo del navegador)
4 Todas las imágenes tienen alt descriptivo
5 El contraste del texto es suficiente
6 No hay datos de la columna "No publiques" de la sección 3
7 No hay contraseñas ni claves en el repositorio
8 debug=True está desactivado en la versión publicada
9 Otra persona encuentra un proyecto y su código en menos de 30 segundos

En Flask puedes automatizar la prueba 1 con el cliente de pruebas (verificado con el esqueleto):

Python
from app import app

cliente = app.test_client()
assert cliente.get("/").status_code == 200
assert cliente.get("/no-existe").status_code == 404
assert "Morse" in cliente.get("/").get_data(as_text=True)

🧪 Prueba y depuración

HTML
<html>
<body>
  <img src="foto.jpg">
  <h3>Mis proyectos</h3>
  <p>Contáctame al 300 123 4567, vivo en el barrio Centro.</p>
  <a href="#">Clic aquí</a>
</body>
</html>

Encuentra cinco problemas: falta lang="es" (y el <meta charset> y viewport); la imagen no tiene alt; empieza con <h3> sin <h1>; publica teléfono y barrio (privacidad); y el enlace "Clic aquí" no dice adónde lleva (y apunta a #).

⭐ Extensión del proyecto

  • 🟢 Reto 1 — Aplicación: agrega un modo oscuro con CSS (prefers-color-scheme).
  • 🟡 Reto 2 — Ampliación: filtra los proyectos por tecnología con una ruta de Flask (/proyectos/<tecnologia>) o con JavaScript.
  • 🟠 Reto 3 — Desafío: incrusta un gráfico interactivo de plotly de tu Laboratorio de Datos Abiertos (fig.write_html(..., full_html=False) genera un fragmento para insertar).
  • 🔴 Reto 4 — Pensamiento computacional: pide a 3 personas distintas (un compañero, un docente, alguien de tu familia) que usen tu sitio mientras piensan en voz alta. Anota dónde dudan, prioriza 3 mejoras y justifica el orden.

8. 🌟 Proyecto extra: la vitrina del curso

(Proyecto creado para esta adaptación; no existe en el curso original.)

Situación

El curso quiere un sitio que muestre los proyectos de todos sus estudiantes para la feria de ciencia y tecnología del colegio.

Requisitos

  1. Un archivo proyectos.json común, al que cada estudiante agrega su ficha (título, alias del autor, descripción, tecnologías, enlace), mediante pull requests en un repositorio del curso (Día 70), administrado por el docente.
  2. Una aplicación Flask que lea el JSON y muestre las fichas en tarjetas, con filtro por tecnología.
  3. Una página de detalle por proyecto (/proyecto/<int:indice>), que responda 404 si el índice no existe.
  4. Una validación que revise que cada ficha tenga todos los campos y que ningún campo contenga datos personales prohibidos (por ejemplo, números de teléfono: busca "expresiones regulares" para detectarlos).

Decisiones que debes tomar (y justificar)

  • ¿Cómo evitan conflictos cuando dos estudiantes editan el mismo archivo a la vez?
  • ¿Quién aprueba lo que se publica? ¿Con qué criterios?

Casos de prueba

  • Una ficha sin título no rompe el sitio: se reporta en la validación.
  • /proyecto/9999 responde 404.

9. 🏗️ Mi Portafolio Profesional — Etapa 2

(Proyecto integrador creado para esta adaptación; etapa 1 en el Día 82. Continuará con los siguientes proyectos de portafolio del curso.)

Etapa 2 (hoy):

  1. Construye tu sitio con el proyecto del día y muestra en él el traductor Morse (Día 82) y, si lo terminaste, el Laboratorio de Datos Abiertos (Día 81).
  2. Usa el proyectos.json del Día 82 como fuente de datos (si usas Flask) o como guía para las tarjetas.
  3. Publica el código en GitHub con un README.md que incluya una captura del sitio.
  4. Completa el diario del desarrollador del Día 83.
  5. Deja preparado el sitio para crecer: cada proyecto nuevo del curso (Días 84 en adelante) debe poder agregarse con una ficha, sin rediseñar.

Producto de la etapa: el sitio, su repositorio y el diario.

Rúbrica del portafolio (para usar al final del bloque):

Criterio Nivel básico Nivel alto
Proyectos 3 proyectos con enlace Proyectos variados, cada uno con captura, descripción, decisiones y diario
Código Repositorios públicos Código limpio, con README.md, pruebas y commits descriptivos
Diseño Se ve ordenado Diseño propio y coherente, adaptable, con buena jerarquía
Accesibilidad Imágenes con alt Cumple toda la tabla de la sección 6
Privacidad y seguridad Sin teléfono ni dirección Cumple toda la tabla de la sección 3; sin secretos en los repositorios
Reflexión Diario completo Diarios que muestran aprendizaje y mejoras entre proyectos

10. 🧩 Comprueba lo aprendido

Conceptuales

  1. ¿Por qué el curso deja de dar videos y soluciones en esta etapa?
  2. ¿Qué diferencia hay entre "inspirarse en" y "copiar" un diseño?
  3. ¿Qué ventaja tiene cargar los proyectos desde un JSON en lugar de escribirlos en el HTML?
  4. Nombra tres datos que no debes publicar en un portafolio y por qué.
  5. ¿Por qué hay que desactivar debug=True al publicar?

Análisis de código

HTML
{% for proyecto in proyectos if "Python" in proyecto.tecnologias %}
  <li>{{ proyecto.titulo }}</li>
{% endfor %}

¿Qué muestra este fragmento de Jinja?

Predicción

Si PROYECTOS está vacío, ¿qué muestra la página del esqueleto? ¿Cómo mostrarías un mensaje como "Pronto habrá proyectos aquí"? (Pista: {% else %} dentro del for de Jinja.)

Depuración

"Mi sitio funciona en mi computador, pero publicado no carga la hoja de estilos". Da dos causas posibles.

Modificación

Cambia el esqueleto para que los proyectos se ordenen del más reciente al más antiguo usando el campo dia.

Creación

Escribe una función validar_ficha(ficha) que devuelva una lista de errores si faltan campos obligatorios o si la descripción supera 200 caracteres.


11. 🤖 Programar con apoyo de IA

Como en el Día 82: en un proyecto de portafolio, la IA es tutora, no autora.

Ciclo de trabajo: formula el problema → inténtalo tú primero → consulta a la IA sobre un punto concreto → lee y entiende → prueba → compara con la documentación oficial → modifica → explica con tus palabras.

Actividad 1 — Diseño sin copiar. Describe a una IA tu público y tus intereses y pídele tres ideas de paleta y tipografía, no código. Elige una, modifícala y explica en tu diario por qué.

Actividad 2 — Auditoría. Pega tu HTML (sin datos personales) y pide a una IA que revise accesibilidad. Comprueba cada sugerencia con la tabla de la sección 6 y con un verificador de contraste; anota cuáles eran correctas.

Actividad 3 — Seguridad. Pregunta a una IA qué riesgos tiene publicar una aplicación Flask con debug=True. Contrasta su respuesta con la documentación oficial de Flask sobre despliegue y con el Día 71.

Declara el uso: agrega al README.md una sección "Uso de IA" con lo que consultaste.


12. 🛠️ Observaciones sobre el material original

Archivo Observación Tratamiento
600 - Where are the Videos...md Es una transcripción automática al español, con algunas frases entrecortadas ("de otra persona. Así que…") Se resume su sentido sin alterar el mensaje
600-tarea2.md No fija tecnología, número de páginas ni contenido mínimo Secciones 2 y 4, y los requisitos del proyecto del día, como propuesta de esta adaptación
600-tarea2.md Sugiere publicar el sitio Se agrega la sección 3 (privacidad) y la advertencia sobre la edad mínima de los servicios, pensando en estudiantes menores de edad
600-tarea2.md Enlace a un artículo de 2017 de freeCodeCamp con portafolios de ejemplo Sigue siendo útil como inspiración; los diseños de ejemplo pueden verse anticuados: inspírate en ideas, no en estilos exactos
Ambos archivos El enunciado está en la sección "Python Web Development" El proyecto admite HTML/CSS estático; se recomienda Flask para demostrar Python (sección 4)

13. 📋 Matriz de trazabilidad

Contenido original Archivo de origen Concepto desarrollado Ejercicio original Reto adicional Proyecto relacionado
Por qué no hay videos ni soluciones; código propio; entrevistas; espacio seguro para fallar; "creo en ti" 600 - Where are the Videos and the Solution Code-.md Sección 0 — — Secciones 7 y 9
Construir un sitio de portafolio; diseño libre; inspirarse sin copiar; plan con el Día 65 (UI, UX, color, tipografía); publicar si se quiere 600-tarea2.md Secciones 1, 2 y 4 Sitio web de portafolio Retos 1–4 de la sección 7 Secciones 7, 8 y 9
Momento de reflexión: diario del desarrollador 600-tarea2.md Sección 7 (versión final) Pregunta de reflexión — Sección 9
(No existe en el curso original) — Secciones 3, 5 y 6 — Privacidad, esqueleto Flask, accesibilidad Secciones 7 y 8
(No existe en el curso original) — — — La vitrina del curso Sección 8
(No existe en el curso original) — — — Mi Portafolio Profesional, etapa 2 Sección 9

14. 📦 Evidencias de aprendizaje del Día 83

  • El plan del sitio: respuestas de la sección 2, bocetos, paleta y tipografías.
  • El sitio funcionando (y publicado, si se autorizó), con la lista de verificación superada.
  • El repositorio en GitHub con README.md, capturas y sección "Uso de IA".
  • El diario del desarrollador del Día 83 (la reflexión que pide el curso).
  • La vitrina del curso (proyecto extra), si se desarrolló en equipo.
  • Cuaderno de errores: TemplateNotFound, rutas de archivos estáticos, claves de diccionario que no coinciden, sitio que no se adapta al celular, imágenes sin alt, datos personales publicados, debug=True en producción.