The system should have the following characteristics:
Statically generate the site, so that no server-side dynamic content needs to be generated upon request.
Allow content to be queued for publication, possibly using
and helper scripts. The software, not the editors, should manage as
much of the content publication work flow.
Every piece of content should have a "type," (e.g. "quote," "transcript," "link," "image") and this type should be reflected both the way it's presented (i.e. templates) and in the logic that controls the sorting of the items in the publication queue.
Written in CommonLisp: the required tools exist, the language is quite fast particularly with the (likely) unique data types that this project will entail, a popular static site compiler that does something powerful might be good for CL, and I want to.
On build, only that content which has changed will need to be generated: the specific page for the new post, the archive of all past posts, and the displays of the most recent posts.
There are three publication flow directories:
drafts: all content that is not in the publication queue. Notes, unfinished posts of any kind, pending posts, etc. The system should ignore these posts.
queue: this directory contains all posts which are ready for publication but have not been published.
Each post defines for itself (either by file naming convention) or by some sort of YAML-like header: its post type, some sort of "post slug" to be used in the URL, and in the file the content of the post.
There are three non-publication flow directories:
templates: lisp files which provide templates with which the system generates the site.
static: pages here use templates and require some generation by the manager, but are not part of the content workflow. Pages located underneath this hierarchy are either generated and copied in place (which appropriate modification to the web server configuration to re-write URLs) or the hierarchy below this directory is merged into the root of the publication directory.