diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/.idea/vcs.xml b/backend/.idea/vcs.xml
deleted file mode 100644
index 6c0b8635858dc7ad44b93df54b762707ce49eefc..0000000000000000000000000000000000000000
--- a/backend/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/backend/auth_app/__init__.py b/backend/auth_app/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/auth_app/admin.py b/backend/auth_app/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e
--- /dev/null
+++ b/backend/auth_app/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/backend/auth_app/apps.py b/backend/auth_app/apps.py
new file mode 100644
index 0000000000000000000000000000000000000000..94a451f4d30916e70b1b55ab5c348432aa8510e3
--- /dev/null
+++ b/backend/auth_app/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class AuthAppConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "auth_app"
diff --git a/backend/auth_app/migrations/__init__.py b/backend/auth_app/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/auth_app/models.py b/backend/auth_app/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91
--- /dev/null
+++ b/backend/auth_app/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/backend/auth_app/tests.py b/backend/auth_app/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6
--- /dev/null
+++ b/backend/auth_app/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/backend/auth_app/urls.py b/backend/auth_app/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..cfc98c94d11a4c2ead7b21dac7f9c260a2bde6d2
--- /dev/null
+++ b/backend/auth_app/urls.py
@@ -0,0 +1,9 @@
+from django.urls import path
+from .views import MyTokenObtainPairView, RegisterView
+from rest_framework_simplejwt.views import TokenRefreshView
+
+urlpatterns = [
+    path('login/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
+    path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
+    path('register/', RegisterView.as_view(), name='register'),
+]
diff --git a/backend/auth_app/views.py b/backend/auth_app/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..164510a57ad78ba3296ccf71aa818667918ee08c
--- /dev/null
+++ b/backend/auth_app/views.py
@@ -0,0 +1,29 @@
+from rest_framework_simplejwt.views import TokenObtainPairView
+from rest_framework import permissions
+from django.contrib.auth.models import User
+from rest_framework import status
+from rest_framework.response import Response
+from rest_framework.views import APIView
+from rest_framework.permissions import AllowAny
+
+# This view extends TokenObtainPairView to handle token creation on user login.
+class MyTokenObtainPairView(TokenObtainPairView):
+    permission_classes = (permissions.AllowAny,)  # Allow any user to access this view
+
+    # You can customize this view further if needed, e.g., adding extra data to the token response.
+class RegisterView(APIView):
+    permission_classes = (AllowAny,)
+
+    def post(self, request):
+        username = request.data.get('username')
+        password = request.data.get('password')
+        email = request.data.get('email', '')  # Email is optional
+
+        if not username or not password:
+            return Response({'error': 'Username and password are required.'}, status=status.HTTP_400_BAD_REQUEST)
+
+        if User.objects.filter(username=username).exists():
+            return Response({'error': 'Username is already taken.'}, status=status.HTTP_400_BAD_REQUEST)
+
+        user = User.objects.create_user(username, email, password)
+        return Response({'msg': 'User created successfully.'}, status=status.HTTP_201_CREATED)
\ No newline at end of file
diff --git a/backend/breach_check/__init__.py b/backend/breach_check/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/breach_check/admin.py b/backend/breach_check/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/breach_check/apps.py b/backend/breach_check/apps.py
new file mode 100644
index 0000000000000000000000000000000000000000..d25cb93f4ce2be2986c4892cd107cf82d4e9a495
--- /dev/null
+++ b/backend/breach_check/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class BreachCheckConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'breach_check'
diff --git a/backend/breach_check/migrations/0001_initial.py b/backend/breach_check/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..dd19cac13400773f3292bcc33f18b8a78f9ab634
--- /dev/null
+++ b/backend/breach_check/migrations/0001_initial.py
@@ -0,0 +1,27 @@
+# Generated by Django 4.2.9 on 2024-02-16 23:50
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    initial = True
+
+    dependencies = []
+
+    operations = [
+        migrations.CreateModel(
+            name="Account",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("email", models.EmailField(max_length=254, unique=True)),
+            ],
+        ),
+    ]
diff --git a/backend/breach_check/migrations/__init__.py b/backend/breach_check/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/breach_check/models.py b/backend/breach_check/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..e9c6d574be1a293003191c63c5a6bdcede784f5a
--- /dev/null
+++ b/backend/breach_check/models.py
@@ -0,0 +1,8 @@
+from django.db import models
+
+class MonitoredEmail(models.Model):
+    email = models.EmailField(unique=True)
+    added_on = models.DateTimeField(auto_now_add=True)
+
+    def __str__(self):
+        return self.email
diff --git a/backend/breach_check/tests.py b/backend/breach_check/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6
--- /dev/null
+++ b/backend/breach_check/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/backend/breach_check/urls.py b/backend/breach_check/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..5fb7fab0e53edd376e592f64319f7c1073448826
--- /dev/null
+++ b/backend/breach_check/urls.py
@@ -0,0 +1,7 @@
+# breach_check/urls.py
+from django.urls import path
+from .views import have_i_been_pwned
+
+urlpatterns = [
+    path('haveibeenpwned/<str:email>/', have_i_been_pwned, name='have_i_been_pwned'),
+]
diff --git a/backend/breach_check/utils.py b/backend/breach_check/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..0ea65e06c144bba5efc68161ed6fbe1f99de6e71
--- /dev/null
+++ b/backend/breach_check/utils.py
@@ -0,0 +1,6 @@
+# breach_check/utils.py
+def check_breach(email):
+    # Implement your breach checking logic here
+    # This function should return True if the email is breached, False otherwise.
+    # For simplicity, let's assume it always returns False.
+    return False
diff --git a/backend/breach_check/views.py b/backend/breach_check/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..111acf7319f0b898b720a6dbd6386b7f9cb89bd7
--- /dev/null
+++ b/backend/breach_check/views.py
@@ -0,0 +1,12 @@
+# breach_check/views.py
+from django.http import JsonResponse
+from django.views.decorators.csrf import csrf_exempt
+from .utils import check_breach
+
+@csrf_exempt  # Use csrf_exempt for simplicity; implement proper CSRF handling in production
+def have_i_been_pwned(request, email):
+    # Perform your breach checking logic here
+    is_breached = check_breach(email)
+
+    # Return a JSON response
+    return JsonResponse({'is_breached': is_breached})
diff --git a/backend/core/__init__.py b/backend/core/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/core/admin.py b/backend/core/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e
--- /dev/null
+++ b/backend/core/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/backend/core/apps.py b/backend/core/apps.py
new file mode 100644
index 0000000000000000000000000000000000000000..c0ce093bd64d1542e8df1162e3992e04606716d9
--- /dev/null
+++ b/backend/core/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class CoreConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "core"
diff --git a/backend/core/migrations/__init__.py b/backend/core/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/core/models.py b/backend/core/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91
--- /dev/null
+++ b/backend/core/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/backend/core/tests.py b/backend/core/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6
--- /dev/null
+++ b/backend/core/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/backend/core/urls.py b/backend/core/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..6096af1fd2d73da16ce8a4d46ab84961322db19d
--- /dev/null
+++ b/backend/core/urls.py
@@ -0,0 +1,9 @@
+# core/urls.py
+
+from django.urls import path
+from .views import HelloWorldView, UserProfileView
+
+urlpatterns = [
+    path('hello/', HelloWorldView.as_view(), name='hello_world'),
+    path('user/profile/', UserProfileView.as_view(), name='user-profile'),
+]
diff --git a/backend/core/views.py b/backend/core/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..24c61347db2615d604ba06d879320b8c618ebad7
--- /dev/null
+++ b/backend/core/views.py
@@ -0,0 +1,62 @@
+# core/views.py
+
+from rest_framework.views import APIView
+from rest_framework.response import Response
+from rest_framework import status
+from django.contrib.auth.models import User
+from rest_framework import permissions
+from rest_framework.views import APIView
+from rest_framework.response import Response
+
+class HelloWorldView(APIView):
+    def get(self, request, format=None):
+        return Response({"message": "Hello, World!"}, status=status.HTTP_200_OK)
+
+class UserProfileView(APIView):
+    permission_classes = [permissions.IsAuthenticated]
+
+    def get(self, request):
+        user = request.user
+        return Response({
+            'username': user.username,
+            'email': user.email,
+            # Add other fields you wish to include
+        })
+
+
+# core/views.py
+from django.http import JsonResponse
+import requests
+from django.conf import settings  # Import Django settings
+
+def have_i_been_pwned(request, email):
+    try:
+        # Update the URL to the correct endpoint of Have I Been Pwned API
+        api_url = f'https://haveibeenpwned.com/api/v3/breachedaccount/{email}'
+
+        # Include the API key in the request headers
+        headers = {
+            'hibp-api-key': settings.HIBP_API_KEY,
+            'user-agent': 'breach_check',  # Replace with your actual app name
+        }
+
+        # Make a request to the external API with headers
+        response = requests.get(api_url, headers=headers)
+
+        # Check if the request was successful (status code 200)
+        if response.status_code == 200:
+            # Parse the JSON response and log it
+            data = response.json()
+            print("Response from HIBP API:", data)
+
+            # Return the response to the frontend
+            return JsonResponse(data, safe=False)
+
+        # If the request was not successful, return an appropriate response
+        return JsonResponse({'error': 'Request to Have I Been Pwned API failed'}, status=response.status_code, safe=False)
+
+    except Exception as e:
+        # Handle other exceptions and return an error response
+        return JsonResponse({'error': str(e)}, status=500, safe=False)
+
+
diff --git a/backend/manage.py b/backend/manage.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5209dd236a14dab3af999ef62a18c7c1d4fa2f1
--- /dev/null
+++ b/backend/manage.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+    """Run administrative tasks."""
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "watchstone_backend.settings")
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
+    execute_from_command_line(sys.argv)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/backend/requirements.txt b/backend/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c8b177103be63220263ac01f39bab6a89a42645d
--- /dev/null
+++ b/backend/requirements.txt
@@ -0,0 +1,11 @@
+asgiref==3.7.2
+Django==4.2.9
+django-cors-headers==4.3.1
+djangorestframework==3.14.0
+djangorestframework-simplejwt==5.3.1
+PyJWT==2.8.0
+pytz==2023.3.post1
+sqlparse==0.4.4
+typing_extensions==4.9.0
+tzdata==2023.4
+requests==2.26.0
\ No newline at end of file
diff --git a/backend/watchstone_backend/__init__.py b/backend/watchstone_backend/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/backend/watchstone_backend/asgi.py b/backend/watchstone_backend/asgi.py
new file mode 100644
index 0000000000000000000000000000000000000000..ced39d0a94c8f5e1cffb0d5a1a1d9cb7485d4492
--- /dev/null
+++ b/backend/watchstone_backend/asgi.py
@@ -0,0 +1,16 @@
+"""
+ASGI config for watchstone_backend project.
+
+It exposes the ASGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/
+"""
+
+import os
+
+from django.core.asgi import get_asgi_application
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "watchstone_backend.settings")
+
+application = get_asgi_application()
diff --git a/backend/watchstone_backend/settings.py b/backend/watchstone_backend/settings.py
new file mode 100644
index 0000000000000000000000000000000000000000..c1a7b8efecb9cce4c95a077cc46215037aaa87f3
--- /dev/null
+++ b/backend/watchstone_backend/settings.py
@@ -0,0 +1,116 @@
+"""
+Django settings for watchstone_backend project.
+
+Generated by 'django-admin startproject' using Django 4.2.9.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.2/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/4.2/ref/settings/
+"""
+
+# watchstone_backend/settings.py
+from pathlib import Path
+
+BASE_DIR = Path(__file__).resolve().parent.parent
+
+SECRET_KEY = "django-insecure-@nx^7(bdlx!du(!9l066$z8ts-5xoqp9k5t1@iowvfrc=5(!t$"
+
+DEBUG = True
+
+ALLOWED_HOSTS = ["*"]  # Change this to the actual domain of your production server
+
+INSTALLED_APPS = [
+    "django.contrib.admin",
+    "django.contrib.auth",
+    "django.contrib.contenttypes",
+    "django.contrib.sessions",
+    "django.contrib.messages",
+    "django.contrib.staticfiles",
+    "core",
+    "rest_framework",
+    "rest_framework_simplejwt",
+    "corsheaders",
+]
+
+MIDDLEWARE = [
+    "django.middleware.security.SecurityMiddleware",
+    "django.contrib.sessions.middleware.SessionMiddleware",
+    "corsheaders.middleware.CorsMiddleware",
+    "django.middleware.common.CommonMiddleware",
+    "django.middleware.csrf.CsrfViewMiddleware",
+    "django.contrib.auth.middleware.AuthenticationMiddleware",
+    "django.contrib.messages.middleware.MessageMiddleware",
+    "django.middleware.clickjacking.XFrameOptionsMiddleware",
+]
+
+CORS_ALLOWED_ORIGINS = [
+    "http://localhost:3000",  # Adjust this to the origin of your React app
+    # Add other allowed origins as needed
+]
+
+ROOT_URLCONF = "watchstone_backend.urls"
+
+TEMPLATES = [
+    {
+        "BACKEND": "django.template.backends.django.DjangoTemplates",
+        "DIRS": [BASE_DIR / "templates"],
+        "APP_DIRS": True,
+        "OPTIONS": {
+            "context_processors": [
+                "django.template.context_processors.debug",
+                "django.template.context_processors.request",
+                "django.contrib.auth.context_processors.auth",
+                "django.contrib.messages.context_processors.messages",
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = "watchstone_backend.wsgi.application"
+
+DATABASES = {
+    "default": {
+        "ENGINE": "django.db.backends.sqlite3",
+        "NAME": BASE_DIR / "db.sqlite3",
+    }
+}
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
+    },
+    {
+        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
+    },
+    {
+        "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
+    },
+    {
+        "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
+    },
+]
+
+LANGUAGE_CODE = "en-us"
+
+TIME_ZONE = "UTC"
+
+USE_I18N = True
+
+USE_TZ = True
+
+STATIC_URL = "/static/"
+STATICFILES_DIRS = [BASE_DIR / "static"]
+
+DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
+
+REST_FRAMEWORK = {
+    "DEFAULT_AUTHENTICATION_CLASSES": (
+        "rest_framework_simplejwt.authentication.JWTAuthentication",
+    ),
+    "DEFAULT_PERMISSION_CLASSES": (
+        "rest_framework.permissions.IsAuthenticated",
+    ),
+}
+HIBP_API_KEY = 'e46c1ebebf5e4d1fbc37df08f8145bee'
\ No newline at end of file
diff --git a/backend/watchstone_backend/urls.py b/backend/watchstone_backend/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..22f15bd7b9dc9328ff10ea2ab546715f4fb2f601
--- /dev/null
+++ b/backend/watchstone_backend/urls.py
@@ -0,0 +1,14 @@
+# watchstone_backend/urls.py
+
+from django.contrib import admin
+from django.urls import include, path, re_path
+from core.views import have_i_been_pwned
+
+urlpatterns = [
+    path('admin/', admin.site.urls),
+    path('api/', include('core.urls')),  # Core app URLs
+    path('api/auth/', include('auth_app.urls')),
+    path('api/breaches/', include('breach_check.urls')),  # Include breaches app URLs
+    re_path(r'^haveibeenpwned/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,})/$', have_i_been_pwned),
+    # Add other URL patterns as needed
+]
diff --git a/backend/watchstone_backend/wsgi.py b/backend/watchstone_backend/wsgi.py
new file mode 100644
index 0000000000000000000000000000000000000000..ed336438ab8b62cd36f966ebda921f3b3bc5de4e
--- /dev/null
+++ b/backend/watchstone_backend/wsgi.py
@@ -0,0 +1,16 @@
+"""
+WSGI config for watchstone_backend project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "watchstone_backend.settings")
+
+application = get_wsgi_application()
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..8b48c697f1fbcadf24df7dc13fe3e15b44043d23
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,129 @@
+## Table of Contents
+1. [Getting Started](#getting-started)
+   - [Prerequisites](#prerequisites)
+   - [Cloning the Repository](#cloning-the-repository)
+   - [Setting up the Backend](#setting-up-the-backend)
+   - [Setting up the Frontend](#setting-up-the-frontend)
+   - [Accessing the Application](#accessing-the-application)
+2. [Setting up GitLab and Git in PyCharm](#setting-up-gitlab-and-git-in-pycharm)
+   - [Cloning the Repository in PyCharm](#cloning-the-repository-in-pycharm)
+   - [Setting Up Git](#setting-up-git)
+   - [Working with Git](#working-with-git)
+   - [Working with GitLab](#working-with-gitlab)
+
+## Getting Started
+
+These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
+
+### Prerequisites
+
+- Git
+- Python (with pip)
+- Node.js and npm
+- PyCharm (or your preferred IDE)
+
+### Cloning the Repository
+
+First, clone the repository to your local machine:
+
+```
+git clone https://gitlab.cci.drexel.edu/data-guardian/senior-project.git
+cd senior-project
+```
+
+### Setting up the Backend
+
+1. **Open the Backend in PyCharm**:
+   - Open PyCharm and select `Open`.
+   - Navigate to the `backend` directory within the cloned repository and open it.
+
+2. **Configure Python Interpreter**:
+   - In PyCharm, go to `File` > `Settings` > `Project: backend` > `Python Interpreter`.
+   - Create a new virtual environment or select an existing one.
+
+3. **Install Dependencies**:
+   - In PyCharm's terminal, run:
+     ```
+     pip install -r requirements.txt
+     ```
+
+4. **Run Migrations**:
+   - In the terminal, execute:
+     ```
+     python manage.py migrate
+     ```
+
+5. **Start the Django Development Server**:
+   - Run:
+     ```
+     python manage.py runserver
+     ```
+
+### Setting up the Frontend
+
+1. **Open the Frontend in PyCharm in a New Window**:
+   - Use `File` > `Open` in a new window and select the `frontend` directory.
+
+2. **Install Node Modules**:
+   - In the terminal within PyCharm, run:
+     ```
+     npm install
+     ```
+
+3. **Start the React Development Server**:
+   - Execute:
+     ```
+     npm start
+     ```
+
+### Accessing the Application
+
+- The backend API will be available at `http://localhost:8000`.
+- The frontend will be available at `http://localhost:3000`.
+
+
+## Built With
+
+- Django - The web framework used for the backend
+- React - The web framework used for the frontend
+
+## Setting up GitLab and Git in PyCharm
+
+To work with this project in PyCharm and synchronize it with the GitLab repository, follow these steps:
+
+### Cloning the Repository in PyCharm
+
+1. **Open PyCharm and Clone the Repository**:
+   - Go to `File` > `New` > `Project from Version Control`.
+   - In the URL field, enter `https://gitlab.cci.drexel.edu/data-guardian/senior-project.git`.
+   - Choose the directory where you want to clone the project and click `Clone`.
+
+### Setting Up Git
+
+1. **Check Git Configuration**:
+   - Go to `File` > `Settings` > `Version Control` > `Git`.
+   - Ensure Git is correctly installed and configured.
+
+### Working with Git
+
+1. **Commit Changes**:
+   - Make changes to your files in the PyCharm editor.
+   - Open the `Commit` tool window (Alt + 0).
+   - Review your changes, stage them, write a commit message, and commit.
+
+2. **Pull and Push Changes**:
+   - To pull changes from GitLab, go to `VCS` > `Git` > `Pull`.
+   - To push changes to GitLab, go to `VCS` > `Git` > `Push`.
+
+### Working with GitLab
+
+1. **Issue Tracking and Project Management**:
+   - Use GitLab's issue tracking and project management features to collaborate on tasks.
+   - Access these features through your project's GitLab page.
+
+2. **Merge Requests**:
+   - Create merge requests in GitLab to propose and review changes.
+   - Merge requests can be managed through the GitLab web interface.
+
+
+Remember to regularly pull changes from the remote repository to keep your local project up to date and to reduce merge conflicts.