Since I'm ambitiously learning Lisp, I've sort of turned my little blog project into a build-a-framework project. So I've broken it up into a package to handle the CGI bits, breaking the GET and POST data up into hash tables, decoding URLs and so on, a package for very simple templating, and the blog stuff itself. Which almost works.
Checking out the competition is never a bad idea, not that I expect to take this anywhere. There's UnCommon Web, which has a sparse website. There's Seaside, which is written inScheme, a cousin of Common LISP, by some guys in Vancouver.
There are a couple of interesting things about these systems. The one I'm interested in is the ideal of continuations, or modal development. I'm not sure exactly what this entails yet, but I think the basic idea is that instead of having to write a handler for each different kind of page, the application treats page views like function calls. Anyway, it's a different idea that is worth exploring. Note that this is targeted at enterprise applications where there is a complex business process to be modeled, and not so much at simpler, publicly available forums and stuff.
Another interesting idea I read about with respect to Seaside is that it doesn't have a native templating engine. Ever since I had to deal with the ugliness that is ASP, I've been enamored with templating languages like Velocity. Velocity is a simple language, just enough for a designer to use. I like the fact that it is deliberately restrictive; if you are putting code in your templates, something is wrong with your design. Or course, some people want you to be able to put as much code as you want in your templates.
Anyway, the point is that since web designers mostly do everything with CSS now, you can pretty much throw away the templating engine and generate the html in code and as long as the designers and coders have agreed upon a defined set of CSS classes, there won't be a huge problem. That's ok, but I still like the separation of concerns that templating engines give, since I don't think generating boilerplate HTML in code is very clean or nice.
In this vein, my little LISP templating engine takes a template and simply replaces the $keys by looking up 'KEY in a hash table and evaluating the corresponding LISP form it finds there. So that could be text or a number, or it could be a function that knows how to do stuff, like load a blog entry and print it out all pretty.
My first attempt at this templating engine is pretty ugly... Lisp makes it easy to write interpreters for other languages (you can write a Lisp interpreter in Lisp), but I haven't really learned how to do this yet. But it already converts a template to a Lisp form that takes a stream (like standard output) and a hash table and writes out the result. I can even (compile x) the result to machine code. So that's pretty cool.