Web Applications

A bit of an overview on the personal web development projects I have on the go...


This project is yet to get a fancy name, but it doesn't make it any less useful. In short, this is a compact Content Management System, developed in PHP. I use this to manage and render data for both this, my personal website, and Lost Horizons.

The design revolves around the use of a XML repository for the storage of content, and custom XSLT stylesheets for rendering content to HTML pages. The PHP application ties the XML and XSL transforms together, as well supports site templating.

Unlike many PHP applications I've seen, this has been designed to run multiple sites from a single installation, supporting per site configuration customizations on top of the global application configuration framework.

The key design principles behind this code base was a system to abstract website content from presentation, implement a customizable front controller and templating engine that applies site wide, and the ability to render data across a website in a consistent and easily maintainable way.

The end goal was a system that provided the ability to update and change an entire website design with very little manual work. I've redesigned both websites I run under this application at least once, and can happily report that this project certainly achieves that goal.

The Back Story...

This started out as a simple PHP interface for entering content into my website, which is stored in an XML repository.

Templating and rendering of the website initially done with some Perl code I'd developed that supported custom HTML elements (for server side includes, conditional processing and variable expansion). Over time I've ported all of that code into the PHP CMS project as an incorporated page builder component, which now is completely responsible for the rendering of websites in addition to managing the content within.


Photobox is my Flickr alternative. It's an PHP based online photo album application. Similar to my other web projects it's a PHP application that uses an XML repository for data storage and XSLT stylesheets for rendering HTML.

It supports on the fly resizing of images, server side image caching and rendering of EXIF data (using the third party PHP Metadata Toolkit library). It currently powers my online photo albums for 5000+ photos.

The Back Story...

Like most of my projects, this one had very humble beginnings - some very basic code to get photos from my first trip to Tempe, AZ online, with the least amount of work. All it did initially was pump of a list of static HTML pages for photos, so I wouldn't have to do it manually.

At the time, it became a bit of a pet project, and within a few months it became a full blown PHP application.

For what it's worth, I like Flickr and have an account I use. But refer above statement about my 5000+ photos in Photobox. Rather than go 'Pro', I wrote some code. [smile]


This is a PHP module / library for marking various bits of text to HTML.

The coolest feature of this library is it's plugin interface, which I implemented a few revisions in. This interface is used to expand on the tags the library supports in two ways. Plugins can be written to markup simple tags (like a YouTube video object, or a Picasa image). Other applications can also implement their own integrated markup plugins to support a range of custom tags, rendered to useful HTML.

So now, it's just one line of UBB to add a Photobox image to a blog entry, or a Hitter table into a Photobox album description. Though, why you'd want to do the latter remains to be seen, but you get the idea. [smile] And by the way, that smilie right there is thanks to mod_markup.

The Back Story...

This code effectively started out as a single class when first working on my CMS application. Actually, let's be honest, I think it may have been a collection of functions. It quickly became quite useful, so I modulized it and made it it's own code project. Since then I use it in nearly all of my PHP projects.


Another well named project. [wink]

Basically this is my own custom PHP application for running a blog. It shares many concepts with my more general CMS project (whose administration interface I use for entering content into my blog), but is a specialized project to do things that only blogs need to do.

Despite the design principles in common with the CMS project, and ability to tightly integrate the two, this code base is still self contained, and can run a blog on it's own as a standalone PHP application.

The Back Story...

There isn't one really. I wanted a blog - so I wrote a PHP blogging application.


Hitter is basically my own last.fm.

There are several components to this project
  • Winamp Generic plugin, that records plays from Winamp into a MYSQL database
  • iTunes Importer, a PHP script that imports iPod plays to the database
  • phphitter - the PHP frontend that compiles charts, generates playlists etc.
Hitter supports charts for tracks, albums and artists. The frontend can render charts for any period (from a single day, to multiple years) on any given date and supports multiple users.

In recent years I've incorporated Hitter directly into my website, with a somewhat cut down interface. Check it out here.

The Back Story...

Initially I just wanted to have a way to set the "Now Playing" field on blog entries automatically, rather than typing it in. That's really all I set out to do to - write a Winamp plugin to record plays to a database, and then extract the currently playing song and populate a form element.

After getting that working in a single night's coding session, I took it all one step further to develop a PHP frontend that would compile "charts" for what I listened to the most. Funnily enough, I don't think I had much consciousness of last.fm when I started this development.

And of course, once I became an owner of an iPod, I immediately started work on developing an app to also get those plays into the Hitter database.

Funnily enough, about 5 years earlier I had set out to achieve this whole online "music charts" concept using a third party Winamp plugin (which was anything but reliable) and my own code to do the HTML processing. The result was less the stella. It's interesting to look back at how I achieved this perfectly 5 years later, without really consciously setting out to!

Switch Styles

About Style Switching.