Quick Links

Downoad the the latest build and watch the Installation/Introduction Screencast to get started.

Credits

ContentCourier is hosted at Google Code, and is a project of alanstorm.com.

PHP Markdown and PHP Smarty come from Michael Fortin, but John Gruber is ultimately to blame.

The Summer Holiday and Grass Stain themes come from the CSS Tinderbox.

Summer Holiday is distributed under a Creative Commons license, while Grass Stains is distributed under more vague terms, but still free.

Introduction to Content Courier

There are two applications at the core of any Content Management System. The first, and most obvious, is the administrative application, where you import and organize your words, images, and multimedia. The second, less obvious, is the application that actually serves your web page to the world. Modern CMS systems shine when it comes to the first application. They provide a flexible, efficient system for managing content. The content serving application is another story.

Almost all systems enforce a philosophy on what a web site or web page is. What the markup should look like, what sections a page has, how navigation should flow, etc. Operating outside this philosophy is a recipe for pain; to create a custom experience web developers are forced to jump through hoops and/or abuse a system’s template/theme/plug-in engine. More often we just grudgingly accept whatever vision our system has forced on us and grumble about deadlines.

ContentCourier is a modest attempt to provide a flexible programmatic framework for delivering web sites. A Content Delivery System rather than an entire Content Management System.

Primary design goals included

  1. Use modern, object oriented PHP
  2. Don’t require the end-user to completely understand OOP concepts
  3. Allow pages to maintain design continuity over the life of a site
  4. Require mod_rewrite to discourage query-string based web sites, but don’t outlaw query strings
  5. Build a framework for delivering web sites, not web applications
  6. Page URIs should be their own distinct entities, not tied to the host file system
  7. Provide a method for content to be pulled from multiple systems within a single site
  8. Provide a mechanism to perform transformations on content prior to delivery
  9. Allow end-user to easily implement their own caching mechanism
  10. Stay neutral in the HTML/XHTML/HTML5 wars

The source files included in this project are two things. The first is the base ContentCourier system, which will allow you to build and deploy your own web site. The second is a simple deployment that uses the host file system as a content store. Just drop the source into a public apache folder (with both mod_rewrite and AllowOverride/.htaccess) and browse the site for full documentation.

Goals for a 1.0 include

  1. Fixing any bugs and/or major functionality holes found after the initial .9 release
  2. Providing a generic deployment for an Atom content store
  3. A possible re-factor to allow easier assignment of custom options
  4. Test cases to codify expected behavior (no TDD, shame on me)

Questions, comments, suggestions, and critiques are welcome. Hate mail only makes me glad I’m not as miserable as you.