<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Open Forem: Laura Montironi</title>
    <description>The latest articles on Open Forem by Laura Montironi (@laumontironi).</description>
    <link>https://open.forem.com/laumontironi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3621708%2F90e4d1e7-dd76-43b0-862e-aefd8d409a5f.jpeg</url>
      <title>Open Forem: Laura Montironi</title>
      <link>https://open.forem.com/laumontironi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://open.forem.com/feed/laumontironi"/>
    <language>en</language>
    <item>
      <title>🚀 Construyendo mi primer SaaS con FastAPI y PostgreSQL: los errores reales que casi rompen mi backend</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Mon, 16 Mar 2026 20:54:58 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/construyendo-mi-primer-saas-con-fastapi-y-postgresql-los-errores-reales-que-casi-rompen-mi-1l7i</link>
      <guid>https://open.forem.com/laumontironi/construyendo-mi-primer-saas-con-fastapi-y-postgresql-los-errores-reales-que-casi-rompen-mi-1l7i</guid>
      <description>&lt;p&gt;💡 Lo que aprendí creando una plataforma de cursos mientras todavía estoy aprendiendo desarrollo web.&lt;/p&gt;

&lt;p&gt;Cuando empecé a construir mi primer SaaS pensé que el reto sería hacer funcionar las features: autenticación, cursos, usuarios, base de datos, etc.&lt;/p&gt;

&lt;p&gt;Pero la realidad fue otra.&lt;/p&gt;

&lt;p&gt;El verdadero reto fue arreglar todos los errores inesperados que aparecen cuando conectas muchas piezas a la vez: FastAPI, PostgreSQL, SQLAlchemy, asyncpg, Docker, PgBouncer… y tus propias decisiones de arquitectura.&lt;/p&gt;

&lt;p&gt;En este artículo quiero compartir algunos de los errores reales que encontré construyendo mi SaaS de cursos online, porque muchos de ellos &lt;strong&gt;no aparecen en los tutoriales&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Y honestamente, fueron estos errores los que más me hicieron aprender.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 El proyecto: mi primer SaaS real
&lt;/h2&gt;

&lt;p&gt;Actualmente estoy construyendo una plataforma SaaS de cursos online usando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🅰️ &lt;strong&gt;Angular&lt;/strong&gt; para el frontend&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;FastAPI&lt;/strong&gt; para el backend&lt;/li&gt;
&lt;li&gt;🐘 &lt;strong&gt;PostgreSQL&lt;/strong&gt; desplegado en Supabase&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;SQLAlchemy + asyncpg&lt;/strong&gt; para el acceso a la base de datos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La idea es crear una plataforma donde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;instructores puedan crear cursos&lt;/li&gt;
&lt;li&gt;estudiantes puedan inscribirse&lt;/li&gt;
&lt;li&gt;el sistema gestione usuarios, roles y contenido&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nada extremadamente complejo… hasta que empiezas a construirlo.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❌ Error #1 — Confundir modelos de SQLAlchemy con modelos de Pydantic
&lt;/h2&gt;

&lt;p&gt;Uno de los primeros errores que cometí fue mezclar responsabilidades entre modelos.&lt;/p&gt;

&lt;p&gt;Al principio intenté usar el mismo modelo para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;representar datos en la base de datos&lt;/li&gt;
&lt;li&gt;validar datos que vienen del frontend&lt;/li&gt;
&lt;li&gt;devolver respuestas de la API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pero eso empezó a romper cosas muy rápido.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQLAlchemy&lt;/strong&gt; espera columnas, relaciones y metadata de tabla. &lt;strong&gt;Pydantic&lt;/strong&gt; está pensado para validación y serialización de datos. Son herramientas distintas con propósitos distintos.&lt;/p&gt;

&lt;p&gt;La solución fue separar claramente:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modelo de base de datos:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;__tablename__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;users&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UUID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;primary_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Schema de API:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EmailStr&lt;/span&gt;
    &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parece obvio cuando lo ves después, pero al principio puede ser confuso.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❌ Error #2 — UUID vs Integer en PostgreSQL
&lt;/h2&gt;

&lt;p&gt;Este fue uno de esos bugs que te hacen pensar que todo está roto.&lt;/p&gt;

&lt;p&gt;Mi base de datos en PostgreSQL usaba &lt;code&gt;UUID&lt;/code&gt; como identificadores, pero en algunos modelos del backend había definido el campo como &lt;code&gt;Integer&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Resultado: errores extraños cuando SQLAlchemy intentaba hacer queries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;operator&lt;/span&gt; &lt;span class="n"&gt;does&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="n"&gt;exist&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;uuid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;integer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El problema no era PostgreSQL. Era mi modelo incorrecto.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 Si tu base de datos usa UUID, tu backend también debe usar UUID de forma &lt;strong&gt;consistente&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ❌ Error #3 — PgBouncer y el misterioso &lt;code&gt;statement_cache_size&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Cuando desplegué la base de datos en Supabase apareció un error que jamás había visto antes.&lt;/p&gt;

&lt;p&gt;Todo parecía funcionar… hasta que empezaron a aparecer errores relacionados con &lt;strong&gt;prepared statements&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;El culpable resultó ser &lt;strong&gt;PgBouncer&lt;/strong&gt;, que muchas plataformas usan para gestionar conexiones.&lt;/p&gt;

&lt;p&gt;La solución fue añadir esta configuración al motor de SQLAlchemy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;statement_cache_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No es algo que normalmente aparezca en tutoriales, pero puede romper tu aplicación si usas &lt;code&gt;asyncpg&lt;/code&gt; + PgBouncer.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❌ Error #4 — Un &lt;code&gt;Depends(get_db)&lt;/code&gt; olvidado
&lt;/h2&gt;

&lt;p&gt;Otro error clásico.&lt;/p&gt;

&lt;p&gt;Tenía endpoints funcionando perfectamente… hasta que uno empezó a fallar sin razón aparente.&lt;/p&gt;

&lt;p&gt;Después de revisar todo, el problema era simplemente que había olvidado inyectar la dependencia de la sesión de base de datos en la firma del endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ❌ Sin inyección — la sesión no está disponible
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UUID&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="bp"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;# ✅ Con inyección correcta
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UUID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AsyncSession&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Depends&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_db&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="bp"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ese pequeño detalle significa que FastAPI no inyecta la sesión de base de datos.&lt;/p&gt;

&lt;p&gt;A veces el problema no es arquitectura. A veces es una línea que olvidaste.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❌ Error #5 — El misterioso error de imports en Python
&lt;/h2&gt;

&lt;p&gt;Este me hizo perder bastante tiempo.&lt;/p&gt;

&lt;p&gt;El proyecto tenía varios módulos, y algunos imports empezaron a fallar sin explicación clara.&lt;/p&gt;

&lt;p&gt;La causa: faltaba un simple archivo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sin ese archivo, Python no reconoce el directorio como módulo. Otra lección aprendida.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Lo que realmente estoy aprendiendo
&lt;/h2&gt;

&lt;p&gt;Construir este SaaS me está enseñando algo importante:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programar no es solo escribir código que funcione.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es entender cómo interactúan todas las piezas del sistema:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚙️ el framework&lt;/li&gt;
&lt;li&gt;🧠 el ORM&lt;/li&gt;
&lt;li&gt;🗄️ la base de datos&lt;/li&gt;
&lt;li&gt;🚀 el sistema de despliegue&lt;/li&gt;
&lt;li&gt;🔄 las librerías async&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y muchas veces el aprendizaje viene cuando algo se rompe.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Próximos pasos en el proyecto
&lt;/h2&gt;

&lt;p&gt;Mi objetivo ahora es seguir desarrollando la plataforma añadiendo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📚 gestión de cursos&lt;/li&gt;
&lt;li&gt;🎓 sistema de inscripción de estudiantes&lt;/li&gt;
&lt;li&gt;👨‍🏫 panel de instructor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y seguramente aparecerán muchos más errores interesantes.&lt;/p&gt;

&lt;p&gt;Cuando eso pase… probablemente escribiré otro artículo. 😄&lt;/p&gt;




&lt;p&gt;🔗 Repositorios y enlaces del proyecto&lt;/p&gt;

&lt;p&gt;Si quieres ver el progreso del proyecto o revisar el código:&lt;/p&gt;

&lt;p&gt;💻 Backend&lt;/p&gt;

&lt;p&gt;🐍 FastAPI + PostgreSQL + SQLAlchemy&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/LauMontironi/SaaS-LMS-Backend-FastAPI-PostgreSQL" rel="noopener noreferrer"&gt;https://github.com/LauMontironi/SaaS-LMS-Backend-FastAPI-PostgreSQL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎨 Frontend&lt;/p&gt;

&lt;p&gt;⚡ Angular + API integration&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/LauMontironi/SaaS-LMS-Frontend-FastAPI-PostgreSQL" rel="noopener noreferrer"&gt;https://github.com/LauMontironi/SaaS-LMS-Frontend-FastAPI-PostgreSQL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎥 Demo del proyecto&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://go.screenpal.com/watch/cOeoXPnZHfx" rel="noopener noreferrer"&gt;https://go.screenpal.com/watch/cOeoXPnZHfx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 Portfolio&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://portfoliodev-laumontironi.netlify.app/" rel="noopener noreferrer"&gt;https://portfoliodev-laumontironi.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 romper cosas es parte del proceso.&lt;/p&gt;

&lt;p&gt;Y muchas veces los errores reales enseñan más que cualquier tutorial.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚧 En el mientras tanto</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Mon, 09 Mar 2026 11:39:52 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/en-el-mientras-tanto-4l31</link>
      <guid>https://open.forem.com/laumontironi/en-el-mientras-tanto-4l31</guid>
      <description>&lt;p&gt;En esta etapa de mi aprendizaje estoy trabajando en dos proyectos bastante diferentes entre sí, pero que se complementan mucho en todo lo que estoy aprendiendo.&lt;/p&gt;

&lt;p&gt;Uno es un proyecto en grupo para una empresa constructora y el otro es un proyecto personal mucho más ambicioso: un &lt;strong&gt;SaaS de cursos online&lt;/strong&gt; que estoy construyendo yo sola.&lt;/p&gt;

&lt;p&gt;Trabajar en ambos al mismo tiempo me está permitiendo ver dos realidades muy distintas del desarrollo: colaborar con otros desarrolladores y construir un sistema completo por mi cuenta.&lt;/p&gt;




&lt;h2&gt;
  
  
  👷‍♀️ Proyecto en grupo: sistema de gestión para una empresa constructora
&lt;/h2&gt;

&lt;p&gt;En el proyecto en grupo estamos desarrollando un &lt;strong&gt;sistema de gestión interno para una empresa constructora&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;La idea es construir una aplicación web que permita gestionar diferentes aspectos del trabajo diario de los operarios y del equipo administrativo.&lt;/p&gt;

