From ff7e39690683da903ff448a50ecfab465138ae63 Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 07:23:46 +0200
Subject: [PATCH 01/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/db/models/user.py           |   2 +-
 Backend/FastAPI/routers/basic_auth_users.py |   4 +-
 Backend/FastAPI/routers/jwt_auth_users.py   |   7 +-
 README.md                                   | 134 ++++++++++----------
 4 files changed, 72 insertions(+), 75 deletions(-)

diff --git a/Backend/FastAPI/db/models/user.py b/Backend/FastAPI/db/models/user.py
index b26dc09..73d5766 100644
--- a/Backend/FastAPI/db/models/user.py
+++ b/Backend/FastAPI/db/models/user.py
@@ -7,6 +7,6 @@
 
 
 class User(BaseModel):
-    id: Optional[str]
+    id: Optional[str] = None
     username: str
     email: str
diff --git a/Backend/FastAPI/routers/basic_auth_users.py b/Backend/FastAPI/routers/basic_auth_users.py
index 054b991..21b65fa 100644
--- a/Backend/FastAPI/routers/basic_auth_users.py
+++ b/Backend/FastAPI/routers/basic_auth_users.py
@@ -28,14 +28,14 @@ class UserDB(User):
     "mouredev": {
         "username": "mouredev",
         "full_name": "Brais Moure",
-        "email": "braismoure@mourede.com",
+        "email": "braismoure@mouredev.com",
         "disabled": False,
         "password": "123456"
     },
     "mouredev2": {
         "username": "mouredev2",
         "full_name": "Brais Moure 2",
-        "email": "braismoure2@mourede.com",
+        "email": "braismoure2@mouredev.com",
         "disabled": True,
         "password": "654321"
     }
diff --git a/Backend/FastAPI/routers/jwt_auth_users.py b/Backend/FastAPI/routers/jwt_auth_users.py
index c942b0c..8cb57b3 100644
--- a/Backend/FastAPI/routers/jwt_auth_users.py
+++ b/Backend/FastAPI/routers/jwt_auth_users.py
@@ -8,6 +8,7 @@
 from jose import jwt, JWTError
 from passlib.context import CryptContext
 from datetime import datetime, timedelta
+import timezone
 
 ALGORITHM = "HS256"
 ACCESS_TOKEN_DURATION = 1
@@ -37,14 +38,14 @@ class UserDB(User):
     "mouredev": {
         "username": "mouredev",
         "full_name": "Brais Moure",
-        "email": "braismoure@mourede.com",
+        "email": "braismoure@mouredev.com",
         "disabled": False,
         "password": "$2a$12$B2Gq.Dps1WYf2t57eiIKjO4DXC3IUMUXISJF62bSRiFfqMdOI2Xa6"
     },
     "mouredev2": {
         "username": "mouredev2",
         "full_name": "Brais Moure 2",
-        "email": "braismoure2@mourede.com",
+        "email": "braismoure2@mouredev.com",
         "disabled": True,
         "password": "$2a$12$SduE7dE.i3/ygwd0Kol8bOFvEABaoOOlC8JsCSr6wpwB4zl5STU4S"
     }
@@ -103,7 +104,7 @@ async def login(form: OAuth2PasswordRequestForm = Depends()):
             status_code=status.HTTP_400_BAD_REQUEST, detail="La contraseña no es correcta")
 
     access_token = {"sub": user.username,
-                    "exp": datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_DURATION)}
+                    "exp": datetime.now(timezone.utc) + timedelta(minutes=ACCESS_TOKEN_DURATION)}
 
     return {"access_token": jwt.encode(access_token, SECRET, algorithm=ALGORITHM), "token_type": "bearer"}
 
diff --git a/README.md b/README.md
index c93afa6..193dcdc 100644
--- a/README.md
+++ b/README.md
@@ -11,13 +11,8 @@
 ![](./Images/header.jpg)
 
 ### Proyecto realizado durante emisiones en directo desde [Twitch](https://twitch.tv/mouredev)
