diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f953ee2a7b15928172055471268311158feefad5
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,13 @@
+language: bash
+
+sudo: true
+
+before_install:
+  - sudo apt-get -qq update
+  - sudo apt-get install lua5.1 luarocks
+  
+install:
+  - sudo luarocks install lua-cjson
+
+script:
+  - bash tests/validate_site.sh
diff --git a/tests/site_config.lua b/tests/site_config.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d7bdc1f6ab4db5e86f0a86038388827d774f1e25
--- /dev/null
+++ b/tests/site_config.lua
@@ -0,0 +1,9 @@
+local config = os.getenv('GLUON_SITEDIR')
+
+local function loader()
+   coroutine.yield('return ')
+   coroutine.yield(io.open(config .. '/site.conf'):read('*a'))
+end
+
+-- setfenv doesn't work with Lua 5.2 anymore, but we're using 5.1
+return setfenv(assert(load(coroutine.wrap(loader), 'site.conf')), {})()
diff --git a/tests/validate_site.sh b/tests/validate_site.sh
new file mode 100644
index 0000000000000000000000000000000000000000..34a4a3fa5cb94040b06d8afd2bb426ac881b48c6
--- /dev/null
+++ b/tests/validate_site.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# validate_site.sh checks if the site.conf is valid json
+
+GLUON_SITEDIR="." lua5.1 tests/site_config.lua
+