diff --git a/models/database.py b/models/database.py
new file mode 100644
index 0000000000000000000000000000000000000000..7f8a886f10612109ba6b0d0d4c5eaabffc2cd6a0
--- /dev/null
+++ b/models/database.py
@@ -0,0 +1,20 @@
+form flask.ext.login import UserMixin
+
+from shared import db
+
+class User(db.Model, UserMixin):
+    __tablename__ = "users"
+    id = db.Column(db.Integer, primary_key=True)
+    fullname = db.Column(db.String)
+    username = db.Column(db.String, unique=True)
+    password = db.Column(db.String)
+    roles = db.Column(db.PickleType)
+    
+    def __init__(self, fullname, username, password, roles=None):
+        self.fullname = fullname
+        self.username = username
+        self.password = password
+        self.roles = roles
+    
+    def __repr__(self):
+        return "<User(id={}, fullname='{}', username='{}', password'{}', roles'{})>".format(self.id, self.fullname, self.username, self.password, self.roles)
diff --git a/models/forms.py b/models/forms.py
new file mode 100644
index 0000000000000000000000000000000000000000..9ae1b0a32e4cb5822fd8f46f4f77e868ea2d1025
--- /dev/null
+++ b/models/forms.py
@@ -0,0 +1,22 @@
+from flask.ext.wtf import form
+from wtforms import StringField, PasswordField, BooleanField, SelectMultipleField, SelectField, DateField, IntegerField, TextAreaField
+from wtforms.validators import InputRequired, Length, EqualTo, Email, Optional, Length, NumberRange, AnyOf
+from models.database import User
+
+import shared
+
+
+class LoginForm(Form):
+    username = StringField("Username", validators=[InputRequired("Entering your username is required.")])
+    password = PasswordField("Password", validators=[InputRequired("Entering your password is required.")])
+
+class NewUserForm(Form):
+    fullname = StringField("Full name", validators=[InputRequired("Entering your name is required.")])
+    username = StringField("Username", validators=[InputRequired("Entering your username is required.")])
+    password = PasswordField("Password", validators=[InputRequired("Entering your password is required.")])
+    confirm = PasswordField("Repeat Password", validators=[InputRequired("Entering your password is required."), EqualTo("password", message="Your passwords must match.")])
+
+class AdminUserForm(Form):
+    fullname = StringField("Full name", validators=[InputRequired("Entering the name is required.")])
+    username = StringField("Username", validators=[InputRequired("Entering the username is required.")])
+    roles = SelectMultipleField("User roles", choices=[(x.lower().strip(), x) for x in shared.roles])
diff --git a/server.py b/server.py
old mode 100644
new mode 100755
diff --git a/static/css/style.css b/static/css/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..63e56825b3ab0a6b94f28161a7152410f5e3086f
--- /dev/null
+++ b/static/css/style.css
@@ -0,0 +1,16 @@
+
+.flash-card.mdl-card {
+    
+}
+
+.flash-card.mdl-card.alert-success {
+    background-color: lightgreen;
+}
+
+.flash-card.mdl-card.alert-warning {
+    background-color: orange;
+}
+
+.flash-card.mdl-card.alert-error {
+    background-color: red;
+}