I have been writing a Web app using Weblocks, and I have been very pleasantly surprised at the breadth and depth of the libraries available for the purpose. I would go so far as to say that the Common Lisp library problem has been solved, at least as far as writing Web apps is concerned. Here are the highlights of the packages on which my app directly or indirectly depends:<p><pre><code> CLSQL: database interface (I'm using PostgreSQL)
Weblocks: widget-oriented app framework with AJAX
Hunchentoot: web server
CL+SSL: SSL foreign interface layer
Babel: charset conversion
PURI: Portable URI library
CL-JSON
CL-WHO: HTML generation
CL-PPCRE: regular expressions
CL-OAUTH: OAuth implementation
Drakma: HTTP client
CL-SMTP: programmatically send email
Monkeylib-bcrypt: bcrypt foreign function interface
</code></pre>
And almost all of these (and many more I haven't listed) are easily downloaded and installed with Quicklisp.
I've been hacking together a site using Hunchentoot, Postmodern + PostgreSQL, CL-WHO for HTML generation, and CL-JSON + Backbone.js for client interaction. I'm probably duplicating a lot of functionality that would already be done with Rails or Django but I'm having a lot of fun doing it this way :)
Allow me to flog WuWei, <a href="http://wuwei.name" rel="nofollow">http://wuwei.name</a>, a toolkit for doing Ajax web UIs in Common Lisp, now in production use on <a href="http://biocyc.org" rel="nofollow">http://biocyc.org</a> .
Great article! The only thing I'd do differently is just serve up the js as a static file instead of using code transformation. That seems likely to break for non-trivial amounts of js.