&lt;p&gt;El sistema tiene distintos &lt;strong&gt;roles de usuario&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👨‍💼 Administrador&lt;/li&gt;
&lt;li&gt;👷 Operario&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada uno tiene diferentes permisos y funcionalidades dentro de la aplicación.&lt;/p&gt;

&lt;p&gt;Entre las funcionalidades principales están:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📋 gestión de obras&lt;/li&gt;
&lt;li&gt;👷 gestión de operarios&lt;/li&gt;
&lt;li&gt;🔔 notificaciones internas&lt;/li&gt;
&lt;li&gt;📸 subida de fotos desde obra&lt;/li&gt;
&lt;li&gt;🧭 paneles diferentes según el rol del usuario&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧰 Tecnologías del proyecto
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Angular&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python + FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base de datos:&lt;/strong&gt; SQL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy:&lt;/strong&gt; Railway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En mi caso estoy trabajando especialmente en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 desarrollo del &lt;strong&gt;frontend en Angular&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔗 preparación de la &lt;strong&gt;integración con el backend&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🧠 diseño de algunos &lt;strong&gt;flujos de la aplicación&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Algo interesante de este proyecto es que estamos empezando desarrollando primero el &lt;strong&gt;frontend sin conectar todavía todo el backend&lt;/strong&gt;, lo que nos permite avanzar más rápido en la estructura de la aplicación.&lt;/p&gt;

&lt;p&gt;Esto me está enseñando varias cosas importantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🏗️ pensar la &lt;strong&gt;arquitectura de una aplicación&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🧩 separar responsabilidades entre frontend y backend&lt;/li&gt;
&lt;li&gt;🔐 trabajar con &lt;strong&gt;roles y permisos&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;👥 diseñar interfaces pensadas para &lt;strong&gt;usuarios reales&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;También estoy aprendiendo algo fundamental: &lt;strong&gt;trabajar en equipo&lt;/strong&gt;.&lt;br&gt;
Cuando desarrollas con otras personas tienes que comunicar decisiones, organizar tareas y pensar cómo encajan las partes que desarrolla cada uno.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Proyecto personal: construir un SaaS de cursos online
&lt;/h2&gt;

&lt;p&gt;En paralelo estoy desarrollando un proyecto personal mucho más grande: un &lt;strong&gt;SaaS de cursos online&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;La idea es construir una plataforma donde instructores puedan crear cursos y los estudiantes puedan consumirlos, con un sistema completo de autenticación, gestión de cursos y contenido.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧰 Stack del proyecto
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Angular&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base de datos:&lt;/strong&gt; PostgreSQL en Supabase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI:&lt;/strong&gt; PrimeNG&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aquí estoy trabajando absolutamente en &lt;strong&gt;todas las partes del sistema&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🗄️ diseño de la base de datos&lt;/li&gt;
&lt;li&gt;⚙️ arquitectura del backend&lt;/li&gt;
&lt;li&gt;🔐 autenticación con JWT&lt;/li&gt;
&lt;li&gt;🌐 endpoints de API&lt;/li&gt;
&lt;li&gt;🧱 estructura del frontend&lt;/li&gt;
&lt;li&gt;🧩 componentes y servicios&lt;/li&gt;
&lt;li&gt;🔗 conexión entre frontend y backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Construir algo así te obliga a entender cómo funciona todo el sistema &lt;strong&gt;de extremo a extremo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Y por supuesto… aparecen muchos errores por el camino.&lt;/p&gt;

&lt;p&gt;De hecho, una de las cosas que más estoy aprendiendo en este proyecto es &lt;strong&gt;debugging de backend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Me he encontrado con problemas bastante interesantes como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔄 diferencias entre &lt;strong&gt;modelos Pydantic y modelos SQLAlchemy&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🆔 conflictos entre &lt;strong&gt;UUID vs Integer en PostgreSQL&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;⚡ problemas con &lt;strong&gt;PgBouncer y asyncpg&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📦 errores por módulos o imports mal estructurados&lt;/li&gt;
&lt;li&gt;🕒 problemas con &lt;strong&gt;datetime y timezone&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🛑 validaciones de roles que fallaban por constraints en la base de datos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Son esos errores que al principio parecen imposibles, pero cuando finalmente los entiendes… aprendes muchísimo sobre cómo funcionan realmente las herramientas.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Lo que estoy aprendiendo trabajando en ambos proyectos
&lt;/h2&gt;

&lt;p&gt;Trabajar en estos dos proyectos al mismo tiempo me está enseñando algo importante:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;programar no es solo escribir código.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;También es:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🏗️ diseñar sistemas&lt;/li&gt;
&lt;li&gt;🗄️ entender bases de datos&lt;/li&gt;
&lt;li&gt;🧭 pensar la arquitectura&lt;/li&gt;
&lt;li&gt;🐞 resolver errores complejos&lt;/li&gt;
&lt;li&gt;📝 documentar&lt;/li&gt;
&lt;li&gt;👥 pensar en los usuarios&lt;/li&gt;
&lt;li&gt;📚 aprender constantemente herramientas nuevas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;También estoy empezando a usar herramientas de IA como &lt;strong&gt;ChatGPT o Claude&lt;/strong&gt; como asistentes para analizar problemas, revisar código o estructurar ideas. Bien utilizadas, se convierten en una herramienta muy potente para aprender más rápido.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌱 Construir mientras aprendo
&lt;/h2&gt;

&lt;p&gt;Algo que intento hacer es no quedarme solo en tutoriales o ejercicios pequeños.&lt;/p&gt;

&lt;p&gt;Prefiero construir &lt;strong&gt;proyectos reales&lt;/strong&gt;, aunque sean imperfectos, porque ahí es donde realmente aparecen los problemas interesantes.&lt;/p&gt;

&lt;p&gt;Es cuando tienes que conectar &lt;strong&gt;frontend, backend, base de datos, autenticación y despliegue&lt;/strong&gt; cuando empiezas a entender cómo funciona todo.&lt;/p&gt;

&lt;p&gt;Todavía queda muchísimo por aprender, pero estos proyectos se están convirtiendo en una especie de laboratorio donde puedo probar ideas, equivocarme, arreglar cosas y seguir mejorando.&lt;/p&gt;

&lt;p&gt;Y al final, creo que esa es una de las mejores formas de aprender a programar.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>learning</category>
      <category>saas</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>🔍 Buscar trabajo también es un trabajo (y nadie te prepara para eso)</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Mon, 02 Mar 2026 09:11:10 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/buscar-trabajo-tambien-es-un-trabajo-y-nadie-te-prepara-para-eso-nb1</link>
      <guid>https://open.forem.com/laumontironi/buscar-trabajo-tambien-es-un-trabajo-y-nadie-te-prepara-para-eso-nb1</guid>
      <description>&lt;p&gt;Terminar el bootcamp fue raro. Durante meses tuve una estructura clara: estudia esto, entrega aquello, el viernes demo. Y de repente… nada. Solo yo, mi portátil y la pregunta clásica: ¿y ahora qué? La respuesta fue: ponerme a trabajar. Pero en otra cosa.&lt;/p&gt;

&lt;p&gt;Lo primero: ordenar la casa Antes de mandar una sola candidatura, me dediqué semanas a construir la base:&lt;/p&gt;

&lt;p&gt;CV en español CV en inglés CV optimizado para ATS (sí, los filtros automáticos son reales y hay que respetarlos) Carta de presentación en ambos idiomas Perfil de LinkedIn actualizado, con destacados y publicaciones Portfolio con todos mis proyectos bien explicados GitHub ordenado (nada de repos abandonados a medias) Blog donde documento el proceso — este mismo Foto profesional (parece una tontería. No lo es.)&lt;/p&gt;

&lt;p&gt;En algún momento tuve que tomar una decisión: dejar de tocar los CVs. Porque siempre hay alguien con una opinión distinta. “Es muy técnico.” “No demuestras suficiente.” “Es demasiado personal.” Nunca hay un CV perfecto. En algún punto hay que soltar y empezar a aplicar.&lt;/p&gt;

&lt;p&gt;El proceso real: candidatura a candidatura Cada día dedico un par de horas a buscar. Y sí — buscar trabajo es un trabajo. Las herramientas que uso para no volverme loca:&lt;/p&gt;

&lt;p&gt;Teal → para organizar todas las candidaturas y no perder el hilo Jobscan → para comparar mi CV con cada oferta y ajustar keywords Simplify → para rellenar formularios sin morir en el intento&lt;/p&gt;

&lt;p&gt;Mi flujo cuando veo una oferta que me interesa:&lt;/p&gt;

&lt;p&gt;Paso el CV por Jobscan Ajusto según la descripción del puesto Aplico (en el idioma de la oferta) Busco al recruiter en LinkedIn Lo agrego y le escribo&lt;/p&gt;

&lt;p&gt;Y vuelta al loop.&lt;/p&gt;

&lt;p&gt;¿Me gusta esta parte? La verdad: no especialmente. Siempre fui más de trabajar en silencio que de hablar de lo que hago. Pero estoy aprendiendo que saber hacer y saber comunicar lo que haces son dos habilidades distintas. Y las dos importan. Así que aquí estoy. Aprendiendo también eso.&lt;/p&gt;

&lt;p&gt;Mientras tanto, no paro Porque esperar con los brazos cruzados no va conmigo. Mientras busco: estoy terminando mi curso de SQL, empezando React de forma autodidacta y arrancando un nuevo proyecto.&lt;/p&gt;

&lt;p&gt;Todavía no tengo trabajo. Pero creo que he optimizado bastante la manera de buscarlo.&lt;/p&gt;

&lt;p&gt;Y hay algo más.&lt;/p&gt;

&lt;p&gt;No soy el perfil más “tradicional”. Estoy empezando en tecnología, pero no estoy empezando en la vida.&lt;/p&gt;

&lt;p&gt;Tengo responsabilidades. Tengo una familia. Mi punto de partida no se parece al de alguien que recién sale al mercado con 22 años.&lt;/p&gt;

&lt;p&gt;Y eso no me resta. Me define.&lt;/p&gt;

&lt;p&gt;Porque cuando digo que quiero entrar en el mundo tech, no es una curiosidad. Es una decisión.&lt;/p&gt;

&lt;p&gt;Sé organizar mi tiempo. Sé sostener procesos largos. Sé trabajar incluso cuando estoy cansada. Y cuando me involucro en un proyecto, me involucro de verdad.&lt;/p&gt;

&lt;p&gt;Quizás necesite flexibilidad horaria. Pero en compromiso, no me gana nadie.&lt;/p&gt;

&lt;p&gt;No estoy aquí para probar suerte. Estoy aquí para quedarme.&lt;/p&gt;

&lt;p&gt;Porque buscar trabajo no es solo enviar CVs. Es construir una narrativa.&lt;/p&gt;

&lt;p&gt;El mercado no premia solo el talento. Premia visibilidad y constancia.&lt;/p&gt;

&lt;p&gt;Si no te ven, no existes.&lt;/p&gt;

&lt;p&gt;Y como en cualquier proyecto: iterar funciona. Aplicar, ajustar, volver a aplicar.&lt;/p&gt;

