The Seeds of an Idea

Necessity is the Mother of Invention

For close to fifteen years, I have been searching for a way to run a design business that helps me work better, but also works the way I want it to. I still haven’t found what I’m looking for, so I’m building it. But not without the help of a very talented crew of web application developers, Twentyone Degrees.

The Idea Began with an Application

Why build something that already exists? Because I have high standards. I want control over the design and functionality, so that I don’t have to wait for the next release to work the way I envision the process. I enjoy the details, maybe too much. I become immersed in them and lose the big picture. Probably more of a weakness than a strength. But it also helps me to do what I do.

In search of the right tool to build sites that worked well with web standards, I found one that had the potential to revolutionize content management and templating systems. The application was built on W3C standards, XML, XPath and XSLT. It is the web publishing system we know as Symphony. It does away with proprietary templating systems that do not allow for portability from one scripting language to another.

The merits of using XML / XSLT are stated well on the Overture Forum:

Once you have a system down with XML / XSLT (be it with symphony or your own homegrown solution [as is my case with the company I work for]) maintenance and adding features is a lot faster than with the traditional ‘what everyone else is doing’ methods with php. The initial overhead from the development and planning stages is more expensive but in the long run it makes life so much simpler. And it future proofs the applications you write. If you handle a lot of the logic in the XSL then if you decide that php is too slow for your application then you can essentially write a C based application that produces the same XML that your php app did and you don’t have to make any changes to your front end logic. Portability is a cinch then. One of the many reasons I love symphony. I can port most of my symphony XSL to my own content management system and have the same exact results…

That type of portability is non-existent in other solutions…

While Symphony 1.5 was in beta, during the time when Symphony was still being licensed, I started building my design portfolio website,, to showcase what was possible with Symphony. After that experience, I was hooked. The potential was huge, and the development team was extremely responsive to any questions, offering help, code samples and development services as well as application features and enhancements which found their way into the steady stream of releases since the Symphony 1.5 public release, which made the application free for anyone to use.

A Design Business Administration System

With the introduction of Campfire Services, I started to develop some thoughts around the idea of using Symphony as the hub for several business functions. The discussions I had with the Twentyone Degrees development team in September 2006 started something like this:

One of the first Campfire Services that I would be interested in developing would be some sort of front end login system for my clients. It would simply be a private area for clients to view a list of ongoing projects and to be able to view conceptual proofs and submit comments. Each client would have a code (ABC) and each job would have a number (1234).

The next stage would be to add the ability to define objectives, establish processes, schedule projects, track time, manage customers and communicate with them through e-mail, both in text and HTML, and on forums.

Then, as I grow my business into what I envision, I would want to tie this into an accounting system, with the ability to generate estimates, invoices, and financial statements, track credit card payments for typeface designs that I would offer for sale on my site, and manage members, sales and billings for subscriptions to print and online magazines.

If I could have exactly what I wish for, it would be something similar to what ProActive Software, in New Zealand, has developed as a project management solution. I took their product, ProWorkFlow, for a test drive, and I loved what they had created. The issues I had with it were its reliance on ColdFusion, the lack of an ability to modify the look of the site to match my brand, and the subscription cost per user. I could modify colours and add a logo, but beyond this, I would not be able to customize the interface. For instance, add an area for displaying conceptual work for clients, with the ability to add comments. The cost is actually fairly reasonable, but ideally, I would like a custom solution.

Another product that I have been looking at is from Marketcircle, called Daylite. They also have another product called Billings. I love the look of their applications and have been very tempted to purchase licenses for their software. I also love the idea that they are built specifically for Mac OS X from the ground up. But that is also one of their limitations. They are not cross-platform compatible, though they can be synced with mobile systems. Another problem is the proprietary database used by the software. Also, as far as I know, the features of Billings are separate from the functionality of Daylite. But I want both in one solution. And, ideally, I would want a web-based solution that looks like a desktop application and works just as fast.

In trying to solve the problems of running my business, I find that I have to cobble together a process that relies on software, both desktop and web-based, that solves each specific problem, then work them together into something that gets the job done, however inefficiently, given the repetition of certain tasks.

Instead, I have been looking for a single platform on which to build the entire process. I think Symphony is it. The first step, then, would be to set up the front end login system for my clients, which is my first priority: better communication with my clients. Then, I would want to build each of the additional modules or components onto this.

It’s all pretty ambitious, I know. But I am taking a long-term view of things. It also sounds as if you have solved a lot of these problems already with Conductor. I am very interested in seeing how this might work for me as well in trying to build a business involving identity, print, web and type design (with a view to eventually grow into industrial design and architecture — a very long-term view).

Very ambitious indeed. It’s a dream, but maybe I’ll get there one day. In the meantime, I am enjoying the process of building out these ideas, one piece at a time. Organization and business sense are one of the first things I need. They don’t come easily. But Symphony is helping.

