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 Proyecto Final y, de repente, la cosa se pone seria.
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 UpgradeFood. Y no ha sido precisamente un paseo por el campo.
🧠 El ecosistema: Lo que hay bajo el capó
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:
Frontend: Angular (con sus Signals y estados que me han dado la vida).
Backend: FastAPI (Python puro al servicio del caos).
Base de Datos: MySQL viviendo en Railway.
Imágenes: Todo gestionado en la nube con Cloudinary.
Emails: Confirmaciones reales con Resend.
Deploy: Backend en Railway y Frontend en Firebase.
💥 Storytime: El día que borré el repositorio (y casi mi salud mental)
Sí, pasó. Borré el repo del backend en GitHub. 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: Git no es opcional, es supervivencia.
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.
🛠️ Romper para aprender (Mi especialidad)
He crasheado el backend más veces de las que quiero admitir. ¿Mis "grandes éxitos"?
Cambiar un nombre de archivo y cargarme todos los imports.
Tener el CORS mal configurado y que Angular me ignorara sistemáticamente.
Variables de entorno que "juraría" que estaban bien... pero no.
El drama de los emails: 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.
🧩 Lo que realmente he aplicado (y funciona)
Más allá de los sustos, UpgradeFood hace cosas muy potentes:
Auth Real: Registro, Login y protección de rutas con JWT. Si no tienes el token o no perteneces a la "familia", no pasas.
Gestión de Reservas: Validar disponibilidad, roles de admin vs cliente y control total de la base de datos.
Feedback Visual: Nada de alertas feas; he usado SweetAlert para que el usuario sepa qué está pasando.
Tipado Real: He dicho adiós al any. Si algo se rompe, prefiero que me lo diga TypeScript antes que el usuario.
🎓 Lo que nadie te dice del proyecto final
El código es solo el 50%. El resto es:
Gestionar la frustración cuando algo que funcionaba ayer, hoy no.
Aprender a debuggear sin entrar en pánico (bueno, con un poco de pánico).
Entender que "funciona en mi máquina" no sirve de nada si no funciona en el deploy.
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.
💬 Conclusión
Si algo me llevo de estas semanas es que no necesitas saberlo todo para empezar algo grande. Necesitas bases sólidas, mucha paciencia y la capacidad de volver a empezar.
Hoy ya no siento que estoy "aprendiendo a programar". Estoy programando. Y aunque me ha pasado de todo, aquí sigo. Construyendo.
🔗 Proyecto en vivo
👉 Aplicación desplegada:
https://upgradefood.web.app/
🔗 Código fuente
👉 Backend (FastAPI + MySQL + JWT):
https://github.com/LauMontironi/UpgradeHub_final_project_Backend
👉 Frontend (Angular):
https://github.com/LauMontironi/UpgradeHub_final_project_Frontend
Top comments (0)