This family web site is served through a content management system called Wheel. I wrote it myself in PHP/MySQL. The idea behind the system is to collect multimedia content into groups (called "wheels") while allowing each object to retain its independence for future classification.
For example, a photo of my son on his bike can be linked in the "Summer 2003" wheel, while also being linked in a "People on Bicycles" wheel. The two instances of the photo can each have a title and caption relevant to the wheel context, while the system still stores only a single image file. Each instance (intersection of content object and wheel) is called a "spoke".
Wheels can also be classified as spokes of other wheels, allowing for hierarchical classification of content groups. Want to create a new site section? Create a new wheel as a spoke of an existing wheel, then start attaching spokes (pictures, movies, text blurbs, other wheels, whatever) to your new creation.
It's been fun so far, but I still have a lot of improvements to add. For one, I want to enable site visitors to create their own wheels and throw objects into it as they browse the site. They could supply their own captions if they like (there must be some better caption writers out there than me), and share their wheels with other users.
If you have any comments, drop me a line. I might even open-source the project one day if it turns out cool.