&lt;p&gt;Seguimos. 🔄&lt;/p&gt;

</description>
      <category>career</category>
      <category>codenewbie</category>
      <category>devjournal</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🎓 El final del bootcamp, el comienzo de mi verdadero camino tech</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Fri, 20 Feb 2026 08:02:27 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/el-final-del-bootcamp-el-comienzo-de-mi-verdadero-camino-tech-4pg3</link>
      <guid>https://open.forem.com/laumontironi/el-final-del-bootcamp-el-comienzo-de-mi-verdadero-camino-tech-4pg3</guid>
      <description>&lt;p&gt;Cuando terminar de estudiar es, en realidad, empezar de verdad.&lt;/p&gt;

&lt;p&gt;Cuando el miedo pesa, pero el deseo pesa más&lt;/p&gt;

&lt;p&gt;Empecé este camino con muchísimas dudas, miedos, incertidumbre y muy poca fe en mí misma. Pero también con una certeza: necesitaba hacerlo para salir del agujero en el que me sentía.&lt;/p&gt;

&lt;p&gt;Sabía que no iba a ser fácil. Y no lo fue.&lt;/p&gt;

&lt;p&gt;Hubo muchos momentos de desesperación. Me creía vieja, incapaz. Pensaba que quizás estaba errando otra vez en el camino. Solo tenía clara una cosa: no me gustaba mi profesión… y esto me encantaba.&lt;/p&gt;

&lt;p&gt;Pero esta área tiene mucho FOMO.&lt;/p&gt;

&lt;p&gt;Lenguajes hay miles. Ves ofertas de trabajo y piden 400 tecnologías que no sabes, y ni siquiera sientes que dominas bien la que estás estudiando. Cada día la IA lanza algo nuevo. Cada día hay más perfiles tech que te hacen dudar: que si Twitch, que si Discord, que si no sé qué más… tantos canales, tantos divulgadores, tanta información.&lt;/p&gt;

&lt;p&gt;Y ojo, no digo que no sea bueno. Pero abruma.&lt;/p&gt;

&lt;p&gt;A veces la cantidad de información hace difícil centrarse. Elegir un camino cuando el bosque es enorme puede paralizar. Quizás por eso —y por todo lo que cuento en este blog— decidí hacer un bootcamp y marcar un rumbo claro dentro de tanto ruido.&lt;/p&gt;

&lt;p&gt;Fue difícil. Sobre todo cuando mis compañeros podían ser mis hijos (bueno… tampoco tanto, pero casi 😅). Tenían 19, 20 años… el mayor 33. Otras vidas, otros caminos, otras responsabilidades. Otro todo, básicamente.&lt;/p&gt;

&lt;p&gt;Y mantenerse centrado cuando el bosque es tan grande y tan abrumador… cuesta.&lt;/p&gt;

&lt;p&gt;Mantenerse centrado cuando todo alrededor hace ruido.&lt;/p&gt;

&lt;p&gt;Uno sabe que debe compararse solo consigo mismo. Pero a veces eso cuesta. Y cuesta muchísimo.&lt;/p&gt;

&lt;p&gt;Me llevó 10 años tomar la decisión de cambiar el rumbo. Diez años. Una vida.&lt;/p&gt;

&lt;p&gt;Por miedo a fracasar. Por miedo a empezar de cero. Por sentirme vieja para una startup (sí, sí… con 24 años ya me sentía vieja).&lt;/p&gt;

&lt;p&gt;Me reprocho mucho. Y al mismo tiempo me felicito por haber tenido el coraje de hacerlo en el entorno más difícil posible: tres hijos pequeños, súper dependientes y demandantes; en otro país; y con diez años más encima.&lt;/p&gt;

&lt;p&gt;Se ve que me gusta el camino difícil.&lt;/p&gt;

&lt;p&gt;🤷🏼‍♀️&lt;/p&gt;

&lt;p&gt;Me reprocho a medias, porque hace diez años ni siquiera se me había cruzado por la cabeza esto del código. Ya sabía que algo no andaba bien, pero me llevó años de pelea conmigo misma descubrirlo.&lt;/p&gt;

&lt;p&gt;Este viaje comenzó en mi cabeza, embarazada de mi tercer hijo. Y lo pude materializar dos años más tarde.&lt;/p&gt;

&lt;p&gt;Este camino recién comienza. Tengo mucho que aprender, mucha experiencia que ganar.&lt;/p&gt;

&lt;p&gt;Pero por primera vez en mi vida profesional puedo decir que me gusta lo que hago. Que disfruto trabajar de esto. Y que estoy profundamente feliz de haberlo conseguido.&lt;/p&gt;

&lt;p&gt;Y aunque hoy pueda decir que lo logré —que terminé, que aprendí, que sobreviví al bootcamp y a mis propios miedos— la verdad es que esto no es un final.&lt;/p&gt;

&lt;p&gt;Es el comienzo de verdad.&lt;/p&gt;

&lt;p&gt;Porque estudiar era la base. Lo que viene ahora es el salto: buscar trabajo, enfrentar entrevistas, recibir silencios, tal vez rechazos, seguir formándome, seguir dudando, seguir creciendo.&lt;/p&gt;

&lt;p&gt;Este blog nació como una forma de ordenar mi cabeza. Y va a seguir siendo eso.&lt;/p&gt;

&lt;p&gt;Voy a documentar cada paso de esta nueva etapa: la búsqueda de empleo, las entrevistas, los “no”, los “casi”, los aprendizajes, las estrategias, los errores y —ojalá— el momento en que llegue ese primer “sí”.&lt;/p&gt;

&lt;p&gt;Si algo aprendí en estos años es que el miedo no desaparece. Se camina con él.&lt;/p&gt;

&lt;p&gt;Y esta vez, el deseo pesa más.&lt;/p&gt;

&lt;p&gt;Así que sí.&lt;/p&gt;

&lt;p&gt;Terminar de estudiar es, en realidad, empezar de verdad.&lt;/p&gt;

&lt;p&gt;Y yo recién estoy empezando.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>codenewbie</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>🚀 El día que dejé de 'practicar' y empecé a programar de verdad</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Mon, 16 Feb 2026 21:20:25 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/el-dia-que-deje-de-practicar-y-empece-a-programar-de-verdad-1b6k</link>
      <guid>https://open.forem.com/laumontironi/el-dia-que-deje-de-practicar-y-empece-a-programar-de-verdad-1b6k</guid>
      <description>&lt;p&gt;Hay un momento en todo bootcamp en el que las excusas se terminan. Ya no vale el "estoy haciendo un ejercicio" o "es solo para clase". Llega el &lt;strong&gt;Proyecto Final&lt;/strong&gt; y, de repente, la cosa se pone seria.&lt;/p&gt;

&lt;p&gt;Después de meses peleándome con el DOM, entendiendo Angular, construyendo APIs con FastAPI y rompiendo cosas (sí, incluso en producción 😅), tocó levantar &lt;strong&gt;UpgradeFood&lt;/strong&gt;. Y no ha sido precisamente un paseo por el campo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧠 El ecosistema: Lo que hay bajo el capó&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Este no es el típico "Hola Mundo". He montado una arquitectura completa donde cada pieza tiene que hablarse con la otra sin explotar en el intento:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; Angular (con sus Signals y estados que me han dado la vida).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI (Python puro al servicio del caos).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base de Datos:&lt;/strong&gt; MySQL viviendo en &lt;strong&gt;Railway&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imágenes:&lt;/strong&gt; Todo gestionado en la nube con &lt;strong&gt;Cloudinary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Emails:&lt;/strong&gt; Confirmaciones reales con &lt;strong&gt;Resend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploy:&lt;/strong&gt; Backend en Railway y Frontend en &lt;strong&gt;Firebase&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💥 Storytime: El día que borré el repositorio (y casi mi salud mental)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sí, pasó. &lt;strong&gt;Borré el repo del backend en GitHub.&lt;/strong&gt; Con el backend ya desplegado, la base de datos conectada y todo funcionando... de repente, puf, desaparece. Ese silencio que se queda en la habitación es indescriptible. Pero ahí aprendí la lección de oro: &lt;strong&gt;Git no es opcional, es supervivencia.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gracias a que lo tenía en local y a que el deploy en Railway no se inmuta si borras el origen, pude reconstruirlo todo: reconfigurar variables de entorno, conectar remotos y volver a la vida. No es el error lo que te define, es cómo lo levantas cuando todo arde.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ Romper para aprender (Mi especialidad)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;He crasheado el backend más veces de las que quiero admitir. ¿Mis "grandes éxitos"?&lt;/p&gt;

&lt;p&gt;Cambiar un nombre de archivo y cargarme todos los imports.&lt;/p&gt;

&lt;p&gt;Tener el &lt;strong&gt;CORS&lt;/strong&gt; mal configurado y que Angular me ignorara sistemáticamente.&lt;/p&gt;

&lt;p&gt;Variables de entorno que "juraría" que estaban bien... pero no.&lt;/p&gt;

&lt;p&gt;El drama de los &lt;strong&gt;emails&lt;/strong&gt;: Descubrir que en modo testing solo me llegaban a mí porque no había "verificado el dominio". Spoiler: No siempre es culpa de tu código, a veces es la infraestructura.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧩 Lo que realmente he aplicado (y funciona)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Más allá de los sustos, &lt;strong&gt;UpgradeFood&lt;/strong&gt; hace cosas muy potentes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Auth Real:&lt;/strong&gt; Registro, Login y protección de rutas con &lt;strong&gt;JWT&lt;/strong&gt;. Si no tienes el token o no perteneces a la "familia", no pasas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gestión de Reservas:&lt;/strong&gt; Validar disponibilidad, roles de admin vs cliente y control total de la base de datos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Feedback Visual:&lt;/strong&gt; Nada de alertas feas; he usado SweetAlert para que el usuario sepa qué está pasando.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tipado Real:&lt;/strong&gt; He dicho adiós al any. Si algo se rompe, prefiero que me lo diga TypeScript antes que el usuario.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;🎓 Lo que nadie te dice del proyecto final&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El código es solo el 50%. El resto es:&lt;/p&gt;

&lt;p&gt;Gestionar la frustración cuando algo que funcionaba ayer, hoy no.&lt;/p&gt;

&lt;p&gt;Aprender a debuggear sin entrar en pánico (bueno, con un poco de pánico).&lt;/p&gt;

&lt;p&gt;Entender que &lt;strong&gt;"funciona en mi máquina"&lt;/strong&gt; no sirve de nada si no funciona en el deploy.&lt;/p&gt;

&lt;p&gt;He pasado de hacer ejercicios sueltos a entender cómo se habla un frontend en Firebase con un backend en Railway. He pasado de tener miedo a tocar la API, a romperla a propósito para entender por qué fallaba.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💬 Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si algo me llevo de estas semanas es que no necesitas saberlo todo para empezar algo grande. Necesitas &lt;strong&gt;bases sólidas, mucha paciencia y la capacidad de volver a empezar.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hoy ya no siento que estoy "aprendiendo a programar". &lt;strong&gt;Estoy programando.&lt;/strong&gt; Y aunque me ha pasado de todo, aquí sigo. Construyendo.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Proyecto en vivo
&lt;/h3&gt;

