Work I've done that I can't (currently) advertise

I really want to shout about my porfolio, which is why I tag all such work that I blog about: so you can listen to me shouting if you want!

Unfortunately, some client work is embargoed for all sorts of reasons: maybe it's not finished or live; maybe it was cancelled; or maybe the work is subject to a confidentiality agreement. With that in mind, and to give prospective new clients some idea of what I'm capable of, I provide the following occasionally updated details.

Retrofitting a responsive layout over an older theme

Apr 2015–Jun 2015  I implemented a responsive homepage, using SASS, media queries and breakpoints, into an existing website that only used static CSS and had no responsiveness. This was a preamble to gradually converting the entire site to newer technologies, and I ensured that the minimum amount of work necessary was expended, by retaining most of the site's old CSS within the heart of the newer CSS.

At the same time I built and styled new content types and functionality such as a site directory: both with an eye to consistency with the old site, and also with the expectation that these stylings should fit seamlessly into the responsiveness once rolled out across the rest of the site.

Migration from heavily customized legacy CMS into Drupal

Feb 2015–Jun 2015  I built an incremental migration of several decades of content from a now-legacy and heavily customized CMS into a new Drupal website. Because of the potential for complexity, I worked with my non-profit client to implement improvements to the migration on a "Just In Time" rolling basis. This necessitated an emphasis on diagnostics—to surface and provide detail for otherwise unknown areas of the old website's functionality—and iterative building.

To help support this I built an "inner framework" within Migrate, to be able to make sense of the old PostgreSQL-based system, log useful information for both me and the client, and also be able to "smartly" inject meaning into the data on the fly, which historically was only present in Perl-based customizations of the legacy system.

Recovery of suite of interdependent Drupal sites from a disaster scenario

Feb 2015–Apr 2015  I masterminded and implemented the recovery of some 26 interdependent Drupal websites. The sites had been built using Drupal's "multisite" functionality and were therefore strongly interdependent. When an attempt to upgrade all 26 sites had failed and could not be rapidly restored from backups, this left their owners in a difficult situation, with any number of sites inconsistently or incompletely upgraded and hence unmaintainable until fixed.

I was able to diagnose the problems with the websites, reconstruct the history of the issues with them (which was no longer available owing to staff changes, and besides included several points pre-dating the primary incident) and use this to build and then implement a comprehensive and secure fix-and-upgrade plan which got all 26 sites happily back on their feet.

Supporting development of facet-heavy, geographically-heavy corpus search website

Jul 2014Jan 2015  A US academic consortium was building a tool to navigate a corpus of strongly interlinked research. The content was heavily tagged, with taxonomy terms which themselves had geographical metadata. This needed to be navigable, searchable and presentable (also on a map) using Search API as the backend.

I helped provide specific bugfixes, workarounds and new functionality in their integration with Search API and formatting of hierarchical terms, and also improved search relevancy: both through Solr configuration, and also through best practice for e.g. managing edge cases like Dutch name punctuation. I also provided Drush-based integration to Google Scholar, using scholar.py as a wrapper, and set this up for them in such a way that it worked with Pantheon hosting. Finally I helped provide a dynamic aspect to their map-based views, limiting which locations appeared based on the faceted output of the currently active corpus search.

Integration of a new Drupal site into custom PHP and Perl applications

Sep–Oct 2014  The beginnings of a Drupal-based commerce site was required, to sit alongside an existing Perl application. To bridge the two. an existing custom PHP login page fronting the Perl site.

This work involved: building a rapid setup/teardown architecture for being able to test the new site, using a custom install profile which piggybacked on Commerce Kickstart and included its own Features; and rebuilding an existing prototype to perform the Drupal authentication, ensuring conformance with Drupal coding standards, SQL injection prevention and performance best practice.

Architectural consultation for a Symfony-based educational forum

Jul–Aug 2014  To help them commence the building of a custom community-heavy website, using as many aspects of best practice as possible, an academic institution with a "one-man band" development team asked me to come up with a number of items of introductory documentation and recommendations: what framework to use (Symfony); how to manage code revisioning (git); and numerous other aspects of server and application architecture.

I also helped them out with close, on-site consultancy to work through complexities of their model layer, login workflow and permissions breakdowns. The prototype build was successful, and the beta version of their site launched on time and on budget.

Architectural consultation for a Features-heavy Drupal site

Jun–Jul 2014 A historically non-Drupal agency were required by a project brief to use Drupal to build their website. After we discussed their requirements and the most "Drupalish" ways of satisfying them, they moved away from a heavily customized OO/API layer—prompted initially by their need for automated testing, expressed in the technologies they were used to—to a features-based architecture which still permitted entirely satisfactory behavioural testing.

Impromtu presentation to explain benefits of a CMS

Oct 2013  A major EU-wide Drupal agency asked me to act as their representative on site for one of their local, big clients, and provide a presentation for key stakeholders to explain the benefit of adopting a CMS-driven intranet to replace their old, custom-built system. I put together a presentation within a week, and presented it twice along with fielding Q&A sessions from the same stakeholders.