Here's the gist: /src/ : website content /bin/ : programs and such for generating the website from /src/ /out/ : where the generated output goes Makefile : invoke /bin/ as appropriate git-setup : set up git hooks (see below) The web server should serve the union of /src/ and /out/. On `master`, /out/ is ignored. But `git-setup` will set up a git post-commit hook to generate /out/, and commit it to the `pre-generated` branch.