&lt;p&gt;👉 Aplicación desplegada:&lt;br&gt;&lt;br&gt;
&lt;a href="https://upgradefood.web.app/" rel="noopener noreferrer"&gt;https://upgradefood.web.app/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Código fuente
&lt;/h3&gt;

&lt;p&gt;👉 Backend (FastAPI + MySQL + JWT):&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/LauMontironi/UpgradeHub_final_project_Backend" rel="noopener noreferrer"&gt;https://github.com/LauMontironi/UpgradeHub_final_project_Backend&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 Frontend (Angular):&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/LauMontironi/UpgradeHub_final_project_Frontend" rel="noopener noreferrer"&gt;https://github.com/LauMontironi/UpgradeHub_final_project_Frontend&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🤯 Parte 2: Del caos al click mental: conectar Angular con el mundo real (y sobrevivir)</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Sat, 31 Jan 2026 18:05:38 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/parte-2-del-caos-al-click-mental-conectar-angular-con-el-mundo-real-y-sobrevivir-55fc</link>
      <guid>https://open.forem.com/laumontironi/parte-2-del-caos-al-click-mental-conectar-angular-con-el-mundo-real-y-sobrevivir-55fc</guid>
      <description>&lt;p&gt;Seguimos… y ahora sí empezó el caos de verdad 😂&lt;/p&gt;

&lt;p&gt;En el post anterior dejé el proyecto funcionando online con login y registro, backend en Render, frontend en Netlify y base de datos en Railway.&lt;/p&gt;

&lt;p&gt;Yo feliz.&lt;/p&gt;

&lt;p&gt;Ilusa.&lt;/p&gt;

&lt;p&gt;Porque ahí es cuando empieza lo bueno de verdad: hacer que una app deje de ser “pantallas bonitas” y empiece a vivir con datos reales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;De “todo mock” a “esto ya es real”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Después de tener el login funcionando, hice algo que fue CLAVE:&lt;/p&gt;

&lt;p&gt;👉 Crear datos mock para poder pintar las cards en la app.&lt;/p&gt;

&lt;p&gt;¿Para qué?&lt;br&gt;
Para ver el layout real, practicar los bucles y entender cómo se iba a ver mi dashboard familiar antes de conectar todo a la base de datos.&lt;/p&gt;

&lt;p&gt;Ahí empecé a jugar fuerte con:&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/for"&gt;@for&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;@if&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/switch"&gt;@switch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y por primera vez sentí que Angular no era solo teoría rara, sino que empezaba a tener sentido visual.&lt;/p&gt;

&lt;p&gt;Pero claro… eso era mentira.&lt;br&gt;
Porque todo era falso.&lt;br&gt;
Nada venía de la base de datos todavía.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conectar Angular con mi backend real = Bienvenida al drama&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El siguiente paso era obvio:&lt;/p&gt;

&lt;p&gt;👉 Dejar de usar mocks&lt;br&gt;
👉 Traer los datos reales desde mi API&lt;/p&gt;

&lt;p&gt;Y aquí fue donde se me complicó la vida.&lt;/p&gt;

&lt;p&gt;Intenté hacerlo ANTES de que lo explicaran bien en clase (clásica yo adelantándome 😅).&lt;br&gt;
Leí material, pregunté a la IA, probé cosas… pero no entendía del todo:&lt;/p&gt;

&lt;p&gt;dónde iban los servicios&lt;/p&gt;

&lt;p&gt;cómo se configuraban los providers&lt;/p&gt;

&lt;p&gt;qué papel jugaban los environments&lt;/p&gt;

&lt;p&gt;por qué unas cosas iban en componentes y otras no&lt;/p&gt;

&lt;p&gt;Resultado:&lt;br&gt;
💥 Colapso mental.&lt;/p&gt;

&lt;p&gt;Varias batallas con mi amigo Gregorio (ChatGPT) después…&lt;br&gt;
LO CONSEGUÍ.&lt;/p&gt;

&lt;p&gt;Funcionaba.&lt;/p&gt;

&lt;p&gt;Pero… no lo entendía del todo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El momento “AHHHHH ahora sí” 🤣&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un par de clases más adelante, el profe explicó exactamente:&lt;/p&gt;

&lt;p&gt;cómo se conectan los servicios&lt;/p&gt;

&lt;p&gt;cómo reemplazar los mocks&lt;/p&gt;

&lt;p&gt;qué archivos tiene que tener un proyecto Angular&lt;/p&gt;

&lt;p&gt;para qué sirve cada cosa&lt;/p&gt;

&lt;p&gt;Y ahí fue cuando dije:&lt;/p&gt;

&lt;p&gt;“AHHHHH ahora sí.”&lt;/p&gt;

&lt;p&gt;Revisé mi código…&lt;br&gt;
Y estaba bien.&lt;/p&gt;

&lt;p&gt;Porque lo había probado.&lt;br&gt;
Porque lo había cotejado con la IA.&lt;/p&gt;

&lt;p&gt;Pero recién ahí entendí de verdad qué estaba haciendo.&lt;/p&gt;

&lt;p&gt;Y esa diferencia… era enorme!&lt;/p&gt;

&lt;p&gt;Lo mismo me pasó con los formularios reactivos.&lt;/p&gt;

&lt;p&gt;Yo ya tenía cosas hechas con ayuda de la IA:&lt;/p&gt;

&lt;p&gt;FormGroup&lt;/p&gt;

&lt;p&gt;ReactiveFormsModule&lt;/p&gt;

&lt;p&gt;Validaciones&lt;/p&gt;

&lt;p&gt;Estados como touched, dirty, valid, invalid&lt;/p&gt;

&lt;p&gt;Pero era como usar magia sin saber el hechizo.&lt;/p&gt;

&lt;p&gt;Hasta que el profe lo explicó.&lt;/p&gt;

&lt;p&gt;Y otra vez:&lt;/p&gt;

&lt;p&gt;🧠 Click cerebral&lt;br&gt;
⚡ Neuronas conectadas&lt;/p&gt;

&lt;p&gt;Por eso remarco tanto algo:&lt;/p&gt;

&lt;p&gt;La IA ayuda muchísimo,&lt;br&gt;
pero entender lo que haces cambia completamente el juego.&lt;/p&gt;

&lt;p&gt;Una cosa es que funcione.&lt;br&gt;
Otra muy diferente es que tú sepas por qué funciona.&lt;br&gt;
Y, la importancia de tener profesionales como los profes que transmitan su saber de manera clara y simple. Una cosa es saber y otra cosa es saber bajar la información a gente como uno que no pertenece al mundillo o que estamos recién entrando en el. &lt;/p&gt;

&lt;p&gt;Confiar en lo aprendido y entender para simplificar.Es decir :  Keep it simple (aunque yo no me hice caso al principio 😅)&lt;/p&gt;

&lt;p&gt;Mi proyecto se complicó también porque me adelanté a muchos conceptos.&lt;/p&gt;

&lt;p&gt;Y además cometí un error clásico:&lt;/p&gt;

&lt;p&gt;👉 No tener las ideas 100% claras desde el minuto cero.&lt;/p&gt;

&lt;p&gt;Entre:&lt;/p&gt;

&lt;p&gt;páginas&lt;/p&gt;

&lt;p&gt;componentes padre&lt;/p&gt;

&lt;p&gt;componentes hijo&lt;/p&gt;

&lt;p&gt;rutas&lt;/p&gt;

&lt;p&gt;datos que viajan de un lado a otro&lt;/p&gt;

&lt;p&gt;…es MUY fácil liarla.&lt;/p&gt;

&lt;p&gt;Y luego vino otro golpe de realidad:&lt;/p&gt;

&lt;p&gt;Mi base de datos estaba demasiado complicada&lt;/p&gt;

&lt;p&gt;Había normalizado tanto las tablas que:&lt;/p&gt;

&lt;p&gt;👉 Todo dependía de todo&lt;br&gt;
👉 Todo necesitaba autenticación&lt;br&gt;
👉 Todo tenía relaciones cruzadas&lt;/p&gt;

&lt;p&gt;En backend era “bonito”.&lt;br&gt;
En frontend era una pesadilla.&lt;/p&gt;

&lt;p&gt;Conclusión:&lt;br&gt;
🔁 Refactoricé la base de datos&lt;br&gt;
🔁 Cambié estructura&lt;br&gt;
🔁 Volví a hacer gran parte del backend&lt;/p&gt;

&lt;p&gt;Dolió. Mucho.&lt;br&gt;
Pero aprendí más que en cualquier otra fase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two-way binding y el gran momento mágico ✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cuando vimos el two-way binding en clase, al principio no entendí NADA (real).&lt;/p&gt;

&lt;p&gt;Pero soy cabezona.&lt;/p&gt;

&lt;p&gt;Horas después… de repente…&lt;br&gt;
💡 CLICK.&lt;/p&gt;

&lt;p&gt;Y ahí dije:&lt;/p&gt;

&lt;p&gt;👉 “ESTO es lo que necesito para crear eventos en mi proyecto.”&lt;/p&gt;

&lt;p&gt;Tuve lío con los tipos de datos (mucho date, Angular enfadado 😅), pero lo conseguí.&lt;/p&gt;

&lt;p&gt;Y cuando algo que no entiendes durante días de repente tiene sentido…&lt;/p&gt;

&lt;p&gt;Es magia pura.&lt;/p&gt;

&lt;p&gt;Estado actual de mi app&lt;/p&gt;

&lt;p&gt;Mi proyecto no está perfecto ni súper limpio, pero funciona. Y eso, para mí, es enorme.&lt;/p&gt;

&lt;p&gt;Ahora mismo mi app tiene:&lt;/p&gt;

&lt;p&gt;1️⃣ Landing page&lt;br&gt;
2️⃣ Registro + Login&lt;br&gt;
3️⃣ Creación de familia (Welcome)&lt;br&gt;
4️⃣ Dashboard familiar&lt;br&gt;
5️⃣ Crear / eliminar / actualizar miembros&lt;br&gt;
6️⃣ Gestión de eventos (ver, crear, editar, eliminar, filtrar por miembro)&lt;br&gt;
7️⃣ Vista general del panel familiar&lt;br&gt;
8️⃣ Página de error (que me encanta 😂)&lt;/p&gt;

&lt;p&gt;Todo esto conectado entre:&lt;/p&gt;

&lt;p&gt;Angular (frontend)&lt;/p&gt;

&lt;p&gt;FastAPI (backend)&lt;/p&gt;

&lt;p&gt;MySQL en Railway (base de datos)&lt;/p&gt;

&lt;p&gt;Autenticación JWT&lt;/p&gt;

&lt;p&gt;Si me lo dicen hace unos meses… no me lo creo.&lt;/p&gt;

