I work on the static content of the site using Emacs Muse. My muse configuration is pretty long and available in my site-emacs repository. The site itself exists in a darcs repository which is a fork of the source repository I edit locally—the source repository contains muse/image files while the site repository contains html updates as a separate series of patches.
This provides a very nice editing environment and makes publishing fairly easy—I push edits from my laptop to my workstation and then off to HCoop with the html updates. Almost no effort is spent dealing with some dumb web interface or other pointless things making it much easier for me to just write things and toss them up onto the web.
There are a few scripts and templates in the darcsweb::site-support repository that I use to update the site. darcsweb::site-support/update.sh automates the process of sending patches off to the server via afs.
Book List is autogenerated by darcsweb::site-support/books.lisp which reads a template and a small sexp database of book entries and spits out a muse file which is not kept under VC. This works well for me currently, but I intend to eventually upgrade this simple system to an Elephant object database with a CLIM frontend for editing entries. I'll probably end up writing a minimal database manager for the sexp based system first.
The site rss feed is generated by darcsweb::site-support/rss.lisp. It
fetches the darcs xml changelog for interesting files and then spits
out a tolerable feed with automagically generated links from *.muse
to
*.html
. A dumped binary is run from a darcs hook on the main
repository that handily updates the feed whenever I commit.
apply posthook update-site-rss
apply run-posthook
Boring old Apache is used to serve up the generated feed. The feed stays updated when I update, and Apache deals with properly letting readers know when the file last changed and whatnot.
All of the scripts used to generate the site are in the public domain unless otherwise mentioned in the files themselves. To use them anywhere else would require modification, but a few chunks of code could be generally useful for other things.