Architecture

clckwrks web applications consist of five main pieces.

clcwrks

The clckwrks package is the core around which everything is built. It provides the code for user accounts, creating pages or blog posts, and other core features. Most importantly, it contains hooks so that clckwrks can be extended through plugins.

clckwrks-theme-foo

Each web application will depend on one clckwrks-theme-<name> package. This package provides all the HTML and CSS for the user facing portions of the site. Themes must conform to a standard API. This allows users to switch their site from one theme to another by simply rebuilding against a different theme package. (This is already working).

Eventually, users will be able to browse an online theme gallery and install themes with a single mouse-click.

clckwrks-plugin-*

The core clckwrks package is intentionally lightweight. Most of the power in clckwrks based sites comes through extending the core via plugins. Like themes, plugins also must conform to a specific API which specifies how they get initialized, how they add extensions to the page markup, how they add menu entries, etc. However, there are very few restrictions on what plugins can do.

Like themes, users will eventually be able to install plugins with a single click. Right now, there is a bit of glue code needed to add new plugins to a site. One of the top priorities right now is cleaning up the API for installing and initializing plugins.

We currently offer two plugins:

  • clckwrks-plugin-media - a simple jpg image gallery
  • clckwrks-plugin-ircbot - an ircbot (primarily used for logging irc channels at the moment)

We plan to offer a range of additional plugins in the near future however, ranging from bug tracking to payment processing.

clkcwrks-cli

clckwrks-cli is a command-line application which interacts with clckwrks applications to perform some administrative tasks. Currently the only task it performs is to give UserId 1 Administrator access.

In the future it will likely contain debugging facilities, commands to perform backups, etc.

foo-dot-com

foo-dot-com is the package that ties everything together and builds the server. For example, clcwrks-dot-com or happstack-dot-com. For a site that only uses off-the-shelf themes and plugins, this package is entirely boilerplate, and will eventually be generated automatically.

Custom sites might have quite a bit of code in the foo-dot-com package. Alternatively, much of the customization might be provided through a plugin package.