&lt;p&gt;Lo más real de todo este proceso&lt;/p&gt;

&lt;p&gt;Lo más duro no fue escribir código.&lt;/p&gt;

&lt;p&gt;Fue:&lt;/p&gt;

&lt;p&gt;perderme&lt;/p&gt;

&lt;p&gt;romper cosas&lt;/p&gt;

&lt;p&gt;pasar 2 horas arreglando algo sin saber ni qué toqué&lt;/p&gt;

&lt;p&gt;seguir instrucciones de la IA y acabar peor que antes&lt;/p&gt;

&lt;p&gt;no entender por qué algo que “debería funcionar” no funciona&lt;/p&gt;

&lt;p&gt;Pero también fue:&lt;/p&gt;

&lt;p&gt;pedir ayuda&lt;/p&gt;

&lt;p&gt;volver a lo simple&lt;/p&gt;

&lt;p&gt;comparar con lo que enseñan los profes&lt;/p&gt;

&lt;p&gt;probar, romper, rehacer&lt;/p&gt;

&lt;p&gt;Y sobre todo:&lt;/p&gt;

&lt;p&gt;👉 No rendirme.&lt;/p&gt;

&lt;p&gt;Mi yo de hace unos meses veía esto imposible.&lt;br&gt;
Hoy no solo lo hice… sino que entiendo cada vez más lo que estoy haciendo.&lt;/p&gt;

&lt;p&gt;Y eso vale oro 💛&lt;/p&gt;

&lt;p&gt;🚀 Ya puedes probar la app  (faltan mil cosas y hay mucho que mejorar, lo se ) &lt;/p&gt;

&lt;p&gt;Después de muchas vueltas, bugs, refactors y momentos de crisis existencial…&lt;br&gt;
la app ya está funcionando online conectando:&lt;/p&gt;

&lt;p&gt;🅰️ Frontend en Angular&lt;br&gt;
🐍 Backend en FastAPI&lt;br&gt;
🗄️ Base de datos MySQL en Railway&lt;/p&gt;

&lt;p&gt;Si quieres curiosear, puedes entrar con este usuario demo:&lt;/p&gt;

&lt;p&gt;🔐 Usuario: &lt;a href="mailto:laura.lopez@demo.com"&gt;laura.lopez@demo.com&lt;/a&gt;&lt;br&gt;
🔑 Password: Demo1234!&lt;/p&gt;

&lt;p&gt;👉 Frontend (App en vivo):&lt;br&gt;
&lt;a href="https://family-scheduler-front.netlify.app/" rel="noopener noreferrer"&gt;https://family-scheduler-front.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 Código Frontend:&lt;br&gt;
&lt;a href="https://github.com/LauMontironi/Family-scheduler-project-Frontend" rel="noopener noreferrer"&gt;https://github.com/LauMontironi/Family-scheduler-project-Frontend&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 Código Backend:&lt;br&gt;
&lt;a href="https://family-scheduler-project-backend.onrender.com/" rel="noopener noreferrer"&gt;https://family-scheduler-project-backend.onrender.com/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>De nuevo estoy de vuelta… y JS (disfrazado de ts) riéndose en mi cara 😈</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Tue, 27 Jan 2026 12:51:37 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/de-nuevo-estoy-de-vuelta-y-js-disfrazado-de-ts-riendose-en-mi-cara-n3h</link>
      <guid>https://open.forem.com/laumontironi/de-nuevo-estoy-de-vuelta-y-js-disfrazado-de-ts-riendose-en-mi-cara-n3h</guid>
      <description>&lt;p&gt;Cuando creía que amaba JavaScript…&lt;br&gt;
cuando pensaba que por fin había entendido la mecánica…&lt;/p&gt;

&lt;p&gt;pues erase everything.&lt;/p&gt;

&lt;p&gt;Toca re-aprender TODO JavaScript, pero ahora en modo Angular + TypeScript, que como siempre digo, técnicamente viene a facilitar el maquetado… o algo así… peeeero en realidad es volver a aprender a escribir código de una forma completamente diferente.&lt;/p&gt;

&lt;p&gt;Y claro, al principio mi cerebro hace lo de siempre:&lt;br&gt;
👉 “¿Cómo haría esto en JS sin Angular?”&lt;br&gt;
Y ahí estoy, comparando, traduciendo mentalmente… sacando humo por las neuronas.&lt;/p&gt;

&lt;p&gt;Cambiar el chip cuesta (y mucho)&lt;/p&gt;

&lt;p&gt;Venía de mucho Python, mucho FastAPI, todo muy ordenado en el backend…&lt;br&gt;
y de repente volver a ver cosas en HTML… pero no como antes.&lt;/p&gt;

&lt;p&gt;Porque Angular se siente como si estuvieras haciendo HTML + JS + lógica + estructura&lt;br&gt;
TODO A LA VEZ&lt;br&gt;
y encima en bloques, componentes, dependencias…&lt;/p&gt;

&lt;p&gt;Ya no es:&lt;/p&gt;

&lt;p&gt;Escribo mi HTML largo y feliz&lt;/p&gt;

&lt;p&gt;Le doy estilos con CSS&lt;/p&gt;

&lt;p&gt;Después le meto la lógica con JS&lt;/p&gt;

&lt;p&gt;No.&lt;br&gt;
Ahora es:&lt;/p&gt;

&lt;p&gt;“Tengo que pensar el HTML ya dinámico desde el minuto 1 usando TypeScript a través de Angular… mientras decido quién depende de quién.”&lt;/p&gt;

&lt;p&gt;Padres, hijos, inputs, outputs…&lt;br&gt;
¿WHAT? 🤯&lt;/p&gt;

&lt;p&gt;Es un lío al principio, no voy a mentir.&lt;/p&gt;

&lt;p&gt;Angular exige tener la cabeza ordenada (desde el principio)&lt;/p&gt;

&lt;p&gt;Creo que para trabajar con Angular hay que tener las ideas claras desde bastante temprano.&lt;br&gt;
Porque tienes que pensar cosas como:&lt;/p&gt;

&lt;p&gt;¿Esto se va a repetir? → Entonces es un componente tipo card&lt;/p&gt;

&lt;p&gt;¿Quién es el padre?&lt;/p&gt;

&lt;p&gt;¿Quién es el hijo?&lt;/p&gt;

&lt;p&gt;¿Dónde vive la lógica?&lt;/p&gt;

&lt;p&gt;¿Quién le pasa datos a quién?&lt;/p&gt;

&lt;p&gt;Y luego está el tema de los signals…&lt;br&gt;
Entender qué es un signal, cuándo usarlo, cuándo una función va “sola” dentro de la clase y cuándo va dentro del ngOnInit…&lt;/p&gt;

&lt;p&gt;Eso es CLAVE.&lt;/p&gt;

&lt;p&gt;Y como si todo esto fuera poco… me lancé a mi proyecto personal 😅&lt;/p&gt;

&lt;p&gt;Estamos cerca del final del bootcamp y, animada por uno de los profes, dije:&lt;/p&gt;

&lt;p&gt;“Venga, lo hago.”&lt;/p&gt;

&lt;p&gt;ERROR.&lt;br&gt;
Bueno… no error, pero…&lt;/p&gt;

&lt;p&gt;UFFFF. Me metí en un berenjenal tremendo.&lt;/p&gt;

&lt;p&gt;La idea (que parecía tan buena…)&lt;/p&gt;

&lt;p&gt;Todo empezó con una idea que me encantó porque cubre una necesidad muy real mía:&lt;br&gt;
👉 organizar el calendario familiar para que ningún evento se nos olvide o pase por alto.&lt;/p&gt;

&lt;p&gt;Y como buena backend lover, arranqué por ahí 💪&lt;/p&gt;

&lt;p&gt;Fase 1 – Backend feliz con FastAPI&lt;/p&gt;

&lt;p&gt;Me fui directa a:&lt;/p&gt;

&lt;p&gt;Crear las tablas en mi servidor local&lt;/p&gt;

&lt;p&gt;Definir relaciones&lt;/p&gt;

&lt;p&gt;Pensar qué datos necesito y cómo obtenerlos&lt;/p&gt;

&lt;p&gt;Después salté a FastAPI.&lt;br&gt;
El backend me encanta. Entiendo el proceso.&lt;br&gt;
Lo más pesado a veces son las dependencias, pero con un poco de ayuda de la IA… nada del otro mundo.&lt;/p&gt;

&lt;p&gt;Y de repente:&lt;br&gt;
✨ Backend listo ✨&lt;/p&gt;

&lt;p&gt;Yo toda orgullosa.&lt;/p&gt;

&lt;p&gt;Fase 2 – “Ahora el frontend en Angular”&lt;/p&gt;

&lt;p&gt;JA. JA. JA.&lt;/p&gt;

&lt;p&gt;Sí, Angular viene a “facilitarnos la vida”…&lt;br&gt;
pero un solo HTML ahora se divide en 500 partes, cada una con su CSS y su TS, y luego venga a unir todo…&lt;/p&gt;

&lt;p&gt;Y ojo, que cada .ts es de su componente…&lt;/p&gt;

&lt;p&gt;Ahí fue cuando dije:&lt;/p&gt;

&lt;p&gt;“PUM. ¿Y ahora cómo armo mi diseño yo aquí?”&lt;/p&gt;

&lt;p&gt;Diseño con IA al rescate&lt;/p&gt;

&lt;p&gt;Empecé creando el diseño de la landing con Stitch with Google, una herramienta gratuita de IA que genera diseños a partir de un prompt.&lt;/p&gt;

&lt;p&gt;Le expliqué funcionalidades, idea del proyecto, todo lo más detallado posible…&lt;br&gt;
Después de varios retoques, saqué unas landings que me gustaron bastante.&lt;/p&gt;

&lt;p&gt;Y entonces, con ayuda de la IA, empecé a materializar eso en Angular.&lt;/p&gt;

&lt;p&gt;Pensamientos reales durante el proceso&lt;/p&gt;

&lt;p&gt;A medida que avanzaba solo podía pensar:&lt;/p&gt;

&lt;p&gt;“¿Por qué me metí en este lío?”&lt;/p&gt;

&lt;p&gt;“¿Quién me manda a mí a hacer esto?”&lt;/p&gt;

&lt;p&gt;“Esto se está complicando más de la cuenta…”&lt;/p&gt;

&lt;p&gt;Pero decidí ir por partes.&lt;/p&gt;

&lt;p&gt;Primero:&lt;br&gt;
✔️ Landing&lt;br&gt;
✔️ Formulario de registro&lt;br&gt;
✔️ Conectarlo con el backend&lt;/p&gt;

&lt;p&gt;Cuando logré que el registro funcionara contra mi API, fue como:&lt;br&gt;
OK, ESTO VIVE.&lt;/p&gt;

&lt;p&gt;Fase 3 – El drama del deploy 🌍&lt;/p&gt;

&lt;p&gt;Dije:&lt;/p&gt;

