diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1a5203d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/.venv/
+/__pycache__/
+*.pyc
diff --git a/README.md b/README.md
index e69de29..33acea6 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,18 @@
+# varia-library-website
+
+> Work In Progress
+
+## Hacking
+
+```
+$ python3 -m venv .venv && source .venv/bin/activate
+$ FLASK_APP=library
+```
+
+Or run `make setup`.
+
+```
+$ FLASK_APP=library.page flask run
+```
+
+Or run `make`.
diff --git a/library/csvparser/__init__.py b/library/csvparser/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/library/csvparser/__pycache__/csvparser.cpython-39.pyc b/library/csvparser/__pycache__/csvparser.cpython-39.pyc
deleted file mode 100644
index b2c4c02..0000000
Binary files a/library/csvparser/__pycache__/csvparser.cpython-39.pyc and /dev/null differ
diff --git a/library/page.py b/library/page.py
index dd09dfd..fc1baca 100644
--- a/library/page.py
+++ b/library/page.py
@@ -4,7 +4,7 @@
 import flask
 from flask import render_template
 
-from csvparser.csvparser import getpublications
+from library.csvparser.csvparser import getpublications
 
 APP = flask.Flask(__name__, static_folder="static")
 
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..1957aff
--- /dev/null
+++ b/makefile
@@ -0,0 +1,10 @@
+default: run
+
+setup:
+	@python3 -m venv .venv && \
+	.venv/bin/pip install -r requirements.txt
+
+run:
+	@FLASK_APP=library.page .venv/bin/flask run
+
+.PHONY: setup run
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..7e10602
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1 @@
+flask