In my time at Icelab I’ve been part a team that builds large, complex, heavily-visited web applications for universities, museums, think-tanks, and online stores (among others).

This is a small sample of the projects I’ve been involved in and the parts I played in bringing them to life.

Museum of Australian Democracy website

Museum of Australian Democracy

Located in Canberra, The Museum of Australian Democracy is a living museum of Australian social and political history.

MoAD maintains a primary website as well as a number of smaller sites that house information on particular collections within its catalogue of content. Using Elasticsearch, I implemented global, multi-site search functionality across these sites to enable users to access content from across MoAD's wider collection with a single search query.

I was also tasked with the migration of 14 of MoAD's Rails applications from an unmanaged hosting environment to Cloud 66, a managed platform for applications running within Docker containers. This work also involved fronting each of these apps with a CDN (in this case CDN 77) and overall, improved the security and reliability of these applications, reduced their ongoing maintenance burden, and improved the experience for their users.

United States Studies Centre website

United States Studies Centre

Launched in 2017, the United States Studies Centre (USSC) site is a bespoke publishing platform built primarily with Ruby and the dry-rb family of libraries.

I was primarily tasked on this project with the build of the admin area application, providing the team at USSC with a full-featured CMS that allows them to craft beautiful, rich, long-form content with embedded images, audio, and video. I achieved this in part through the use of a number of open source libraries developed at Icelab for building admin interfaces including Formalist and Roneo.

Given the eminence of the site and the turbulent political situation in the US at the time, security was a key consideration. Among other measures, I implemented Rack::Attack for rate-limiting potentially malicious requests, and added logic to protect user accounts from enumeration attacks.

Pursuit for the University of Melbourne website

Pursuit for the University of Melbourne

Pursuit provides the University of Melbourne's academics with a platform to publish long-form content on a variety of topics including education, politics & society, and the arts.

Pursuit's management team wanted a way to promote the platform internally and encourage participation, and to facilitate this I developed functionality to pull data from the Google Analytics API with this then used to construct personalised weekly reports.

Each week, authors and editors receive a top-level overview of the performance of their articles across a number of key metrics for the previous week including total visitors, page views, complete reads of their articles, top referrers, and more.

Working with Pursuit's internal development team I also assisted with the implementation of 'live article' functionality, where updates to an article are fed to the browser in near real-time (using a similar approach to that employed by The Guardian and others). You can see an example of this on Pursuit here.

The Wheeler Centre website

The Wheeler Centre

Opened in 2010, The Wheeler Centre is a literary and publishing centre in Melbourne, Australia. The centre is a venue for high-profile public talks on a variety of topics with many of these recorded and made available to users of their website in video or podcast form.

To better understand its audience, The Wheeler Centre makes extensive use of Google Analytics but needed a way to measure user activity in situations where this couldn't be captured by the Google Analytics JavaScript tracking snippet, such as when a podcast episode is played in iTunes, an RSS feed of articles is downloaded, or a user adds an event to their calendar via the 'Add to calendar' button on the event's detail page.

The solution here was to implement server-side tracking of these events. Clicks on URLs for trackable events are intercepted, with the relevant metadata including the requested resource and the type of action (such as downloading a file or subscribing to a podcast) sent to Google Analytics. The user is then seamlessly redirected to the content they originally requested.

Australian Prime Ministers website

Australian Prime Ministers

The goal of the Australian Prime Ministers website is to be the canonical resource for information on Australia's prime ministers and is a collection of more than 45,000 items drawn from 16 member organizations throughout the country including museums, universities, and libraries.

A key requirement when building this application was that the records listed on the site accurately reflect those available from each of the member organizations at any given time and my primary role here was to ensure these records were being sourced and refreshed periodically and accurately.

This was achieved either by building a client to query an organization's API (if it had one) or harvesting page content directly using a page scraper utility tailored to each target resource. Once fetched, records are stored in an Elasticsearch index which powers the site search and also provides the data for building the awesome streamgraph on the Collections page.

myDr website


The myDr website provides health and nutrition information along with Consumer Medicines Information documents for several thousand medications and is a CakePHP application running on self-managed AWS EC2 instances with a number of dependencies on other AWS services.

My primary role on this project was the ongoing maintenance of the application and the servers on which it runs, including recovering these from a recent period of downtime due to misconfiguration by the previous maintainers of the app.

Recently myDr began licencing its content and I was tasked with building a standalone application to serve this content within an embedded iframe on the websites of clients who have been licenced to provide this content to their own users.

In addition to my work as part of the Icelab team, I’ve also worked with a number of clients on a freelance basis.

Social Pinpoint website

Social Pinpoint

Throughout 2016 I worked with the team at Social Pinpoint to assist them with extending and documenting v2 of their API, as well as ongoing maintenance and new feature development within their Rails 4 application.