Downloads and Customer Management

Note: this is one of a series of posts about the creation of the King Design web site.

One of the things I wanted to do with the new King Design web site was make it easier for my customers to download my software – including language files and any additional goodies I want to offer. Since the King Design site is the new business site, it made sense to set up the downloads on the new site. URLs are important, so I put everything at:

Then I set up links from the old Tasks Pro™ download page and the old Tasks download page. I decided not to do a 301 redirect header, because I didn’t want customers to be taken to a new page/site without an explanation. I also added an FAQ for good measure (and to provide another hit in potential internal search results).

Once at the new download page, a customer can log in and download any software they have purchased. There are also links on this page to download language files, etc.

Of course, not all customers have their license information handy, so I also created a utility to allow them to retrieve their license key(s). In the last week, 54 people used this utility to retrieve their license key(s).

All product downloads are also now available in .tar.gz and .zip flavors.


In the new download system, I also needed to create new functionality to handle paid upgrades. This was a little more effort than I initially expected. I had to:

  • Make the proper download links available when a customer logs in.
  • Add upgrade items to the online store.
  • Offer links to any relevant upgrades.
  • Restrict access to downloads a customer shoudn’t have access to.
  • Handle license upgrades in my customer management system

Of course, there is an FAQ on how to purchase an upgrade. I also introduced a discounted “upgrade to Tasks Pro�” item for existing Tasks customers.

Customer Management

Before I had the central download location, I had a separate download log in for Tasks Pro� customers and Tasks customers. On the back end, I had this information in different database tables – just because it was the simplest solution at the time. To create a combined download log in (and license key retrieval, etc.) I needed to first consolidate all of my customer data into a central system.

My simple “single table” per product quickly grew into 5 tables:

  1. Customers
  2. Licenses
  3. Orders
  4. Products

A customer can have one or more licenses. Each license has orders (ie. initial order, then upgrade order(s)) and products attached to it. Every download is logged and attached to the customer.

Since my old scripts just updated a single ‘customer’ table, I had to re-do all my customer management scripts. I also needed to populate the new customer database with existing customer data. I created an PHP script that pulled all of the data from my Tasks Pro� customer table and my Tasks customer table, then put it into the new customer database. This migration script maintained license keys, purchase dates, etc. and also combined Tasks Pro� and Tasks customers where appropriate.

I highly recommend creating migration scripts that can be re-run as needed. This makes it very easy to maintain a ‘staging’ area before doing a final transition and deactivating the old system.

Wrap Up

The day of the initial launch, I ran into a couple of small hiccups with the download login. Those were easily fixed and overall I’ve been very pleased at the way the new systems have worked for me and for my customers.