diff --git a/.gitignore b/.gitignore
index 248fb04eaf7f4814f59b9dc160ee58616ab95ba7..26e723dac9fafa5405375198b313c8cbade10e44 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,7 +57,7 @@ coverage.xml
 local_settings.py
 
 # Flask stuff:
-instance/
+migrations/
 .webassets-cache
 
 # Scrapy stuff:
diff --git a/instance/__init__.py b/instance/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..9bad5790a5799b96f2e164d825c0b1f8ec0c2dfb
--- /dev/null
+++ b/instance/__init__.py
@@ -0,0 +1 @@
+# coding=utf-8
diff --git a/instance/config.py b/instance/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..0cd56422d97f04f11dc1b9079972ec53976e4804
--- /dev/null
+++ b/instance/config.py
@@ -0,0 +1,48 @@
+# coding=utf-8
+import os
+
+
+class Config(object):
+    """Parent configuration class."""
+    DEBUG = False
+    CSRF_ENABLED = True
+    TESTING = False
+    SECRET = os.getenv('SECRET')
+    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL')
+
+
+class DevelopmentConfig(Config):
+    """Configurations for Development."""
+    DEBUG = False
+    SQLALCHEMY_DATABASE_URI = 'postgresql://localhost/test_db'
+    SECRET = "ChangeThisStringIfYouWant"
+    TESTING = False
+
+
+class TestingConfig(Config):
+    """Configurations for Testing, with a separate test database."""
+    TESTING = True
+    SQLALCHEMY_DATABASE_URI = 'postgresql://localhost/test_db'
+    DEBUG = True
+    SECRET = 'ChangeMeMaybe'
+
+
+class StagingConfig(Config):
+    """Configurations for Staging."""
+    DEBUG = True
+
+
+class ProductionConfig(Config):
+    """Configurations for Production."""
+    DEBUG = False
+    TESTING = False
+    SQLALCHEMY_DATABASE_URI = 'postgresql://localhost/hodor_prod'
+    SECRET = "TODO: ChangeMeInProduction"
+
+
+app_config = {
+    'development': DevelopmentConfig,
+    'testing': TestingConfig,
+    'staging': StagingConfig,
+    'production': ProductionConfig,
+}
\ No newline at end of file