The data is stored externally in Postgres, however, and accessed through Zope's SQL methods. Inserts are done with stored functions. Selects, however, are not, as Postgres does not yet properly support returning result sets from stored procedures. The database uses a nested set tree for the thread hierarchies.
The actual forum functionality consists of a folder of SQL methods, a folder of GET actions, and a folder of renderable objects: board, forum, content, and user. Each of those folders has a 'show' method. Currently I am adding 'new', 'edit', 'history', and other methods to them. Methods can also be folders, as in the case of say the 'new' method on the content folder which contains a form object and a number of initialization and helper methods.
The only real "custom" bit of code (other than the objects and form helper methods) is the functional-style HTML parsing module I built back when Ben and I were discussing it.
All told I've spent maybe 30 hours on the thing. Zope is a good prototyping tool, but it has a number of annoying traits that get in the way of really understanding what is going on. Namely, "acquisition", which is merely a euphemism for "make sure everything is globally accessible", and it's a pain in the ass. :-)
Version 0.3 will see the release of the source code if you're that interested, although it's still fairly messy in many ways thanks to Zope's unique way of doing things.