diff --git a/database.db b/database.db
new file mode 100644
index 0000000000000000000000000000000000000000..d64d2deacb19a21923fe2e73e565fe9c410ddf5d
Binary files /dev/null and b/database.db differ
diff --git a/database.py b/database.py
new file mode 100644
index 0000000000000000000000000000000000000000..156ef956bc3c1291c3afad7a97588bc118f9efb3
--- /dev/null
+++ b/database.py
@@ -0,0 +1,100 @@
+import os
+import sqlite3
+from typing import List
+
+DATABASE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "database.db")
+
+class Connection:
+	def __init__(self):
+		self.connection = sqlite3.connect(DATABASE)
+		self.cursor = self.connection.cursor()
+		self.do_rollback = False
+
+	def commit(self):
+		self.connection.commit()
+		self.do_rollback = False
+
+	def execute(self, sql: str, tuple = ()):
+		self.do_rollback = True
+		self.cursor.execute(sql, tuple)
+
+	def fetch_all(self):
+		return self.cursor.fetchall()
+
+	def close(self):
+		if self.do_rollback:
+			self.connection.rollback()
+
+		self.connection.close()
+
+	def __enter__(self):
+		return self
+
+	def __exit__(self, *args):
+		self.close()
+
+with Connection() as conn:
+	conn.execute('''CREATE TABLE IF NOT EXISTS Workspaces (
+		id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
+		name text NOT NULL,
+		address text NOT NULL,
+		main_photo text NOT NULL,
+		description text NOT NULL,
+		website text NOT NULL,
+		email text NOT NULL,
+		phone_number text NOT NULL,
+		opening_hours text,
+		checkin_instructions text)''')
+	conn.execute('''CREATE TABLE IF NOT EXISTS AdditionalPhotos (
+		id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
+		url text NOT NULL,
+		workspace_id integer NOT NULL,
+		FOREIGN KEY (workspace_id) REFERENCES Workspaces(id))''')
+	conn.commit()
+
+class Workspace:
+	def __init__(self, name: str,
+		address: str, main_photo: str, additional_photos: List[str], description: str,
+		website: str, email: str, phone_number: str, opening_hours: str, checkin_instructions: str):
+		self.id = None
+		self.name = name
+		self.address = address
+		self.main_photo = main_photo
+		self.additional_photos = additional_photos
+		self.description = description
+		self.website = website
+		self.email = email
+		self.phone_number = phone_number
+		self.opening_hours = opening_hours
+		self.checkin_instructions = checkin_instructions
+
+	def from_query(conn, tuple):
+		(id, name, address, main_photo, description, website, email, phone_number, opening_hours, checkin_instructions) = tuple
+		additional_photos = []
+
+		conn.execute("SELECT url FROM AdditionalPhotos WHERE workspace_id = ?", (str(id)))
+		for x in conn.cursor.fetchall():
+			additional_photos.append(x[0])
+
+		workspace = Workspace(name, address, main_photo, additional_photos, description, website, email, phone_number, opening_hours, checkin_instructions)
+		workspace.id = id
+		return workspace
+
+def add_workspace(workspace: Workspace):
+	with Connection() as conn:
+		conn.execute(
+			"INSERT INTO Workspaces (name, address, main_photo, description, website, email, phone_number, opening_hours, checkin_instructions) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
+			(workspace.name, workspace.address, workspace.main_photo, workspace.description, workspace.website, workspace.email, workspace.phone_number, workspace.opening_hours, workspace.checkin_instructions)
+		)
+		id = conn.cursor.lastrowid
+		for url in workspace.additional_photos:
+			conn.execute("INSERT INTO AdditionalPhotos (url, workspace_id) VALUES (?, ?)", (url, id))
+		conn.commit()
+		return id
+
+def get_workspaces():
+	with Connection() as conn:
+		conn.execute("SELECT * FROM Workspaces")
+		return [Workspace.from_query(conn, x) for x in conn.cursor.fetchall()]
+
+print(get_workspaces())
diff --git a/login.html b/login.html
new file mode 100644
index 0000000000000000000000000000000000000000..439e7d014cab39624b6a9171219258b7a8e94828
--- /dev/null
+++ b/login.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+	<link rel="stylesheet" href="static/style.css">
+
+	<!-- Bootstrap CSS -->
+	<link rel="stylesheet" href=
+"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
+		integrity=
+"sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
+		crossorigin="anonymous">
+
+	<title>{% block title %}{% endblock %} - Tramshed Workspaces</title>
+</head>
+<form class='myForm'  method="POST" action="">
+ <p>Enter Username: </p>
+ <br>
+<input type = "text" name = "username" placeholder="Username.." ><br>
+<button type = "submit" id='mySubmit'> Submit </button>
+</form>
+<!-- <div class="parallax">
+<body class="body">
+  	<!--<img src="static/Tramshed_Logo.jpg" alt="Logo" height="50" width="100">-->
+<!-- navigation --> -->
+	<nav>
+<ul>
+  <li><a href="#home">Home</a></li>
+  <li><a href="#Map">Map</a></li>
+  <li><a href="#contactUs">Contact Us</a></li>
+  <li style="float:right"><a class="active" href="#about">About</a></li>
+</ul>
+	</nav>
+<!--{% block mainBlock %}{% endblock %}-->
+	</body>
+</html>
diff --git a/main.py b/main.py
new file mode 100644
index 0000000000000000000000000000000000000000..e3e3e93d0130445b4a350d5898444b52af9ac7c0
--- /dev/null
+++ b/main.py
@@ -0,0 +1,22 @@
+from flask import Flask, request, render_template
+import database
+
+app = Flask(__name__)
+
+@app.route("/", methods = ["GET"])
+def home():
+	if request.method == "GET":
+		workspaces = database.get_workspaces()
+		return render_template("home.html", workspaces = workspaces)
+
+@app.route('/login.html', methods = ["post"])
+def login():
+	username = request.form.get('username')
+	if username == "admin":
+		return redirect("/templates/home.html")
+	else:
+		message = "Wrong Username"
+		return redirect("/login.html")
+
+if __name__ == "__main__":
+	app.run(debug = True)