diff --git a/web/index.php b/web/index.php
index cf2ac328..6e6c2bd4 100644
--- a/web/index.php
+++ b/web/index.php
@@ -49,17 +49,15 @@ $smarty->assign("page_class", "software org-mode");
$smarty->assign("page_hgroup", "
FreeJ
");
$smarty->assign("page_title", "free vision mixer");
-$smarty->display("header.tpl");
+$smarty->display("_header.tpl");
-// floating sidebar
-echo("\n");
+showfile("index-toc.html");
// page content
-showfile("./body.html");
+showfile("index-body.html");
-$smarty->display("footer.tpl");
+$smarty->display("_footer.tpl");
?>
diff --git a/web/makefile b/web/makefile
new file mode 100644
index 00000000..df30aeaf
--- /dev/null
+++ b/web/makefile
@@ -0,0 +1,34 @@
+
+EMACS = emacs
+INDEX = index.org
+ifndef $(SCRIPTS)
+ SCRIPTS = .
+endif
+
+all: ascii html pdf apache.conf
+
+apache.conf:
+ ./generate.sh
+
+index.html: index.org
+ $(EMACS) -q -batch -l $(SCRIPTS)/batch.el \
+ --visit $(INDEX) -f org-export-as-html
+
+index.txt: index.org
+ $(EMACS) -q -batch -l $(SCRIPTS)/batch.el \
+ --visit $(INDEX) -f org-export-as-ascii
+
+index.pdf: index.org
+ $(EMACS) -q -batch -l $(SCRIPTS)/batch.el \
+ --visit $(INDEX) -f org-export-as-pdf
+
+ascii: index.txt
+
+html: index.html
+ $(SCRIPTS)/collate.sh
+
+pdf: index.pdf
+
+clean:
+ rm -rf *~ *.pdf *.tex *.html *.xml *.txt apache.conf templates_c cache
+
diff --git a/web/templates/footer.tpl b/web/templates/_footer.tpl
similarity index 100%
rename from web/templates/footer.tpl
rename to web/templates/_footer.tpl
diff --git a/web/templates/header.tpl b/web/templates/_header.tpl
similarity index 100%
rename from web/templates/header.tpl
rename to web/templates/_header.tpl