&lt;p&gt;“Ahora lo subo online y lo pruebo desde fuera.”&lt;/p&gt;

&lt;p&gt;Claro… yo muy feliz con:&lt;/p&gt;

&lt;p&gt;Frontend → Netlify&lt;/p&gt;

&lt;p&gt;Backend → Render&lt;/p&gt;

&lt;p&gt;Peeeeeero…&lt;br&gt;
mi base de datos estaba en local.&lt;/p&gt;

&lt;p&gt;Spoiler:&lt;br&gt;
Eso no iba a funcionar jamás aunque la conexión estuviera “bien hecha”.&lt;/p&gt;

&lt;p&gt;Así que…&lt;br&gt;
🔁 Volver a crear la base de datos&lt;br&gt;
🌐 Esta vez en Railway&lt;br&gt;
🔗 Reconectar todo&lt;/p&gt;

&lt;p&gt;Después de pelearme un buen rato con las conexiones…&lt;/p&gt;

&lt;p&gt;✨ LO CONSEGUÍ ✨&lt;/p&gt;

&lt;p&gt;Por ahora mi proyecto solo permite registro y login, pero funciona online. Y eso ya es un mundo.&lt;/p&gt;

&lt;p&gt;¿Qué he aprendido hasta ahora?&lt;/p&gt;

&lt;p&gt;Muchísimas cosas, pero te resumo las más importantes:&lt;/p&gt;

&lt;p&gt;🧠 Que las interfaces cambian totalmente cuando los datos no viven en la página sino en una base de datos real.&lt;br&gt;
🔁 Que Render “re-renderiza” (o como se diga 😂) el backend.&lt;br&gt;
🚀 Que Netlify es ideal para el frontend.&lt;br&gt;
🔄 Que los bucles en Angular son mucho más fáciles de manejar de lo que pensaba.&lt;br&gt;
🧩 Que hacer un proyecto sin tener las ideas claras desde el principio lo complica TODO, porque se te ocurren nuevas funcionalidades a cada paso.&lt;br&gt;
🎯 Que para mí lo más difícil siempre es mantener las cosas simples.&lt;/p&gt;

&lt;p&gt;Y, claramente…&lt;/p&gt;

&lt;p&gt;🤖 Que sin la IA nada de esto habría sido posible.&lt;/p&gt;

&lt;p&gt;Pero ojo: hay que saber usarla.&lt;br&gt;
La IA a veces te da soluciones gigantes, súper complejas…&lt;br&gt;
como Google Maps llevándote por donde él quiere.&lt;/p&gt;

&lt;p&gt;Pero si tú ya conoces un camino más corto,&lt;br&gt;
confía en ti.&lt;/p&gt;

&lt;p&gt;Los profes nos dan herramientas muy valiosas y formas sencillas de resolver las cosas paso a paso.&lt;br&gt;
A veces la IA abruma, así que paro, pienso dos segundos y busco en mi propio “caché mental” cómo hacerlo más simple según lo que ya aprendí.&lt;/p&gt;

&lt;p&gt;Luego comparo con la IA…&lt;br&gt;
y ahí suele aparecer la respuesta correcta.&lt;/p&gt;

&lt;p&gt;Al menos para mí, que voy desde cero subiendo escaloncitos, esto me está ayudando muchísimo.&lt;/p&gt;

&lt;p&gt;Seguiré contando cómo avanza el proyecto&lt;br&gt;
y pronto subiré un link de prueba para que vean lo que ya va tomando forma 💪✨&lt;/p&gt;

</description>
    </item>
    <item>
      <title># 📍 Un viaje continuo: de Córdoba a Barcelona</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Wed, 21 Jan 2026 20:47:45 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/-un-viaje-continuo-de-cordoba-a-barcelona-2ejb</link>
      <guid>https://open.forem.com/laumontironi/-un-viaje-continuo-de-cordoba-a-barcelona-2ejb</guid>
      <description>&lt;h3&gt;
  
  
  Transición de una carrera en contaduría a programación web, junto a mi familia y mis experiencias de vida
&lt;/h3&gt;

&lt;h2&gt;
  
  
  👋 Conociendo a Laura: una introducción personal
&lt;/h2&gt;

&lt;p&gt;Hola, soy Laura. Nací en Córdoba, Argentina, hija del medio entre dos hermanos increíbles y parte de una familia unida que siempre se movió en bloque.&lt;br&gt;&lt;br&gt;
Mis padres —a quienes por ahora mantendré en el anonimato por si este blog se viraliza algún día 😂🤘— lo dieron todo para que pudiéramos estudiar y crecer rodeados de amor y oportunidades.&lt;/p&gt;

&lt;p&gt;Este es el comienzo de mi historia.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏠 Infancia en Oncativo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;La vida en slow motion&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Viví hasta los 16 años en un pueblo llamado &lt;strong&gt;Oncativo&lt;/strong&gt;. Tuve una infancia linda y tranquila: sin redes sociales, sin pantallas, sin streaming (¡porque no existía nada de eso aún… aunque tampoco soy tan vieja!).&lt;/p&gt;

&lt;p&gt;Era una vida más simple, más presente. Tengo recuerdos preciosos de esa etapa: ir al cole con mis hermanos, después danza, jugar, merendar, ducha, cena y a dormir.&lt;br&gt;&lt;br&gt;
Siento que la vida transcurría en otra dimensión, donde los minutos duraban horas.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧳 La gran mudanza a Córdoba
&lt;/h2&gt;

&lt;p&gt;Cuando mi hermana mayor terminó el secundario y decidió estudiar en la universidad, se planteó la posibilidad de irse sola a la ciudad.&lt;br&gt;&lt;br&gt;
Pero nosotros somos así: &lt;strong&gt;nos movemos en bloque&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Así que toda la familia se trasladó a Córdoba capital.&lt;br&gt;&lt;br&gt;
Ese fue mi primer gran cambio de vida.&lt;/p&gt;




&lt;h2&gt;
  
  
  💗 Adolescencia, amor y universidad
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Mi vida universitaria&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Terminé el secundario en la ciudad de Córdoba y allí conocí al que sería mi novio… y hoy es mi marido.&lt;br&gt;&lt;br&gt;
Nos cruzamos por primera vez en el cole a los 16 años, pero recién nos pusimos de novios después del primer año de universidad.&lt;/p&gt;

&lt;p&gt;Ambos estudiamos &lt;strong&gt;Contador Público&lt;/strong&gt; en la Universidad Nacional de Córdoba.&lt;br&gt;&lt;br&gt;
Siempre tuve facilidad para el estudio y, la verdad, disfrutaba esa vida universitaria: estudiar con amigas, rendir exámenes, pasar horas en la facu.&lt;/p&gt;

&lt;p&gt;Fue una etapa feliz, aunque la carrera ya empezaba a mostrarme que no era lo mío.&lt;br&gt;&lt;br&gt;
En ese momento, claro, no lo veía tan claro.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✈️ Pasaje solo de ida
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Barcelona: el comienzo de una nueva aventura&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Una vez recibidos (graduados), decidimos hacer un &lt;strong&gt;MBA en Barcelona, España&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Nos casamos a los 24 años y nos fuimos con pasaje solo de ida.&lt;/p&gt;

&lt;p&gt;Y así empezó otra gran etapa de mi vida.&lt;/p&gt;

&lt;p&gt;Nunca regresamos a vivir a Argentina. Volvemos de visita, siempre que podemos, pero nuestra vida está hoy aquí, en Barcelona: la ciudad que nos recibió, nos desafió y nos vio formar nuestra familia.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Cierre de este capítulo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Un nuevo comienzo: reflexiones y próximos pasos&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;No sé con certeza a dónde me va a llevar este nuevo camino, pero por primera vez en mucho tiempo siento que estoy caminando hacia algo que realmente me representa.&lt;/p&gt;

&lt;p&gt;Volver a aprender, equivocarme, empezar de cero en otro país… suena desafiante, pero también muy vivo.&lt;/p&gt;

&lt;p&gt;Este es solo el primer tramo de un recorrido que recién empieza.&lt;br&gt;&lt;br&gt;
Ya no se trata de llegar rápido, sino de &lt;strong&gt;ir descubriendo con sentido&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔜 En los próximos artículos voy a ir contando más sobre el proceso, las herramientas que estoy usando, cómo me organizo con mi familia (que todavía no te conté 😉) y las dudas —¡y bugs!— que me voy encontrando.&lt;/p&gt;

&lt;p&gt;Gracias por leer hasta acá.&lt;br&gt;&lt;br&gt;
Nos vemos en el próximo post de esta serie 👩‍💻✨&lt;/p&gt;

</description>
      <category>career</category>
      <category>codenewbie</category>
      <category>devjournal</category>
      <category>spanish</category>
    </item>
    <item>
      <title>🚀 Angular y el laberinto tech: con IA todo es mejor!</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Tue, 20 Jan 2026 22:01:23 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/angular-y-el-laberinto-tech-con-ia-todo-es-mejor-1foi</link>
      <guid>https://open.forem.com/laumontironi/angular-y-el-laberinto-tech-con-ia-todo-es-mejor-1foi</guid>
      <description>&lt;p&gt;Toca el turno a Angular y ya podría decir que estoy oficialmente full metida en el bootcamp de nuevo 💻🔥.&lt;/p&gt;

&lt;p&gt;Después de las vacaciones de Navidad tuve un periodo en el que pensé seriamente que iba a abandonar. Me había perdido dos clases importantes y, entre eso y no tener casi tiempo para estudiar (porque cuando tienes tres hijos, las vacaciones de vacaciones no tienen nada 😅), me agobié muchísimo.&lt;/p&gt;

&lt;p&gt;Pero poco a poco me fui metiendo de nuevo en el bootcamp… y me volvió a enganchar como el primer día 💙.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;🧩 Entre Angular, SQL y mil cosas más&lt;/p&gt;

&lt;p&gt;In the meantime, me compré un curso de SQL.&lt;br&gt;
Sí, sí… ¡me encanta! 🤓&lt;br&gt;
Así que voy haciendo un poco de todo.&lt;/p&gt;

&lt;p&gt;Mientras avanzamos con Angular y vamos viendo cómo se cierra todo el ciclo, me doy cuenta de algo importante:&lt;/p&gt;

&lt;p&gt;Al principio de este blog comencé diciendo que no sabía cómo iba a estudiar todo esto, yo que estaba tan acostumbrada a la vieja escuela de los libros 📚.&lt;/p&gt;

&lt;p&gt;Hoy digo algo muy distinto:&lt;br&gt;
la IA es una ayuda enorme para aprender programación.&lt;/p&gt;

&lt;p&gt;Pero ojo 👀:&lt;br&gt;
sin la guía del profe, esto no se puede hacer.&lt;/p&gt;

&lt;p&gt;Hay tanta información por todos lados, en mil formatos diferentes, que es facilísimo marearse. Necesitas profesores que te guíen, que te marquen el camino y te ayuden a no perderte entre tutoriales que al final no tienen un fin específico.&lt;/p&gt;