My Symphony Feature Request

As I started thinking about how I could use Symphony, I realized I would need some additional features. I asked for them and the Symphony Team delivered. It went something like this:

It would be great to be able to cross-reference data between sections. If I was able to create a categories section and use those same categories as select box options within other sections, it would alleviate the challenge of having to manually modify the options for several sections that would access that same list of categories.

So, rather than listing options for the custom field, I could provide XSLT code that indicates a particular range of values from an XML node set in the categories datasource.

Then, I went on to explain how this might work for building websites.

I could theoretically (since I haven’t tried this) create static pages and menus for an entire site from a single master template using four sections: Sections, Categories, Entries, Pages. The master template would have a URL Schema of /section/category/entry/page/. Rather than using the default navigation data source, I could create a Sections section where each entry represents the first level in the hierarchy. This section could contain at least two custom fields:


  • Section Title
  • Section Description

Then, I could create other sections and custom fields:


  • Category Title
  • Category Description
  • Section (this custom field would be a select box listing the Sections by Section Title)


  • Entry Title
  • Entry Body
  • Category (this custom field would be a select box listing the Categories by Category Title)


  • Page Number
  • Page Title
  • Page Body
  • Entry (this custom field would be a select box listing the Entries by Entry Title)

With some creative XSLT templating, a single master template should be able to generate all menus and content dynamically without the Author ever having to touch any of the Structure or Blueprints areas of the admin, which should be restricted to Administrative users. However, all this depends on the custom field being dynamically generated by the primary custom field of another section (or, if possible, any custom field from another section). This is probably possible to accomplish now, though the custom field would have to be a Text Input field and the user would have to type the data rather than choosing it from a pull down menu. The ability to restrict choices, though, would be important to keep the site from getting broken because of user error.

Also, it would be very easy to bring back a much more powerful version of the version 1.1 Categories as you described in the Subcategories thread.

Does this sort of structure make sense as far as building a site with four levels of hierarchy?

It could also be used for building a client login / project management system.

Clients / Projects / Phases / Tasks / Entries

        <title>Clients / Projects / Phases / Tasks / Entries</title>
        <ul class="clients">
            <li class="client">Client ABC
                <ul class="projects">
                    <li class="project">Project 1234
                        <ul class="phases">
                            <li class="phase">Phase 1: Define Objectives
                                <ul class="tasks">
                                    <li class="task">Client Brief
                                        <ul class="timesheet">
                                            <li class="entry">Entry Title
                                                <ul class="entry-data">
                                                    <li class="date">2006-10-26</li>
                                                    <li class="start-time">1:00 pm</li>
                                                    <li class="stop-time">2:15 pm</li>
                                                    <li class="hours">1.25</li>
                                                    <li class="rate">75</li>
                                                    <li class="amount">93.75</li>
                                                    <li class="username">User Name</li>
                                                    <li class="description">Description</li>
                                                    <li class="notes">Notes</li>
                                    <li class="task">Creative Brief</li>
                            <li class="phase">Phase 2: Research
                                <ul class="tasks">
                                    <li class="task">Research</li>
                                    <li class="task">Concept Development</li>
                            <li class="phase">Phase 3: Design
                                <ul class="tasks">
                                    <li class="task">Preliminary Concepts</li>
                                    <li class="task">Concept Review</li>
                                    <li class="task">Concept Refinements</li>
                                    <li class="task">Concept Approval</li>
                            <li class="phase">Phase 4: Production
                                <ul class="tasks">
                                    <li class="task">Design Production</li>
                                    <li class="task">Prepress</li>
                                    <li class="task">Final Proofs for Approval</li>
                            <li class="phase">Phase 5: Print
                                <ul class="tasks">
                                    <li class="task">Deliver Files</li>
                                    <li class="task">Print Supervision</li>
                                    <li class="task">Delivery</li>

Dependencies might be built in which would require warnings that by deleting a client, all related projects and entries will be deleted, but Tasks and Phases could be global. So the actual structure would be more like:

/ Clients / Projects / Entries /

where the Entries section would have one required custom field for Task, which would be related to a particular Phase.

Does this make sense, or is this trying to do too much with Symphony, when there are tools like Basecamp, Harvest or ProWorkFlow?

Why build something like this in Symphony? Because of today’s announcement that Symphony 1.8 will enable the application to build other applications. The first proof of concept is the financial application that Twentyone Degrees is currently using for their inhouse operations. To find out more, visit Allen Chang’s blog on the latest news and resources for developing XSLT templates for the Symphony web publishing system, Chaotic Pattern, and listen to the podcast interview with Brad Smith and Ryan Sims from The Big Noob.

28 June 2007 by Stephen Bau