Here is my take on kevin's sort using [Soapi.JS][1]

- get a list of sites from stackauth /sites
- get the community user from each site to get creation date
- attach each meta to it's parent
- sort by date
- group by 'state' or type.
- render grouped or as a single list.

[**Live Demo HERE**][2] 


---

![alt text][3]

---

    /* 
    This is the money shot
    */
    
    // get a list of sites from stackauth
    Soapi.RouteFactory("", apiKey).Sites()
    .getResponse(function(sitesResponse) {
    
        // count down so we know when we are done
        var count = sitesResponse.items.length;
    
        // determine the increment of the progress bar for each operation
        progressStep = document.getElementById("progressOuter").clientWidth / count;
    
    
        function checkCount() {
    
            stepProgress();
            if (--count == 0) {
                // all sites reported in
    
                // perform meta assocations
    
                while (sitesResponse.items.length > 0) {
    
                    // take the site of the bottom
                    var item = sitesResponse.items.shift();
    
                    // if it is not a meta site, add it to the site list
                    // cannot depend on linked_meta right not
                    if (item.api_endpoint.toLowerCase().indexOf(".meta.") == -1) {
                        sites.push(item);
                    }
                    else {
                        // check the site list to see if the parent has been seen yet
                        var parent = sites.tryGetParentByEndpoint(item.api_endpoint);
                        if (parent) {
                            // attach the meta to the parent
                            parent.linked_meta = item;
                        }
                        else {
                            // parent not seen yet, stick it back on top
                            sitesResponse.items.push(item);
                        };
                    };
                };
    
                // do sorting and arrangement
    
                // now we have a list of sites similar to this
                // stackoverflow.com
                //    meta.stackoverflow.com
                // stackapps.com
                // gaming.stackexchange.com
                //    meta.gaming.stackexchange.com
    
    
                // lets sort by date
                sites = sites.sort(function(a, b) {
                    return a.creation_date - b.creation_date;
                });
    
                // and segregate the sites by state as we 
                sites.normal = [];
                sites.open_beta = [];
                sites.closed_beta = [];
                sites.linked_meta = [];
    
                // empty the array
                var tmp = sites.splice(0, sites.length);
    
                // and push them in order of appearance to maintain date sort
                // into both the parent array and the group arrays
                while (tmp.length > 0) {
                    var site = tmp.shift();
                    sites.push(site);
                    sites[site.state].push(site);
                    if (site.linked_meta) {
                        sites.linked_meta.push(site.linked_meta);
                    };
                };
    
                progressComplete();
                // return results
                callback(sites);
            };
        };
    
    
        // get community user from each site to get creation date
    
        for (var i = 0; i < sitesResponse.items.length; i++) {
    
            var site = sitesResponse.items[i];
    
            Soapi.RouteFactory(site.api_endpoint, apiKey)
            .UsersById(-1).getResponse(function(usersResponse, context) {
    
                // add the date to the site so we can sort
                context.creation_date = usersResponse.items[0].creation_date;
                checkCount();
            }, function(error, context) {
    
                // probably timed out. set now as creation date
                // attach the error
                context.creation_date = new Date();
                context.error = error.message;
                // still need to decrement count so we don't get stuck
                checkCount();
            }, 10000, site);
            // we want to give a reasonable timeout value because
            // we are doing a bunch of stuff here. it should not 
            // take this long, just being safe
    
        };
    });





  [1]: http://stackapps.com/questions/494/soapi-js-v1-0-fluent-javascript-wrapper-for-the-stackoverflow-api
  [2]: http://soapi.info/code/js/stable/siteordering.htm
  [3]: http://img121.imageshack.us/img121/451/pantheon.png