-> ##### Si consideras útil el curso, apóyalo haciendo "★ Star" en el repositorio. ¡Gracias!
-
-## ¡NUEVO! Curso de Python para web
-
-[![Curso Python Web](https://img.shields.io/github/stars/mouredev/python-web?label=Curso%20Python%20web&style=social)](https://github.com/mouredev/python-web)
 
-<a href="https://github.com/mouredev/python-web"><img src="https://raw.githubusercontent.com/mouredev/python-web/main/Images/header.jpg"/></a>
+> ##### Si consideras útil el curso, apóyalo haciendo "★ Star" en el repositorio. ¡Gracias!
 
 ## Clases en vídeo
 
@@ -29,44 +24,44 @@ Curso que agrupa todas las clases en directo que hacen referencia a los fundamen
 
 <a href="https://youtu.be/Kp4Mvapo5kc"><img src="http://i3.ytimg.com/vi/Kp4Mvapo5kc/maxresdefault.jpg" style="height: 50%; width:50%;"/></a>
 
-* [Introducción](https://youtu.be/Kp4Mvapo5kc)
-* [Contexto](https://youtu.be/Kp4Mvapo5kc?t=244)
-* [Lección 1 - Configuración](https://youtu.be/Kp4Mvapo5kc?t=850)
-* [Lección 2 - Hola Mundo](https://youtu.be/Kp4Mvapo5kc?t=1518)
-* [Lección 3 - Variables](https://youtu.be/Kp4Mvapo5kc?t=2938)
-* [Lección 4 - Operadores](https://youtu.be/Kp4Mvapo5kc?t=5665)
-* [Lección 5 - Strings](https://youtu.be/Kp4Mvapo5kc?t=8643)
-* [Lección 6 - Listas](https://youtu.be/Kp4Mvapo5kc?t=10872)
-* [Lección 7 - Tuplas](https://youtu.be/Kp4Mvapo5kc?t=14711)
-* [Lección 8 - Sets](https://youtu.be/Kp4Mvapo5kc?t=16335)
-* [Lección 9 - Diccionarios](https://youtu.be/Kp4Mvapo5kc?t=18506)
-* [Lección 10 - Condicionales](https://youtu.be/Kp4Mvapo5kc?t=21442)
-* [Lección 11 - Bucles/Loops/Ciclos](https://youtu.be/Kp4Mvapo5kc?t=23822)
-* [Lección 12 - Funciones](https://youtu.be/Kp4Mvapo5kc?t=26619)
-* [Lección 13 - Clases](https://youtu.be/Kp4Mvapo5kc?t=29327)
-* [Lección 14 - Excepciones](https://youtu.be/Kp4Mvapo5kc?t=32030)
-* [Lección 15 - Módulos](https://youtu.be/Kp4Mvapo5kc?t=34583)
-* [Próximos pasos](https://youtu.be/Kp4Mvapo5kc?t=36390)
+- [Introducción](https://youtu.be/Kp4Mvapo5kc)
+- [Contexto](https://youtu.be/Kp4Mvapo5kc?t=244)
+- [Lección 1 - Configuración](https://youtu.be/Kp4Mvapo5kc?t=850)
+- [Lección 2 - Hola Mundo](https://youtu.be/Kp4Mvapo5kc?t=1518)
+- [Lección 3 - Variables](https://youtu.be/Kp4Mvapo5kc?t=2938)
+- [Lección 4 - Operadores](https://youtu.be/Kp4Mvapo5kc?t=5665)
+- [Lección 5 - Strings](https://youtu.be/Kp4Mvapo5kc?t=8643)
+- [Lección 6 - Listas](https://youtu.be/Kp4Mvapo5kc?t=10872)
+- [Lección 7 - Tuplas](https://youtu.be/Kp4Mvapo5kc?t=14711)
+- [Lección 8 - Sets](https://youtu.be/Kp4Mvapo5kc?t=16335)
+- [Lección 9 - Diccionarios](https://youtu.be/Kp4Mvapo5kc?t=18506)
+- [Lección 10 - Condicionales](https://youtu.be/Kp4Mvapo5kc?t=21442)
+- [Lección 11 - Bucles/Loops/Ciclos](https://youtu.be/Kp4Mvapo5kc?t=23822)
+- [Lección 12 - Funciones](https://youtu.be/Kp4Mvapo5kc?t=26619)
+- [Lección 13 - Clases](https://youtu.be/Kp4Mvapo5kc?t=29327)
+- [Lección 14 - Excepciones](https://youtu.be/Kp4Mvapo5kc?t=32030)
+- [Lección 15 - Módulos](https://youtu.be/Kp4Mvapo5kc?t=34583)
+- [Próximos pasos](https://youtu.be/Kp4Mvapo5kc?t=36390)
 
 ### Curso intermedio de fundamentos desde cero
 
 Curso en el que continuamos aprendiendo Python desde sus bases, siguiendo la ruta de aprendizaje desde la última lección del curso de inicial.
 
 > Código: Directorio "Intermediate" en el proyecto
- 
+
 <a href="https://youtu.be/TbcEqkabAWU"><img src="http://i3.ytimg.com/vi/TbcEqkabAWU/maxresdefault.jpg" style="height: 50%; width:50%;"/></a>
 
-* [Introducción](https://youtu.be/TbcEqkabAWU)
-* [Lección 1 - Dates](https://youtu.be/TbcEqkabAWU?t=202)
-* [Lección 2 - List Comprehension](https://youtu.be/TbcEqkabAWU?t=3239)
-* [Lección 3 - Resolución de retos de programación](https://youtu.be/TbcEqkabAWU?t=4142)
-* [Lección 4 - Lambdas](https://youtu.be/TbcEqkabAWU?t=9145)
-* [Lección 5 - Funciones de orden superior](https://youtu.be/TbcEqkabAWU?t=10172)
-* [Lección 6 - Tipos de error](https://youtu.be/TbcEqkabAWU?t=12721)
-* [Lección 7 - Manejo de ficheros](https://youtu.be/TbcEqkabAWU?t=15524)
-* [Lección 8 - Expresiones regulares](https://youtu.be/TbcEqkabAWU?t=19762)
-* [Lección 9 - Manejo de paquetes](https://youtu.be/TbcEqkabAWU?t=24010)
-* [Próximos pasos](https://youtu.be/TbcEqkabAWU?t=26228)
+- [Introducción](https://youtu.be/TbcEqkabAWU)
+- [Lección 1 - Dates](https://youtu.be/TbcEqkabAWU?t=202)
+- [Lección 2 - List Comprehension](https://youtu.be/TbcEqkabAWU?t=3239)
+- [Lección 3 - Resolución de retos de programación](https://youtu.be/TbcEqkabAWU?t=4142)
+- [Lección 4 - Lambdas](https://youtu.be/TbcEqkabAWU?t=9145)
+- [Lección 5 - Funciones de orden superior](https://youtu.be/TbcEqkabAWU?t=10172)
+- [Lección 6 - Tipos de error](https://youtu.be/TbcEqkabAWU?t=12721)
+- [Lección 7 - Manejo de ficheros](https://youtu.be/TbcEqkabAWU?t=15524)
+- [Lección 8 - Expresiones regulares](https://youtu.be/TbcEqkabAWU?t=19762)
+- [Lección 9 - Manejo de paquetes](https://youtu.be/TbcEqkabAWU?t=24010)
+- [Próximos pasos](https://youtu.be/TbcEqkabAWU?t=26228)
 
 ### Backend desde cero
 
@@ -76,28 +71,28 @@ Curso en el que aprenderemos a utilizar Python para backend e implementaremos un
 
 <a href="https://youtu.be/_y9qQZXE24A"><img src="http://i3.ytimg.com/vi/_y9qQZXE24A/maxresdefault.jpg" style="height: 50%; width:50%;"/></a>
 
-* [Introducción](https://youtu.be/_y9qQZXE24A)
-* [Lección 01 - ¿Qué es un backend?](https://youtu.be/_y9qQZXE24A?t=125)
-* [Lección 02 - API y FastAPI](https://youtu.be/_y9qQZXE24A?t=834)
-* [Lección 03 - Type Hints](https://youtu.be/_y9qQZXE24A?t=1810)
-* [Lección 04 - Configuración FastAPI](https://youtu.be/_y9qQZXE24A?t=2629)
-* [Lección 05 - Hola mundo](https://youtu.be/_y9qQZXE24A?t=3504)
-* [Lección 06 - Operación GET](https://youtu.be/_y9qQZXE24A?t=5382)
-* [Lección 07 - Peticiones HTTP](https://youtu.be/_y9qQZXE24A?t=5925)
-* [Lección 08 - Creación API](https://youtu.be/_y9qQZXE24A?t=6099)
-* [Lección 09 - Path y Query](https://youtu.be/_y9qQZXE24A?t=7510)
-* [Lección 10 - Operaciones POST, PUT y DELETE](https://youtu.be/_y9qQZXE24A?t=8529)
-* [Lección 11 - HTTP status codes](https://youtu.be/_y9qQZXE24A?t=11072)
-* [Lección 12 - Routers](https://youtu.be/_y9qQZXE24A?t=12475)
-* [Lección 13 - Recursos estáticos](https://youtu.be/_y9qQZXE24A?t=13618)
-* [Lección 14 - Autorización OAuth2](https://youtu.be/_y9qQZXE24A?t=14094)
-* [Lección 15 - OAuth2 JWT](https://youtu.be/_y9qQZXE24A?t=17664)
-* [Lección 16 - MongoDB](https://youtu.be/_y9qQZXE24A?t=20480)
-* [Lección 17 - MongoDB Atlas](https://youtu.be/_y9qQZXE24A?t=25470)
-* [Lección 18 - Despliegue en Deta *](https://youtu.be/_y9qQZXE24A?t=27335)
-* [Próximos pasos](https://youtu.be/_y9qQZXE24A?t=28484)
-
-***ACTUALIZACIÓN Sobre la lección 18:** Deta ha actualizado ligeramente su servicio de despliegue de aplicaciones con FastAPI. Tienes toda la documentación [aquí](https://deta.space/docs/en/quickstart-guides/python#fastapi). También han creado una [guía de migración](https://deta.space/migration/guides/migrate-a-micro/).
+- [Introducción](https://youtu.be/_y9qQZXE24A)
+- [Lección 01 - ¿Qué es un backend?](https://youtu.be/_y9qQZXE24A?t=125)
+- [Lección 02 - API y FastAPI](https://youtu.be/_y9qQZXE24A?t=834)
+- [Lección 03 - Type Hints](https://youtu.be/_y9qQZXE24A?t=1810)
+- [Lección 04 - Configuración FastAPI](https://youtu.be/_y9qQZXE24A?t=2629)
+- [Lección 05 - Hola mundo](https://youtu.be/_y9qQZXE24A?t=3504)
+- [Lección 06 - Operación GET](https://youtu.be/_y9qQZXE24A?t=5382)
+- [Lección 07 - Peticiones HTTP](https://youtu.be/_y9qQZXE24A?t=5925)
+- [Lección 08 - Creación API](https://youtu.be/_y9qQZXE24A?t=6099)
+- [Lección 09 - Path y Query](https://youtu.be/_y9qQZXE24A?t=7510)
+- [Lección 10 - Operaciones POST, PUT y DELETE](https://youtu.be/_y9qQZXE24A?t=8529)
+- [Lección 11 - HTTP status codes](https://youtu.be/_y9qQZXE24A?t=11072)
+- [Lección 12 - Routers](https://youtu.be/_y9qQZXE24A?t=12475)
+- [Lección 13 - Recursos estáticos](https://youtu.be/_y9qQZXE24A?t=13618)
+- [Lección 14 - Autorización OAuth2](https://youtu.be/_y9qQZXE24A?t=14094)
+- [Lección 15 - OAuth2 JWT](https://youtu.be/_y9qQZXE24A?t=17664)
+- [Lección 16 - MongoDB](https://youtu.be/_y9qQZXE24A?t=20480)
+- [Lección 17 - MongoDB Atlas](https://youtu.be/_y9qQZXE24A?t=25470)
+- [Lección 18 - Despliegue en Deta \*](https://youtu.be/_y9qQZXE24A?t=27335)
+- [Próximos pasos](https://youtu.be/_y9qQZXE24A?t=28484)
+
+**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/) y utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados, como [Render](https://render.com/).
 
 ### Frontend desde cero
 
@@ -146,21 +141,21 @@ Y para finalizar... ¿Quieres saber aun más sobre él? Aquí tienes 15 curiosid
 Actualmente el curso está en pausa. Se han finalizados los bloques básico, intermedio y backend, y ese era el objetivo inicial del proyecto.
 No descarto añadir nuevas lecciones a futuro, pero creo que por el momento puede servir de base a cualquier persona que quiera empezar a aprender este lenguaje.
 
-* Recuerda que he creado en el [Discord](https://discord.gg/mouredev) un canal "🐍python" para que puedas comentar lo que quieras.
-* En el momento que el curso continúe, actualizaré el repositorio y avisaré en redes.
+- Recuerda que he creado en el [Discord](https://discord.gg/mouredev) un canal "🐍python" para que puedas comentar lo que quieras.
+- En el momento que el curso continúe, actualizaré el repositorio y avisaré en redes.
 
 ¡Muchísimas gracias por todo el apoyo mostrado!
 
 ## Enlaces de interés
 
-* [Web oficial de Python](https://www.python.org/)
-* [Tutorial oficial de Python en Español](https://docs.python.org/es/3/tutorial/index.html)
-* [Repo 30 días de Python](https://github.com/Asabeneh/30-Days-Of-Python)
-* [Juego Codédex para aprender Python](https://www.codedex.io/)
-* [Visual Studio Code](https://code.visualstudio.com/): El editor que estoy usando
-* [FastAPI](https://fastapi.tiangolo.com/es/): El framework para crear nuestra API Backend
-* [MongoDB](https://www.mongodb.com/): La base de datos que utiliza nuestro backend
-* [Deta](https://www.deta.sh/): Para desplegar nuestra API en la nube
+- [Web oficial de Python](https://www.python.org/)
+- [Tutorial oficial de Python en Español](https://docs.python.org/es/3/tutorial/index.html)
+- [Repo 30 días de Python](https://github.com/Asabeneh/30-Days-Of-Python)
+- [Juego Codédex para aprender Python](https://www.codedex.io/)
+- [Visual Studio Code](https://code.visualstudio.com/): El editor que estoy usando
+- [FastAPI](https://fastapi.tiangolo.com/es/): El framework para crear nuestra API Backend
+- [MongoDB](https://www.mongodb.com/): La base de datos que utiliza nuestro backend
+- [Render](https://render.com/): Para desplegar nuestra API en la nube
 
 ## Únete al campus de programación de la comunidad
 
@@ -169,10 +164,11 @@ No descarto añadir nuevas lecciones a futuro, pero creo que por el momento pued
 #### Te presento [mouredev pro](https://mouredev.pro), mi proyecto más importante para ayudarte a estudiar programación y desarrollo de software de manera diferente.
 
 > **¿Buscas un extra?** Aquí encontrarás este y otros cursos editados por lecciones individuales, para avanzar a tu ritmo y guardar el progreso. También dispondrás de ejercicios y correcciones, test para validar tus conocimientos, examen y certificado público de finalización, soporte, foro de estudiantes, reunionnes grupales, cursos exclusivos y mucho más.
-> 
+>
 > Entra en **[mouredev.pro](https://mouredev.pro)** y utiliza el cupón **"PYTHON"** con un 10% de descuento en tu primera suscripción.
 
 ## ![https://mouredev.com](https://raw.githubusercontent.com/mouredev/mouredev/master/mouredev_emote.png) Hola, mi nombre es Brais Moure.
+
 ### Freelance full-stack iOS & Android engineer
 
 [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCxPD7bsocoAMq8Dj18kmGyQ?style=social)](https://youtube.com/mouredevapps?sub_confirmation=1)

From 724f9779184ee9a5ce0ff57bed37508c9d5e9002 Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 09:27:34 +0200
Subject: [PATCH 02/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/{FastAPI => }/requirements.txt |  1 +
 Backend/vercel.json                    | 14 ++++++++++++++
 README.md                              |  4 ++--
 3 files changed, 17 insertions(+), 2 deletions(-)
 rename Backend/{FastAPI => }/requirements.txt (93%)
 create mode 100644 Backend/vercel.json

diff --git a/Backend/FastAPI/requirements.txt b/Backend/requirements.txt
similarity index 93%
rename from Backend/FastAPI/requirements.txt
rename to Backend/requirements.txt
index 8ab5160..7605290 100644
--- a/Backend/FastAPI/requirements.txt
+++ b/Backend/requirements.txt
@@ -1,5 +1,6 @@
 # Clase en vídeo: https://youtu.be/_y9qQZXE24A?t=27335
 fastapi
+uvicorn
 python-jose
 passlib
 bcrypt
diff --git a/Backend/vercel.json b/Backend/vercel.json
new file mode 100644
index 0000000..1a01666
--- /dev/null
+++ b/Backend/vercel.json
@@ -0,0 +1,14 @@
+{
+    "builds": [
+        {
+            "src": "FastAPI/main.py",
+            "use": "@vercel/python"
+        }
+    ],
+    "routes": [
+        {
+            "src": "/(.*)",
+            "dest": "FastAPI/main.py"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 193dcdc..53c099a 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@ Curso en el que aprenderemos a utilizar Python para backend e implementaremos un
 - [Lección 18 - Despliegue en Deta \*](https://youtu.be/_y9qQZXE24A?t=27335)
 - [Próximos pasos](https://youtu.be/_y9qQZXE24A?t=28484)
 
-**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/) y utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados, como [Render](https://render.com/).
+**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/). Puedes utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados. En mi caso, te dejo el fichero de configuración para hacerlo desde [Vercel](https://vercel.com/).
 
 ### Frontend desde cero
 
@@ -155,7 +155,7 @@ No descarto añadir nuevas lecciones a futuro, pero creo que por el momento pued
 - [Visual Studio Code](https://code.visualstudio.com/): El editor que estoy usando
 - [FastAPI](https://fastapi.tiangolo.com/es/): El framework para crear nuestra API Backend
 - [MongoDB](https://www.mongodb.com/): La base de datos que utiliza nuestro backend
-- [Render](https://render.com/): Para desplegar nuestra API en la nube
+- [Vercel](https://vercel.com/): Para desplegar nuestra API en la nube
 
 ## Únete al campus de programación de la comunidad
 

From 1d35b0aa46d6e1448abe865dde7889e8faf0651b Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 09:45:05 +0200
Subject: [PATCH 03/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/main.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Backend/FastAPI/main.py b/Backend/FastAPI/main.py
index 09d72fa..afe7fbc 100644
--- a/Backend/FastAPI/main.py
+++ b/Backend/FastAPI/main.py
@@ -7,7 +7,7 @@
 # Instala FastAPI: pip install "fastapi[all]"
 
 from fastapi import FastAPI
-from routers import products, users, basic_auth_users, jwt_auth_users, users_db
+from .routers import products, users, basic_auth_users, jwt_auth_users, users_db
 from fastapi.staticfiles import StaticFiles
 
 app = FastAPI()

From 499300d39b402c64bbb502f847519f435be74c93 Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 09:49:33 +0200
Subject: [PATCH 04/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/routers/basic_auth_users.py |  8 +++++---
 Backend/FastAPI/routers/jwt_auth_users.py   | 11 ++++++-----
 Backend/FastAPI/routers/products.py         | 11 ++++++-----
 Backend/FastAPI/routers/users_db.py         |  8 +++++---
 4 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/Backend/FastAPI/routers/basic_auth_users.py b/Backend/FastAPI/routers/basic_auth_users.py
index 21b65fa..da1b0f2 100644
--- a/Backend/FastAPI/routers/basic_auth_users.py
+++ b/Backend/FastAPI/routers/basic_auth_users.py
@@ -6,9 +6,11 @@
 from pydantic import BaseModel
 from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
 
-router = APIRouter(prefix="/basicauth",
-                   tags=["basicauth"],
-                   responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}})
+router = APIRouter(
+    prefix="/basicauth",
+    tags=["basicauth"],
+    responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}}
+)
 
 oauth2 = OAuth2PasswordBearer(tokenUrl="login")
 
diff --git a/Backend/FastAPI/routers/jwt_auth_users.py b/Backend/FastAPI/routers/jwt_auth_users.py
index 8cb57b3..dd26688 100644
--- a/Backend/FastAPI/routers/jwt_auth_users.py
+++ b/Backend/FastAPI/routers/jwt_auth_users.py
@@ -7,16 +7,17 @@
 from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
 from jose import jwt, JWTError
 from passlib.context import CryptContext
-from datetime import datetime, timedelta
-import timezone
+from datetime import datetime, timedelta, timezone
 
 ALGORITHM = "HS256"
 ACCESS_TOKEN_DURATION = 1
 SECRET = "201d573bd7d1344d3a3bfce1550b69102fd11be3db6d379508b6cccc58ea230b"
 
-router = APIRouter(prefix="/jwtauth",
-                   tags=["jwtauth"],
-                   responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}})
+router = APIRouter(
+    prefix="/jwtauth",
+    tags=["jwtauth"],
+    responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}}
+)
 
 oauth2 = OAuth2PasswordBearer(tokenUrl="login")
 
diff --git a/Backend/FastAPI/routers/products.py b/Backend/FastAPI/routers/products.py
index 6d85b33..4562224 100644
--- a/Backend/FastAPI/routers/products.py
+++ b/Backend/FastAPI/routers/products.py
@@ -4,12 +4,13 @@
 
 from fastapi import APIRouter
 
-router = APIRouter(prefix="/products",
-                   tags=["products"],
-                   responses={404: {"message": "No encontrado"}})
+router = APIRouter(
+    prefix="/products",
+    tags=["products"],
+    responses={404: {"message": "No encontrado"}}
+)
 
-products_list = ["Producto 1", "Producto 2",
-                 "Producto 3", "Producto 4", "Producto 5"]
+products_list = ["Producto 1", "Producto 2", "Producto 3", "Producto 4", "Producto 5"]
 
 
 @router.get("/")
diff --git a/Backend/FastAPI/routers/users_db.py b/Backend/FastAPI/routers/users_db.py
index 7e61d75..7cdf6ff 100644
--- a/Backend/FastAPI/routers/users_db.py
+++ b/Backend/FastAPI/routers/users_db.py
@@ -8,9 +8,11 @@
 from db.client import db_client
 from bson import ObjectId
 
-router = APIRouter(prefix="/userdb",
-                   tags=["userdb"],
-                   responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}})
+router = APIRouter(
+    prefix="/userdb",
+    tags=["userdb"],
+    responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}}
+)
 
 
 @router.get("/", response_model=list[User])

From 75afa14822d0abe12320e3cf25a708035e6c2b94 Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 09:53:58 +0200
Subject: [PATCH 05/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/routers/users_db.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Backend/FastAPI/routers/users_db.py b/Backend/FastAPI/routers/users_db.py
index 7cdf6ff..332a6af 100644
--- a/Backend/FastAPI/routers/users_db.py
+++ b/Backend/FastAPI/routers/users_db.py
@@ -3,9 +3,9 @@
 ### Users DB API ###
 
 from fastapi import APIRouter, HTTPException, status
-from db.models.user import User
-from db.schemas.user import user_schema, users_schema
-from db.client import db_client
+from ..db.models.user import User
+from ..db.schemas.user import user_schema, users_schema
+from ..db.client import db_client
 from bson import ObjectId
 
 router = APIRouter(

From eae102500208afc3c0e16e74ba77fb092a2e3c15 Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 10:02:13 +0200
Subject: [PATCH 06/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/main.py             | 3 ++-
 Backend/FastAPI/routers/users_db.py | 6 +++---
 Backend/vercel.json                 | 4 ++--
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/Backend/FastAPI/main.py b/Backend/FastAPI/main.py
index afe7fbc..c8ba083 100644
--- a/Backend/FastAPI/main.py
+++ b/Backend/FastAPI/main.py
@@ -7,8 +7,9 @@
 # Instala FastAPI: pip install "fastapi[all]"
 
 from fastapi import FastAPI
-from .routers import products, users, basic_auth_users, jwt_auth_users, users_db
+from routers import products, users, basic_auth_users, jwt_auth_users, users_db
 from fastapi.staticfiles import StaticFiles
+import os
 
 app = FastAPI()
 
diff --git a/Backend/FastAPI/routers/users_db.py b/Backend/FastAPI/routers/users_db.py
index 332a6af..7cdf6ff 100644
--- a/Backend/FastAPI/routers/users_db.py
+++ b/Backend/FastAPI/routers/users_db.py
@@ -3,9 +3,9 @@
 ### Users DB API ###
 
 from fastapi import APIRouter, HTTPException, status
-from ..db.models.user import User
-from ..db.schemas.user import user_schema, users_schema
-from ..db.client import db_client
+from db.models.user import User
+from db.schemas.user import user_schema, users_schema
+from db.client import db_client
 from bson import ObjectId
 
 router = APIRouter(
diff --git a/Backend/vercel.json b/Backend/vercel.json
index 1a01666..7cd0d44 100644
--- a/Backend/vercel.json
+++ b/Backend/vercel.json
@@ -1,14 +1,14 @@
 {
     "builds": [
         {
-            "src": "FastAPI/main.py",
+            "src": "Backend/FastAPI/main.py",
             "use": "@vercel/python"
         }
     ],
     "routes": [
         {
             "src": "/(.*)",
-            "dest": "FastAPI/main.py"
+            "dest": "Backend/FastAPI/main.py"
         }
     ]
 }
\ No newline at end of file

From a116e759ca97b5982a3ee7e23c1ec12328ac145e Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 10:08:08 +0200
Subject: [PATCH 07/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/main.py             | 6 ++++--
 Backend/FastAPI/routers/users_db.py | 9 ++++-----
 Backend/vercel.json                 | 4 ++--
 3 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/Backend/FastAPI/main.py b/Backend/FastAPI/main.py
index c8ba083..39b3e6e 100644
--- a/Backend/FastAPI/main.py
+++ b/Backend/FastAPI/main.py
@@ -7,7 +7,7 @@
 # Instala FastAPI: pip install "fastapi[all]"
 
 from fastapi import FastAPI
-from routers import products, users, basic_auth_users, jwt_auth_users, users_db
+from .routers import products, users, basic_auth_users, jwt_auth_users, users_db
 from fastapi.staticfiles import StaticFiles
 import os
 
@@ -27,7 +27,9 @@
 app.include_router(users_db.router)
 
 # Clase en vídeo: https://youtu.be/_y9qQZXE24A?t=13618
-app.mount("/static", StaticFiles(directory="static"), name="static")
+# Nos aseguramos de obtener la ruta completa al directorio "static"
+static_dir = os.path.join(os.path.dirname(__file__), "static")
+app.mount("/static", StaticFiles(directory=static_dir), name="static")
 
 
 # Url local: http://127.0.0.1:8000
diff --git a/Backend/FastAPI/routers/users_db.py b/Backend/FastAPI/routers/users_db.py
index 7cdf6ff..7a53d6f 100644
--- a/Backend/FastAPI/routers/users_db.py
+++ b/Backend/FastAPI/routers/users_db.py
@@ -3,16 +3,15 @@
 ### Users DB API ###
 
 from fastapi import APIRouter, HTTPException, status
-from db.models.user import User
-from db.schemas.user import user_schema, users_schema
-from db.client import db_client
+from ..db.models.user import User
+from ..db.schemas.user import user_schema, users_schema
+from ..db.client import db_client
 from bson import ObjectId
 
 router = APIRouter(
     prefix="/userdb",
     tags=["userdb"],
-    responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}}
-)
+    responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}})
 
 
 @router.get("/", response_model=list[User])
diff --git a/Backend/vercel.json b/Backend/vercel.json
index 7cd0d44..1a01666 100644
--- a/Backend/vercel.json
+++ b/Backend/vercel.json
@@ -1,14 +1,14 @@
 {
     "builds": [
         {
-            "src": "Backend/FastAPI/main.py",
+            "src": "FastAPI/main.py",
             "use": "@vercel/python"
         }
     ],
     "routes": [
         {
             "src": "/(.*)",
-            "dest": "Backend/FastAPI/main.py"
+            "dest": "FastAPI/main.py"
         }
     ]
 }
\ No newline at end of file

From 737df37f2104f830afa5cf850f7d039e67ba0396 Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 10:29:50 +0200
Subject: [PATCH 08/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/main.py             | 3 ++-
 Backend/FastAPI/routers/users_db.py | 1 +
 README.md                           | 2 +-
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/Backend/FastAPI/main.py b/Backend/FastAPI/main.py
index 39b3e6e..8774f26 100644
--- a/Backend/FastAPI/main.py
+++ b/Backend/FastAPI/main.py
@@ -7,6 +7,7 @@
 # Instala FastAPI: pip install "fastapi[all]"
 
 from fastapi import FastAPI
+# Utilizo .routers para hacer referencia a la ruta relativa (y así no tener problemas en el despliegue)
 from .routers import products, users, basic_auth_users, jwt_auth_users, users_db
 from fastapi.staticfiles import StaticFiles
 import os
@@ -27,7 +28,7 @@
 app.include_router(users_db.router)
 
 # Clase en vídeo: https://youtu.be/_y9qQZXE24A?t=13618
-# Nos aseguramos de obtener la ruta completa al directorio "static"
+# Nos aseguramos de obtener la ruta completa al directorio "static" (y así no tener problemas en el despliegue)
 static_dir = os.path.join(os.path.dirname(__file__), "static")
 app.mount("/static", StaticFiles(directory=static_dir), name="static")
 
diff --git a/Backend/FastAPI/routers/users_db.py b/Backend/FastAPI/routers/users_db.py
index 7a53d6f..447b482 100644
--- a/Backend/FastAPI/routers/users_db.py
+++ b/Backend/FastAPI/routers/users_db.py
@@ -3,6 +3,7 @@
 ### Users DB API ###
 
 from fastapi import APIRouter, HTTPException, status
+# Utilizo ..db para hacer referencia a la ruta relativa (y así no tener problemas en el despliegue)
 from ..db.models.user import User
 from ..db.schemas.user import user_schema, users_schema
 from ..db.client import db_client
diff --git a/README.md b/README.md
index 53c099a..19c16bc 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@ Curso en el que aprenderemos a utilizar Python para backend e implementaremos un
 - [Lección 18 - Despliegue en Deta \*](https://youtu.be/_y9qQZXE24A?t=27335)
 - [Próximos pasos](https://youtu.be/_y9qQZXE24A?t=28484)
 
-**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/). Puedes utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados. En mi caso, te dejo el fichero de configuración para hacerlo desde [Vercel](https://vercel.com/).
+**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/). Puedes utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados. En mi caso, te dejo el [fichero de configuración](./Backend/vercel.json) para hacerlo desde [Vercel](https://vercel.com/) (al crear el proyecto en la plataforma selecciona que el directorio "Backend" es la root).
 
 ### Frontend desde cero
 

From 8df253770e674e7bf5aa601fe6f5684e5a4be90d Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 10:46:25 +0200
Subject: [PATCH 09/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/main.py                | 7 ++-----
 Backend/{ => FastAPI}/requirements.txt | 0
 Backend/FastAPI/routers/users_db.py    | 7 +++----
 Backend/{ => FastAPI}/vercel.json      | 4 ++--
 4 files changed, 7 insertions(+), 11 deletions(-)
 rename Backend/{ => FastAPI}/requirements.txt (100%)
 rename Backend/{ => FastAPI}/vercel.json (66%)

diff --git a/Backend/FastAPI/main.py b/Backend/FastAPI/main.py
index 8774f26..c8ba083 100644
--- a/Backend/FastAPI/main.py
+++ b/Backend/FastAPI/main.py
@@ -7,8 +7,7 @@
 # Instala FastAPI: pip install "fastapi[all]"
 
 from fastapi import FastAPI
-# Utilizo .routers para hacer referencia a la ruta relativa (y así no tener problemas en el despliegue)
-from .routers import products, users, basic_auth_users, jwt_auth_users, users_db
+from routers import products, users, basic_auth_users, jwt_auth_users, users_db
 from fastapi.staticfiles import StaticFiles
 import os
 
@@ -28,9 +27,7 @@
 app.include_router(users_db.router)
 
 # Clase en vídeo: https://youtu.be/_y9qQZXE24A?t=13618
-# Nos aseguramos de obtener la ruta completa al directorio "static" (y así no tener problemas en el despliegue)
-static_dir = os.path.join(os.path.dirname(__file__), "static")
-app.mount("/static", StaticFiles(directory=static_dir), name="static")
+app.mount("/static", StaticFiles(directory="static"), name="static")
 
 
 # Url local: http://127.0.0.1:8000
diff --git a/Backend/requirements.txt b/Backend/FastAPI/requirements.txt
similarity index 100%
rename from Backend/requirements.txt
rename to Backend/FastAPI/requirements.txt
diff --git a/Backend/FastAPI/routers/users_db.py b/Backend/FastAPI/routers/users_db.py
index 447b482..1b5645f 100644
--- a/Backend/FastAPI/routers/users_db.py
+++ b/Backend/FastAPI/routers/users_db.py
@@ -3,10 +3,9 @@
 ### Users DB API ###
 
 from fastapi import APIRouter, HTTPException, status
-# Utilizo ..db para hacer referencia a la ruta relativa (y así no tener problemas en el despliegue)
-from ..db.models.user import User
-from ..db.schemas.user import user_schema, users_schema
-from ..db.client import db_client
+from db.models.user import User
+from db.schemas.user import user_schema, users_schema
+from db.client import db_client
 from bson import ObjectId
 
 router = APIRouter(
diff --git a/Backend/vercel.json b/Backend/FastAPI/vercel.json
similarity index 66%
rename from Backend/vercel.json
rename to Backend/FastAPI/vercel.json
index 1a01666..10bc3cd 100644
--- a/Backend/vercel.json
+++ b/Backend/FastAPI/vercel.json
@@ -1,14 +1,14 @@
 {
     "builds": [
         {
-            "src": "FastAPI/main.py",
+            "src": "main.py",
             "use": "@vercel/python"
         }
     ],
     "routes": [
         {
             "src": "/(.*)",
-            "dest": "FastAPI/main.py"
+            "dest": "main.py"
         }
     ]
 }
\ No newline at end of file

From c7f7f780a6bef45ddc2639d09ed143a833589f9f Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 10:51:50 +0200
Subject: [PATCH 10/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 19c16bc..1e0acde 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@ Curso en el que aprenderemos a utilizar Python para backend e implementaremos un
 - [Lección 18 - Despliegue en Deta \*](https://youtu.be/_y9qQZXE24A?t=27335)
 - [Próximos pasos](https://youtu.be/_y9qQZXE24A?t=28484)
 
-**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/). Puedes utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados. En mi caso, te dejo el [fichero de configuración](./Backend/vercel.json) para hacerlo desde [Vercel](https://vercel.com/) (al crear el proyecto en la plataforma selecciona que el directorio "Backend" es la root).
+**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/). Puedes utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados. En mi caso, te dejo el [fichero de configuración](./Backend/FastAPI/vercel.json) para hacerlo desde [Vercel](https://vercel.com/) (al crear el proyecto en la plataforma selecciona que el directorio "Backend/FastAPI" es el root).
 
 ### Frontend desde cero
 

From 6e66a60ade7e2dc3e7245880de229006778dacd7 Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 11:07:24 +0200
Subject: [PATCH 11/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1e0acde..c423682 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@ Curso en el que aprenderemos a utilizar Python para backend e implementaremos un
 - [Lección 18 - Despliegue en Deta \*](https://youtu.be/_y9qQZXE24A?t=27335)
 - [Próximos pasos](https://youtu.be/_y9qQZXE24A?t=28484)
 
-**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/). Puedes utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados. En mi caso, te dejo el [fichero de configuración](./Backend/FastAPI/vercel.json) para hacerlo desde [Vercel](https://vercel.com/) (al crear el proyecto en la plataforma selecciona que el directorio "Backend/FastAPI" es el root).
+**\*ACTUALIZACIÓN Sobre la lección 18:** Deta, el servicio utilizado para el despliegue durante el curso, ya no existe. Te recomiendo revisar la documentación oficial de FastAPI sobre [despliegue](https://fastapi.tiangolo.com/deployment/). Puedes utilizar alguno de los [proveedores gratuitos](https://fastapi.tiangolo.com/deployment/cloud/) recomendados. En mi caso, te dejo el [fichero de configuración](./Backend/FastAPI/vercel.json) y el de [dependencias](./Backend/FastAPI/requirements.txt) para hacerlo desde [Vercel](https://vercel.com/) (al crear el proyecto en la plataforma selecciona que el directorio "Backend/FastAPI" es el root).
 
 ### Frontend desde cero
 

From 20e4c14bf7b5ac9e3b8bcac2bf8afa0a190dabdf Mon Sep 17 00:00:00 2001
From: Brais Moure <mouredev@gmail.com>
Date: Mon, 11 Aug 2025 11:37:22 +0200
Subject: [PATCH 12/12] =?UTF-8?q?Actualizaci=C3=B3n=20curso=20backend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Backend/FastAPI/db/client.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/Backend/FastAPI/db/client.py b/Backend/FastAPI/db/client.py
index bfccb67..d92a361 100644
--- a/Backend/FastAPI/db/client.py
+++ b/Backend/FastAPI/db/client.py
@@ -22,5 +22,10 @@
 #     "mongodb+srv://<user>:<password>@<url>/?retryWrites=true&w=majority").test
 
 # Despliegue API en la nube:
-# Deta - https://www.deta.sh/
-# Intrucciones - https://fastapi.tiangolo.com/deployment/deta/
+# Deta (deprecado) - https://www.deta.sh/
+# Vercel - https://www.vercel.com
+# Instrucciones - https://cleverzone.medium.com/fastapi-deployment-into-vercel-0fa4e6478014
+# MUY IMPORTANTE - Al desplegar en producción, preparar el proyecto para trabajar con variables de entorno que hagan referencia a datos sensibles:
+# - Nunca subas a un repositorio público el valor de las variables
+# - Puedes usar dotenv en Python
+# - Añade el valor de las variables desde el proveedor de hosting