&lt;p&gt;Aun así, tengo clarísimo que mi camino no habría sido el mismo – y no sé si lo hubiera conseguido – sin la ayuda de la IA.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;🤖 La IA como compañera de estudio&lt;/p&gt;

&lt;p&gt;La IA hace que el estudio fluya.&lt;/p&gt;

&lt;p&gt;Porque una está por ahí, a horas no laborables, resolviendo ejercicios:&lt;br&gt;
  •falla la consola ❌&lt;br&gt;
  •reviso el código 🔍&lt;br&gt;
  •miro ejercicios anteriores 📁&lt;br&gt;
  •creo que ya lo tengo todo bien…&lt;br&gt;
  •y aun así falla otra vez 😩&lt;/p&gt;

&lt;p&gt;¿Qué pasaría sin la IA?&lt;br&gt;
¿O qué pasaba antes?&lt;/p&gt;

&lt;p&gt;Tocaba esperar al otro día, escribirle al profe, preguntar… y aunque la comunicación con los profes en este bootcamp es extremadamente fluida (eso hay que destacarlo 👏), siempre habría un gap de al menos un día.&lt;/p&gt;

&lt;p&gt;Y mi estudio se hubiera visto interrumpido.&lt;/p&gt;

&lt;p&gt;Con la IA como aliada, las dudas se resuelven al instante ⚡.&lt;br&gt;
Y eso ha hecho que no me frene.&lt;/p&gt;

&lt;p&gt;Además, la uso todo el tiempo para:&lt;br&gt;
  •crear ejercicios&lt;br&gt;
  •proponer mini proyectos&lt;br&gt;
  •generar más prácticas&lt;br&gt;
  •experimentar ideas nuevas&lt;/p&gt;

&lt;p&gt;Es muy útil y ha revolucionado muchísimos aspectos, como ya todo el mundo sabe.&lt;br&gt;
Pero para mí, en el estudio, es un TOP absoluto 🏆.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;😵‍💫 La agonía del estudiante tech&lt;/p&gt;

&lt;p&gt;Al margen de toda esa reflexión, quiero hablar un poco de la otra cara:&lt;br&gt;
la parte emocional de este camino.&lt;/p&gt;

&lt;p&gt;Te preparan para bajarte las expectativas al momento de buscar trabajo:&lt;/p&gt;

&lt;p&gt;“El camino es duro.”&lt;br&gt;
“La oportunidad llegará, pero no quizá en el tiempo deseado.”&lt;br&gt;
“Hay que perseverar y continuar.”&lt;/p&gt;

&lt;p&gt;Y aunque lo entiendo, internamente eso genera una mezcla rara de frustración y desesperación a partes iguales.&lt;/p&gt;

&lt;p&gt;Por mi parte, estoy haciendo todo lo que está a mi alcance:&lt;/p&gt;

&lt;p&gt;• Actualicé mi CV… (¡cómo cuesta hacer un buen CV! 😫)&lt;br&gt;
  •Mejoré mi perfil de LinkedIn… otra tarea titánica&lt;br&gt;
  •Intento moverme, mostrarme, contactar&lt;/p&gt;

&lt;p&gt;Siento que el 99% de la gente vende humo.&lt;br&gt;
Muchísimo humo.&lt;/p&gt;

&lt;p&gt;Y yo no comulgo con eso.&lt;/p&gt;

&lt;p&gt;Yo sé de lo que soy capaz, pero no me sé vender.&lt;br&gt;
Es una discusión eterna conmigo misma.&lt;/p&gt;

&lt;p&gt;No me gusta publicar, si pudiera ser invisible lo sería 🙈.&lt;br&gt;
Y aun así, ahí me ves:&lt;br&gt;
  •contactando recruiters&lt;br&gt;
  •agregándolos&lt;br&gt;
  •mandando CVs&lt;br&gt;
  •enviando mensajes de interés&lt;/p&gt;

&lt;p&gt;Todo para poder meterme en el mundo tech…&lt;br&gt;
con pánico y vergüenza, pero lo hago igual 💪.&lt;/p&gt;

&lt;p&gt;A veces siento que el mundo sigue siendo un poco hostil en este punto.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;💻 Lo que ya vamos construyendo&lt;/p&gt;

&lt;p&gt;Para cerrar un poco y seguir con el camino del bootcamp:&lt;/p&gt;

&lt;p&gt;Ya hemos visto:&lt;br&gt;
  •creación de APIs con Python&lt;br&gt;
  •FastAPI&lt;br&gt;
  •SQL y MongoDB&lt;br&gt;
  •hasheo de passwords&lt;br&gt;
  •securizacion&lt;br&gt;
  •dependencias&lt;/p&gt;

&lt;p&gt;Y me ha encantado todo 😍.&lt;/p&gt;

&lt;p&gt;Todo lo que veo me fascina y me engancha.&lt;/p&gt;

&lt;p&gt;Estoy en la recta final y paso por muchos vaivenes emocionales.&lt;br&gt;
Y me tengo que recordar a mí misma, cada vez que voy directo al colapso:&lt;/p&gt;

&lt;p&gt;No soy débil.&lt;br&gt;
Solo estoy cansada.&lt;br&gt;
Estoy aprendiendo de cero.&lt;br&gt;
Estoy siguiendo el camino correcto.&lt;br&gt;
No es fácil…&lt;br&gt;
y menos con el background que tengo.&lt;/p&gt;

&lt;p&gt;Solo tengo que seguir y no morir en el intento 💫.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;En el próximo post hablaré más de Angular 😉&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🫀 Re-start: Cuando el cerebro dice "basta" para poder seguir</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Wed, 07 Jan 2026 13:09:21 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/re-start-cuando-el-cerebro-dice-basta-para-poder-seguir-e16</link>
      <guid>https://open.forem.com/laumontironi/re-start-cuando-el-cerebro-dice-basta-para-poder-seguir-e16</guid>
      <description>&lt;p&gt;¡Hola de nuevo! hoy  vengo a contarte lo que pasa cuando la pantalla se apaga y la mente colapsa ( la mia)&lt;/p&gt;

&lt;p&gt;🌪️ El bucle del "exceso de información"&lt;br&gt;
Antes de las vacaciones, entré en un modo peligroso: cada segundo libre era para un vídeo de YouTube, un tutorial de FastAPI o intentar replicar clases de SQL sin descanso.&lt;/p&gt;

&lt;p&gt;Conclusión: Sobresaturación mental nivel mil. 🤯&lt;/p&gt;

&lt;p&gt;El resultado: Llegaron las vacaciones de Navidad, decidí (por fin) desconectar... y al volver, ¡pumba! Sentía que lo había olvidado todo.&lt;/p&gt;

&lt;p&gt;🌑 La nube negra y el síndrome del impostor&lt;br&gt;
Mi 2026 no arrancó con fuegos artificiales. Me encontré atrapada en una nube de polvo negra:&lt;/p&gt;

&lt;p&gt;Me cuesta horrores retomar el ritmo.&lt;/p&gt;

&lt;p&gt;Los pensamientos negativos ("el mercado es hostil", "no soy apta para esto") le ganan por goleada a los positivos.&lt;/p&gt;

&lt;p&gt;Me falta perspectiva: si alguien me contara mi propia historia (familia, hijos, bootcamp, trabajo), yo diría: "¡Guau, qué increíble!". Pero cuando se trata de mí, no me siento merecedora de ninguna credencial. 🏷️🚫&lt;/p&gt;

&lt;p&gt;🛑 Frenar no es fracasar&lt;br&gt;
Me he dado cuenta de que mi mente necesitaba esas vacaciones como lo que son: vacaciones. El mundo IT es inmenso y a veces nos convencemos de que si paramos un segundo, el tren nos deja. Pero la realidad es que si no paramos, el motor se funde.&lt;/p&gt;

&lt;p&gt;🌈 ¿Por qué elijo seguir?&lt;br&gt;
Pese a que hoy me siento vulnerable y el mundo parece un lugar difícil, elijo seguir intentándolo.&lt;/p&gt;

&lt;p&gt;Porque estoy orgullosa de estar acá.&lt;/p&gt;

&lt;p&gt;Porque tengo una familia que me apoya.&lt;/p&gt;

&lt;p&gt;Porque, aunque hoy vea "nubes", sé que debajo sigue estando todo lo que aprendí.&lt;/p&gt;

&lt;p&gt;A veces, re-programar nuestra propia mente es más difícil que cualquier línea de código en JavaScript. 💛&lt;/p&gt;

&lt;p&gt;Y con esto, cierro esta reflexión tan necesaria. Mi próximo post ya será sobre el proceso, sobre los "cómo" y los "qué estoy aprendiendo", ¡salvo que mi mente decida hacer lo contrario y me pida otra pausa para reconectar! 😉&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>learning</category>
      <category>mentalhealth</category>
      <category>spanish</category>
    </item>
    <item>
      <title>🤯 FastAPI: De un solo archivo a "Pasar la Bola" (Mi Chuleta de Supervivencia) 🐍</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Fri, 12 Dec 2025 16:12:04 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/fastapi-de-un-solo-archivo-a-pasar-la-bola-mi-chuleta-de-supervivencia-1804</link>
      <guid>https://open.forem.com/laumontironi/fastapi-de-un-solo-archivo-a-pasar-la-bola-mi-chuleta-de-supervivencia-1804</guid>
      <description>&lt;p&gt;Hemos empezado a ver FastAPI en el bootcamp. Al principio, mi plan era sencillo: centrarme en entender y practicar solo y únicamente los ejercicios del profe. No complicarme la vida. Keep it simple.&lt;/p&gt;

&lt;p&gt;Pero... ¡oh, sorpresa! 🙄 No puedo.&lt;/p&gt;

&lt;p&gt;He hecho el CRUD básico dos o tres veces (todo metido en un solo main.py, a lo bruto) para asegurarme de que entiendo las rutas GET, POST, PUT y DELETE. Hasta ahí, todo bien. El semáforo está en verde. ✅&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🐛 El "bichito" de los datos y mis distracciones&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Llegado a este punto, esto se puede complicar tanto como uno quiera. Y confieso que me ha quedado el "bichito" de SQL y Mongo. Oye, ¡que me han gustado de verdad! ❤️&lt;/p&gt;

&lt;p&gt;Así que, mientras espero a que mi cerebro vuelva a colapsar por exceso de información con FastAPI, me he puesto a trastear con DataLemur y RankScores. 🚨 Spoiler: Hay mil millones de cosas que no sé. ¿Me frustro? No (bueno, un poco), pero me sirve para aprender nuevas sintaxis y formas de resolver problemas de lógica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ El descubrimiento del siglo: REST Client&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Antes de pasar a lo técnico, tengo que declarar mi amor al plugin REST Client de VS Code. ¡Es una genialidad! 🤩 ( lo ha dicho el profe eh?? que no soy tan pro como para descubrir ese tipo de cosas ! 🤣) &lt;/p&gt;

