diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..40ac3c50853c2807fb4bb866ab7bbac7591bc8e6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,27 @@
+# ignore everything not whitelisted
+*
+
+# whitelist dot files
+!.gitignore
+!.gitlab-ci.yml
+
+# whitelist helper scripts
+!build.sh
+!eng_unimelb_setup
+!get_coverage.sh
+!Makefile
+!README.md
+!run_fuzzer.sh
+!run_tests.sh
+
+#whitelist folders
+!fuzzer/
+!poc/
+!src/
+
+# ignore all compiled Java files in the whitelisted folders
+**/*.class
+
+# ignore all compiled C files in the whitelisted folders
+**/*.o
+**/*.a
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 66916481c4c39584a914ba99a63a44dac275357c..5fe08ffb36e70d9f6fa8075464e426a387978947 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,6 @@
 stages:
     - check_elig
+    - compile
     - validate_tests
     - validate_progs
     - submit
@@ -11,7 +12,17 @@ check_submitter_eligibility:
     tags:
         - "swen90006-tourney"
     script:
-        - python3 ~/swen_tourney/frontend.py check_eligibility $(realpath $(pwd))
+        - python3.8 ~/swen_tourney/frontend.py check_eligibility ${CI_PROJECT_NAMESPACE} ${CI_PROJECT_NAME} ${CI_PROJECT_DIR}
+    allow_failure: false
+
+compile:
+    stage: compile
+    only:
+        - master
+    tags:
+        - "swen90006-tourney"
+    script:
+        - python3.8 ~/swen_tourney/frontend.py compile ${CI_PROJECT_NAMESPACE}
     allow_failure: false
 
 validate_tests:
@@ -21,7 +32,7 @@ validate_tests:
     tags:
         - "swen90006-tourney"
     script:
-        - python3 ~/swen_tourney/frontend.py validate_tests $(realpath $(pwd))
+        - python3.8 ~/swen_tourney/frontend.py validate_tests ${CI_PROJECT_NAMESPACE}
     allow_failure: false
 
 validate_progs:
@@ -31,7 +42,7 @@ validate_progs:
     tags:
         - "swen90006-tourney"
     script:
-        - python3 ~/swen_tourney/frontend.py validate_progs $(realpath $(pwd))
+        - python3.8 ~/swen_tourney/frontend.py validate_progs ${CI_PROJECT_NAMESPACE}
     allow_failure: false
 
 submit:
@@ -41,5 +52,5 @@ submit:
     tags:
         - "swen90006-tourney"
     script:
-        - python3 ~/swen_tourney/frontend.py submit $(realpath $(pwd))
+        - python3.8 ~/swen_tourney/frontend.py submit ${CI_PROJECT_NAMESPACE}
     allow_failure: false
diff --git a/README.md b/README.md
index db8a2f4ce778bad4a9c24e4af63eceb89187b327..b8b828af579c07e4a9b8a2e43172232734d2defc 100644
--- a/README.md
+++ b/README.md
@@ -9,12 +9,15 @@ Structure of this repository:
 * src/vuln-1 -- src/vuln-5 - where your vulnerable versions will live
 * poc/:        -  where your PoCs will live
 * fuzzer/:     -  where your fuzzer will live
+* bin/:        -  where your compiled programs will live
+* tests/:      -  where your generated tests will live
 
 Pre-Included Scripts:
 
 * Makefile         - makefile for building the C implementation etc.
 * get_coverage.sh  - script to generate coverage reports
 * run_fuzzer.sh    - script for running your fuzzer to generate inputs 
+* run_tests.sh     - script for running your generated tests against compiled programs 
 
 Vulnerable Versions (you should put your security vulnerabilities in here):
 
diff --git a/bin/.gitignore b/bin/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..dc3f8e39b3f8b4cb5e2df68062d5fff582451cc5
--- /dev/null
+++ b/bin/.gitignore
@@ -0,0 +1,4 @@
+# Ignore all files in this folder other than .gitignore
+# We don't want compiled objects in our git history
+*
+!.gitignore
diff --git a/tests/.gitignore b/tests/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..40bcc307e10230c07c39212a56e37ca509591c15
--- /dev/null
+++ b/tests/.gitignore
@@ -0,0 +1,4 @@
+# Ignore all files in this folder other than .gitignore
+# We don't want generated tests in our git history
+*
+!.gitignore