").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/circle.yml b/circle.yml
new file mode 100755
index 0000000..bed58c3
--- /dev/null
+++ b/circle.yml
@@ -0,0 +1,9 @@
+machine:
+ ruby:
+ version: 2.3.1
+dependencies:
+ pre:
+ - script/setup
+test:
+ override:
+ - script/cibuild
diff --git a/index.html b/index.html
new file mode 100755
index 0000000..9bc31e6
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+---
+layout: presentation
+---
+
+{% for post in site.posts reversed %}
+ {% include slide.html %}
+
+{% endfor %}
+{% unless site.simple-slideshow %}
+{% if site.overview %}
+
+{% endif %}
+{% endunless %}
diff --git a/reveal.js b/reveal.js
new file mode 160000
index 0000000..a349ff4
--- /dev/null
+++ b/reveal.js
@@ -0,0 +1 @@
+Subproject commit a349ff43c58c23f9c837b8ea9b5fc7d4761b8de3
diff --git a/script/cibuild b/script/cibuild
new file mode 100755
index 0000000..c73ec01
--- /dev/null
+++ b/script/cibuild
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+set -e
+
+bundle exec jekyll build --baseurl "."
+htmlproofer _site/index.html --empty-alt-ignore
diff --git a/script/server b/script/server
new file mode 100755
index 0000000..70f5fb6
--- /dev/null
+++ b/script/server
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+set -e
+
+bundle exec jekyll serve "$@"
diff --git a/script/setup b/script/setup
new file mode 100755
index 0000000..4124e9a
--- /dev/null
+++ b/script/setup
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+set -e
+
+cd "$(dirname "$0")/.."
+
+if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ]; then
+ brew bundle check >/dev/null 2>&1 || {
+ echo "==> Installing Homebrew dependencies…"
+ brew bundle
+ }
+fi
+
+if [ -f ".ruby-version" ] && [ -z "$(rbenv version-name 2>/dev/null)" ]; then
+ echo "==> Installing Ruby…"
+ rbenv install --skip-existing
+ which bundle >/dev/null 2>&1 || {
+ gem install bundler
+ rbenv rehash
+ }
+fi
+
+if [ -f "Gemfile" ]; then
+ echo "==> Installing gem dependencies…"
+ bundle install --no-cache --quiet --without production
+fi
+
+git submodule update --init
+
+echo "==> App is now ready to go!"
diff --git a/script/stage b/script/stage
new file mode 100755
index 0000000..73b322f
--- /dev/null
+++ b/script/stage
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+red=$'\e[1;31m'
+grn=$'\e[1;32m'
+end=$'\e[0m'
+
+account='training-staging'
+
+if [ "$1" = "" ]
+then
+ repo="caption-this"
+else
+ repo=$1
+fi
+
+# Build the site
+#
+# Generate the Jekyll site with an alterate baseurl for the intenral-only
+# staging site, but don't start a local server.
+printf "\n${grn}# Building site...\n--------------------------------------------------${end}\n"
+DISABLE_WHITELIST=1 bundle exec jekyll build --baseurl "/${account}/${repo}"
+
+# Create a temp Git repo to push from
+#
+# 1. From the compiled Jekyll `_site` directory
+# 2. Initialize a new repo within that directory
+# 3. Add a new remote called staging that we can push to
+# 4. Add all our files
+# 5. Write a generic commit message
+printf "\n${grn}# Creating a temp Git repo...\n--------------------------------------------------${end}\n"
+cd _site && git init && git remote add staging https://ghe.io/${account}/${repo}.git && git add . && git commit -m "Staging latest changes"
+
+# Push the site
+#
+# Push the new `_site` temporary repo to our remote staging repo, then remove
+# the remote again to do it all over again afterwards.
+printf "\n${grn}# Publishing...\n--------------------------------------------------${end}\n"
+git push staging master:gh-pages --force && git remote rm staging
+
+# Celebrate and open the staging site
+printf "\n${grn}# Success!${end}\n"
+open https://pages.ghe.io/${account}/${repo}/