&lt;p&gt;Lo mejor es que puedes definir variables (&lt;a class="mentioned-user" href="https://dev.to/host"&gt;@host&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/port"&gt;@port&lt;/a&gt;) al principio del archivo. Así no tienes que escribir &lt;a href="http://localhost:8000" rel="noopener noreferrer"&gt;http://localhost:8000&lt;/a&gt; setenta veces. Si cambias el puerto, lo cambias en una línea y listo. Magia pura. ✨&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📝 La Chuleta Definitiva: Arquitectura en FastAPI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vale, aquí viene "la chicha". FastApi avanza y hemos pasado de tener todo en un archivo main.py a tener 30 mil archivos diferentes que se piden info entre ellos.&lt;/p&gt;

&lt;p&gt;Básicamente, el código juega a "pasar la bola" 🏀:&lt;/p&gt;

&lt;p&gt;1-El Main recibe el golpe.&lt;/p&gt;

&lt;p&gt;2-Se la pasa a la Route.&lt;/p&gt;

&lt;p&gt;3-La Route se la pasa al Controller.&lt;/p&gt;

&lt;p&gt;4-El Controller llama al Model.&lt;/p&gt;

&lt;p&gt;Y vuelta atrás con la respuesta.&lt;/p&gt;

&lt;p&gt;Entender quién pide qué a quién es la clave de todo. Así que me dejo esto aquí apuntado para cuando mi memoria decida fallar (o sea, mañana 🤣).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 1: La Arquitectura 🏗️&lt;/strong&gt;&lt;br&gt;
Lo primero es organizar la casa. Nada de archivos sueltos.&lt;br&gt;
mi_app/&lt;br&gt;
├── app/&lt;br&gt;
│   ├── controllers/   # La lógica (el cerebro)&lt;br&gt;
│   ├── models/        # Los datos y esquemas (la forma)&lt;br&gt;
│   ├── routes/        # Las direcciones URL (el mapa)&lt;br&gt;
│   └── main.py        # El punto de entrada (la puerta)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 2: El Entorno Virtual (Windows/Git Bash) 💻&lt;/strong&gt;&lt;br&gt;
Crear la burbuja para que no explote nada fuera&lt;/p&gt;

&lt;h1&gt;
  
  
  Crear el entorno
&lt;/h1&gt;

&lt;p&gt;python -m venv .venv&lt;/p&gt;

&lt;h1&gt;
  
  
  Activar el entorno (Ojo a la ruta en Git Bash)
&lt;/h1&gt;

&lt;p&gt;source .venv/Scripts/activate&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 3: Instalación y Requirements 📦&lt;/strong&gt;&lt;br&gt;
Todo tomando como base la documentacion de FastAPI, en su web lo dice todo pasito a pasito:&lt;br&gt;
pip install "fastapi[standard]"&lt;br&gt;
pip freeze &amp;gt; requirements.txt&lt;br&gt;
y para arrancar el cohete 🚀: fastapi dev app/main.py&lt;br&gt;
&lt;strong&gt;Paso 4: El Código "Pasa-Bola" 🏀&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. main.py (La Puerta)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aquí solo inicializamos y llamamos a las rutas. No se hace lógica.&lt;br&gt;
from fastapi import FastAPI &lt;br&gt;
from routes import ejemplo_routes # Importamos el archivo de rutas&lt;/p&gt;

&lt;p&gt;app = FastAPI()&lt;/p&gt;

&lt;h1&gt;
  
  
  Conectamos la "regleta" de rutas al enchufe principal
&lt;/h1&gt;

&lt;p&gt;app.include_router(ejemplo_routes.router, prefix='/ejemplo', tags=['ejemplo'])&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. routes/ejemplo_routes.py (El Mapa)&lt;/strong&gt;&lt;br&gt;
Aquí definimos qué pide el usuario y qué códigos de estado devolvemos.&lt;/p&gt;

&lt;p&gt;GET -&amp;gt; 200 OK (Todo bien).&lt;br&gt;
POST -&amp;gt; 201 Created (He creado algo nuevo).&lt;br&gt;
PUT/DELETE -&amp;gt; 200 OK (O a veces 204 si no devuelves nada).&lt;/p&gt;

&lt;p&gt;from fastapi import APIRouter, HTTPException&lt;br&gt;
from controllers import ejemplo_controller # Importamos al controlador&lt;/p&gt;

&lt;p&gt;router = APIRouter()&lt;/p&gt;

&lt;p&gt;@router.get('/', status_code=200)&lt;br&gt;
def get_algo():&lt;br&gt;
    # Le pasamos la bola al controlador&lt;br&gt;
    return ejemplo_controller.traer_datos()&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. controllers/ejemplo_controller.py (El Cerebro&lt;/strong&gt;&lt;br&gt;
Aquí pensamos. Si algo va mal, lanzamos errores.&lt;br&gt;
404 Not Found: No encuentro lo que buscas.&lt;br&gt;
400 Bad Request: Me has enviado datos basura.&lt;/p&gt;

&lt;p&gt;from models.ejemplo_model import get_all_data # Importamos del modelo&lt;/p&gt;

&lt;p&gt;def traer_datos():&lt;br&gt;
    # Aquí iría la lógica...&lt;br&gt;
    return get_all_data()&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. models/ejemplo_model.py (Los Datos)&lt;/strong&gt;&lt;br&gt;
Aquí definimos cómo son los datos. Usamos Pydantic (propio de Python/FastAPI)&lt;/p&gt;

&lt;p&gt;from pydantic import BaseModel&lt;br&gt;
from typing import Optional&lt;br&gt;
from fastapi import HTTPException # Para lanzar errores si no encontramos datos&lt;/p&gt;

&lt;p&gt;class MiDato(BaseModel):&lt;br&gt;
    id: int&lt;br&gt;
    nombre: str&lt;br&gt;
    edad: Optional[int] = None&lt;/p&gt;

&lt;p&gt;Y ya está. Parece mucho lío, pero al final es solo orden y concierto ( cosa de la que muchas veces carezco 💁‍♀️) Mientras no se me olvide importar la función antes de usarla (nota mental: revisar siempre los imports), ¡todo irá bien! 🤘 a ver cuando le "metamos" bases de datos ! miedo me da!! &lt;/p&gt;

&lt;p&gt;Igual hay dias que hago un crud de estos y me siento the best!! &lt;/p&gt;

</description>
    </item>
    <item>
      <title>⚔️ La Batalla de las Bases de Datos: SQL, Mongo y la Montaña Rusa del Bootcamp</title>
      <dc:creator>Laura Montironi</dc:creator>
      <pubDate>Fri, 05 Dec 2025 17:18:32 +0000</pubDate>
      <link>https://open.forem.com/laumontironi/la-batalla-de-las-bases-de-datos-sql-mongo-y-la-montana-rusa-del-bootcamp-4fe8</link>
      <guid>https://open.forem.com/laumontironi/la-batalla-de-las-bases-de-datos-sql-mongo-y-la-montana-rusa-del-bootcamp-4fe8</guid>
      <description>&lt;p&gt;¡Hola a todos! 👋&lt;/p&gt;

&lt;p&gt;Si me seguís, sabéis que estoy inmersa en el bootcamp y la montaña rusa de emociones es... épica. El último módulo nos ha traído la dupla de SQL y MongoDB, y tengo que confesar algo: el agobio es real, pero la fascinación también.&lt;/p&gt;

&lt;p&gt;🫠 El Agobio de no Picar Código&lt;/p&gt;

&lt;p&gt;Uno de los principales choques es que, de repente, no estoy tecleando código Python en VS Code. Estamos en la consola, aprendiendo el lenguaje de las bases de datos, y mi cerebro junior lanza una alarma: "¡Olvidas comandos!", "¡Ya no sabes cómo se ejecutaba una actividad!". Es una sensación de falsa amnesia que nos da a muchos cuando cambiamos de entorno. Sentir que no estoy escribiendo me hace dudar de si estoy aprendiendo, pero sé que es parte del proceso de internalizar un nuevo lenguaje de consulta.&lt;/p&gt;

&lt;p&gt;💖 Un Flechazo Inesperado: SQL&lt;/p&gt;

&lt;p&gt;Pero, oh sorpresa, SQL me ha conquistado. A nivel cero, lo encuentro muy lógico y, hasta me atrevería a decir, fácil (de nuevo, en lo básico). Me da una rabia enorme que se dedique tan poco tiempo a este módulo. ¡El manejo de datos es lo que da vida a cualquier aplicación! Es verdad que parece "más cool" saber solo Python, pero la verdad es que el manejo de datos lo es todo. Para mí, es la columna vertebral.&lt;/p&gt;

&lt;p&gt;No descarto especializarme en bases de datos cuando termine el bootcamp. Le estoy cogiendo el gusto a la consola, y más aún a eso de enviar datos procesados para que "los trabaje otro". 😂 (Poca broma, pero me ha encantado el concepto).&lt;/p&gt;

&lt;p&gt;⏳ La Vida Real y el FOMO&lt;/p&gt;

&lt;p&gt;El FOMO (Fear of Missing Out) en este mundillo es cada vez más grande, y ahora mismo me siento agobiadísima. Se acerca fin de año y, entre el trabajo, el CrossFit, y tener a los peques con fiebre (¡todos a la vez! 😭), el tiempo para estudiar se reduce a migajas. Aclaro que lo primero que abandono en situaciones de colapso es el CrossFit, que debería ser lo último, ¡puesto que me centra la cabeza! Pero bueno, aún no concilio perfectamente todos los brunches de mi vida.&lt;/p&gt;

&lt;p&gt;La sensación es de una carrera hacia no sé dónde, donde todo se ve rapidísimo y superficial, pero claro... ¡es un bootcamp! Una formación intensiva para adquirir conocimientos básicos de cada cosa, y luego, profundizar en lo que más nos guste.&lt;/p&gt;

&lt;p&gt;🚀 Dando Pasos de Gigante (A pesar de la Vergüenza)&lt;/p&gt;

&lt;p&gt;A pesar del colapso mental, sigo subiendo mini proyectos a GitHub y buscando ofertas. No encuentro muchas que encajen (sin experiencia), pero sigo insistiendo.&lt;/p&gt;

&lt;p&gt;Lo más importante que he hecho esta semana es armar mi portfolio para enviarlo a los profes y al equipo de talento. Me sigue dando muchísima vergüenza enviar estas cosas porque siempre creo que lo hago mal, o no lo suficientemente bien, pero estoy rompiendo esas barreras poco a poco... ¡y eso es progreso!&lt;/p&gt;

&lt;p&gt;Lo comparto por aquí también, por si queréis echar un vistazo:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://portfoliodev-laumontironi.netlify.app/" rel="noopener noreferrer"&gt;https://portfoliodev-laumontironi.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Ya hemos terminado el módulo de bases de datos! Ahora comenzamos FastAPI, y esto ya va tomando forma de API real. Os sigo contando. ¡Mucho ánimo a todos!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
