diff --git a/app/core/config.py b/app/core/config.py
index d61a265ca889abfe20de8b39a82cfc5595178f10..40459337d2bbf950eac401848775ddbf285218fb 100644
--- a/app/core/config.py
+++ b/app/core/config.py
@@ -6,7 +6,7 @@ class Settings(BaseSettings):
     app_name: str = "Shopping App"
     database_url: str  # Ensure lowercase to match the .env key
     secret_key: str
-    debug: bool = True  # Lowercase to match Python conventions
+    debug: bool = True
 
     model_config = SettingsConfigDict(
         env_file=str(Path(__file__).resolve().parent.parent / ".env"),
diff --git a/app/frontend/components/login.py b/app/frontend/components/login.py
index 34a11227a9631acd8ce677fbca67c6d95f47e615..a52331bec7f4d148e3da874287a4492f4e2e5c80 100644
--- a/app/frontend/components/login.py
+++ b/app/frontend/components/login.py
@@ -1,39 +1,49 @@
 import ttkbootstrap as tb
 from ttkbootstrap.constants import *
 from tkinter import messagebox
+import requests  # Import requests for API communication
 
-# Function to handle login
-def login():
-    username = entry_username.get()
-    password = entry_password.get()
-
-    if username == "admin" and password == "password":  # Dummy credentials
-        messagebox.showinfo("Login Successful", "Welcome, Admin!")
-    else:
-        messagebox.showerror("Login Failed", "Invalid username or password.")
-
-# Create main window
-root = tb.Window(themename="superhero")  # Try different themes like "darkly", "minty", etc.
-root.title("Login Form")
-root.geometry("900x800")
-
-# Title Label
-label_title = tb.Label(root, text="Login", font=("Helvetica", 18, "bold"))
-label_title.pack(pady=10)
-
-# Username Entry
-tb.Label(root, text="Username:").pack(pady=5)
-entry_username = tb.Entry(root, bootstyle="info")
-entry_username.pack(pady=5)
-
-# Password Entry
-tb.Label(root, text="Password:").pack(pady=5)
-entry_password = tb.Entry(root, bootstyle="info", show="*")  # Masked input
-entry_password.pack(pady=5)
-
-# Login Button
-btn_login = tb.Button(root, text="Login", bootstyle="primary", command=login)
-btn_login.pack(pady=15)
-
-# Run the GUI
-root.mainloop()
+def login_frame(parent, switch_func, api_url):  # Added api_url parameter
+    frame = tb.Frame(parent)
+
+    def login():
+        email = entry_email.get()
+        password = entry_password.get()
+
+        if not email or not password:
+            messagebox.showwarning("Input Error", "Both fields are required!")
+            return
+
+        # Sending login request to backend
+        response = requests.post(f"{api_url}/auth/login", json={
+            "email": email,
+            "password": password
+        })
+
+        try:
+            response_data = response.json()
+            if response.status_code == 200:
+                messagebox.showinfo("Login Successful", f"Welcome back, {email}!")
+                # TODO: Implement navigation after login (e.g., open dashboard)
+            else:
+                messagebox.showerror("Login Failed", response_data.get("detail", "Invalid credentials"))
+        except requests.exceptions.JSONDecodeError:
+            messagebox.showerror("Login Failed", "Server returned an invalid response.")
+
+    tb.Label(frame, text="Login", font=("Helvetica", 18, "bold")).pack(pady=10)
+
+    tb.Label(frame, text="Email:").pack(pady=5)
+    entry_email = tb.Entry(frame, bootstyle="info")
+    entry_email.pack(pady=5)
+
+    tb.Label(frame, text="Password:").pack(pady=5)
+    entry_password = tb.Entry(frame, bootstyle="info", show="*")
+    entry_password.pack(pady=5)
+
+    btn_login = tb.Button(frame, text="Login", bootstyle="primary", command=login)
+    btn_login.pack(pady=15)
+
+    tb.Button(frame, text="Don't have an account? Register", bootstyle="link",
+              command=lambda: switch_func("register")).pack()
+
+    return frame
diff --git a/app/frontend/components/register.py b/app/frontend/components/register.py
index f6829458f1e41ef409b253f8fd9239a674db43fd..4f0b034660827e3892cdb629a70afac4467639d3 100644
--- a/app/frontend/components/register.py
+++ b/app/frontend/components/register.py
@@ -1,63 +1,70 @@
 import ttkbootstrap as tb
 from ttkbootstrap.constants import *
 from tkinter import messagebox
+import requests  # Import requests for API communication
 
-# Function to handle registration
-def register():
-    username = entry_username.get()
-    email = entry_email.get()
-    phone_number = entry_phone.get()
-    password = entry_password.get()
-    confirm_password = entry_confirm_password.get()
-
-    if not username or not email or not phone_number or not password or not confirm_password:
-        messagebox.showwarning("Input Error", "All fields are required!")
-        return
-
-    if password != confirm_password:
-        messagebox.showerror("Password Error", "Passwords do not match!")
-        return
-
-    # Dummy registration success message (Replace with DB logic)
-    messagebox.showinfo("Registration Successful", f"Welcome, {username}!")
-
-# Create main window
-root = tb.Window(themename="superhero")  # Change to "darkly", "superhero", etc.
-root.title("Register")
-root.geometry("900x800")
-
-# Title Label
-label_title = tb.Label(root, text="Register", font=("Helvetica", 18, "bold"))
-label_title.pack(pady=10)
-
-# Username Entry
-tb.Label(root, text="Username:").pack(pady=5)
-entry_username = tb.Entry(root, bootstyle="info")
-entry_username.pack(pady=5)
-
-# Email Entry
-tb.Label(root, text="Email:").pack(pady=5)
-entry_email = tb.Entry(root, bootstyle="info")
-entry_email.pack(pady=5)
-
-# Phone Entry
-tb.Label(root, text="Phone Number:").pack(pady=5)
-entry_phone = tb.Entry(root, bootstyle="info")
-entry_phone.pack(pady=5)
-
-# Password Entry
-tb.Label(root, text="Password:").pack(pady=5)
-entry_password = tb.Entry(root, bootstyle="info", show="*")
-entry_password.pack(pady=5)
-
-# Confirm Password Entry
-tb.Label(root, text="Confirm Password:").pack(pady=5)
-entry_confirm_password = tb.Entry(root, bootstyle="info", show="*")
-entry_confirm_password.pack(pady=5)
-
-# Register Button
-btn_register = tb.Button(root, text="Register", bootstyle="success", command=register)
-btn_register.pack(pady=15)
-
-# Run the GUI
-root.mainloop()
+def register_frame(parent, switch_func, api_url):  # Added api_url parameter
+    frame = tb.Frame(parent)
+
+    def register():
+        username = entry_username.get()
+        email = entry_email.get()
+        phone_number = entry_phone.get()
+        password = entry_password.get()
+        confirm_password = entry_confirm_password.get()
+
+        if not username or not email or not phone_number or not password or not confirm_password:
+            messagebox.showwarning("Input Error", "All fields are required!")
+            return
+
+        if password != confirm_password:
+            messagebox.showerror("Password Error", "Passwords do not match!")
+            return
+
+        # Sending registration data to backend
+        response = requests.post(f"{api_url}/auth/signup", json={
+            "username": username,
+            "email": email,
+            "phone_number": phone_number,
+            "password": password
+        })
+
+        try:
+            response_data = response.json()
+            if response.status_code == 200:
+                messagebox.showinfo("Registration Successful", f"Welcome, {username}!")
+                switch_func("login")  # Switch to login after successful registration
+            else:
+                messagebox.showerror("Registration Failed", response_data.get("detail", "Unknown error"))
+        except requests.exceptions.JSONDecodeError:
+            messagebox.showerror("Registration Failed", f"Server returned an invalid response.")
+
+    tb.Label(frame, text="Register", font=("Helvetica", 18, "bold")).pack(pady=10)
+
+    tb.Label(frame, text="Username:").pack(pady=5)
+    entry_username = tb.Entry(frame, bootstyle="info")
+    entry_username.pack(pady=5)
+
+    tb.Label(frame, text="Email:").pack(pady=5)
+    entry_email = tb.Entry(frame, bootstyle="info")
+    entry_email.pack(pady=5)
+
+    tb.Label(frame, text="Phone Number:").pack(pady=5)
+    entry_phone = tb.Entry(frame, bootstyle="info")
+    entry_phone.pack(pady=5)
+
+    tb.Label(frame, text="Password:").pack(pady=5)
+    entry_password = tb.Entry(frame, bootstyle="info", show="*")
+    entry_password.pack(pady=5)
+
+    tb.Label(frame, text="Confirm Password:").pack(pady=5)
+    entry_confirm_password = tb.Entry(frame, bootstyle="info", show="*")
+    entry_confirm_password.pack(pady=5)
+
+    btn_register = tb.Button(frame, text="Register", bootstyle="success", command=register)
+    btn_register.pack(pady=15)
+
+    tb.Button(frame, text="Already have an account? Login", bootstyle="link",
+              command=lambda: switch_func("login")).pack()
+
+    return frame
diff --git a/app/frontend/main.py b/app/frontend/main.py
index ca21b73bb584a4874aa25ed97899f08625766675..680f7df1c8f7f934d62dd2a665599829479cf1b5 100644
--- a/app/frontend/main.py
+++ b/app/frontend/main.py
@@ -1,101 +1,31 @@
 import ttkbootstrap as tb
-from ttkbootstrap.constants import *
-from tkinter import messagebox
-import requests
+from components.login import login_frame
+from components.register import register_frame
 
 # Backend API URL
 API_URL = "http://127.0.0.1:8000"
 
-# Function to handle registration
-def register():
-    username = entry_username.get()
-    email = entry_email.get()
-    phone_number = entry_phone.get()
-    password = entry_password.get()
-    confirm_password = entry_confirm_password.get()
-
-    if not username or not email or not password or not confirm_password:
-        messagebox.showwarning("Input Error", "All fields are required!")
-        return
-
-    if password != confirm_password:
-        messagebox.showerror("Password Error", "Passwords do not match!")
-        return
-
-    # Send registration data to backend
-    response = requests.post(f"{API_URL}/auth/signup", json={
-        "username": username,
-        "email": email,
-        "phone_number": phone_number,
-        "password": password
-    })
-
-    try:
-        response_data = response.json()
-        if response.status_code == 200:
-            messagebox.showinfo("Registration Successful", f"Welcome, {username}!")
-        else:
-            messagebox.showerror("Registration Failed", response_data.get("detail", "Unknown error"))
-    except requests.exceptions.JSONDecodeError:
-        messagebox.showerror("Registration Failed", f"Server returned non-JSON response: {response.text}")
-
-# Function to handle login
-def login():
-    email = entry_email.get()
-    password = entry_password.get()
-
-    # Send login data to backend
-    response = requests.post(f"{API_URL}/auth/login", json={
-        "email": email,
-        "password": password
-    })
-
-    if response.status_code == 200:
-        messagebox.showinfo("Login Successful", "Welcome!")
-    else:
-        messagebox.showerror("Login Failed", response.json().get("detail", "Invalid credentials"))
+# Function to switch between login and register
+def switch_frame(frame_name):
+    if frame_name == "login":
+        login.tkraise()
+    elif frame_name == "register":
+        register.tkraise()
 
 # Create main window
-root = tb.Window(themename="superhero")  # Change to "darkly", "superhero", etc.
+root = tb.Window(themename="superhero")
 root.title("Shopping App")
 root.geometry("900x800")
 
-# Title Label
-label_title = tb.Label(root, text="Shopping App", font=("Helvetica", 18, "bold"))
-label_title.pack(pady=10)
-
-# Username Entry
-tb.Label(root, text="Username:").pack(pady=5)
-entry_username = tb.Entry(root, bootstyle="info")
-entry_username.pack(pady=5)
-
-# Email Entry
-tb.Label(root, text="Email:").pack(pady=5)
-entry_email = tb.Entry(root, bootstyle="info")
-entry_email.pack(pady=5)
-
-# Phone Entry
-tb.Label(root, text="Phone Number:").pack(pady=5)
-entry_phone = tb.Entry(root, bootstyle="info")
-entry_phone.pack(pady=5)
-
-# Password Entry
-tb.Label(root, text="Password:").pack(pady=5)
-entry_password = tb.Entry(root, bootstyle="info", show="*")
-entry_password.pack(pady=5)
-
-# Confirm Password Entry
-tb.Label(root, text="Confirm Password:").pack(pady=5)
-entry_confirm_password = tb.Entry(root, bootstyle="info", show="*")
-entry_confirm_password.pack(pady=5)
+# Create Frames
+login = login_frame(root, switch_frame, API_URL)
+register = register_frame(root, switch_frame, API_URL)
 
-# Register Button
-btn_register = tb.Button(root, text="Register", bootstyle="success", command=register)
-btn_register.pack(pady=15)
+for frame in (login, register):
+    frame.place(relx=0, rely=0.2, relwidth=1, relheight=1)
 
-# Login Button
-btn_login = tb.Button(root, text="Login", bootstyle="primary", command=login)
-btn_login.pack(pady=15)
+# Show Login Frame First
+switch_frame("login")
 
 # Run the GUI
-root.mainloop()
\ No newline at end of file
+root.mainloop()
diff --git a/requirements.txt b/requirements.txt
index a9f5493b0494ce61126f5380e9f8c496c94b7327..274404719ffab8b40b176df1b46e4394eb5c7ed1 100644
Binary files a/requirements.txt and b/requirements.txt differ