Skip to main content

Portfolio

CV: PDF

Jellybooks – co-founder – full stack web development

2012–present

Background

Jellybooks is a technology-first B2B service catering for the publishing industry. We have several products/services but we are primarily known for our innovative reader analytics service that allowed publishers to include objective, data-driven analysis in their decision making processes. We organise digital focus groups and offer publishers real-time analytics dashboards and reports showing how readers react to books. Our A/B testing capabilities allow publishers to test alternative covers, titles, descriptions, or even different content, and compare how cohorts respond.

In recent years Jellybooks has been rolling out a "peek inside" book sampling service for publishers and retailers to integrate into their own websites and digital marketing by leveraging our advanced ebook reader, the Jellybooks Cloud Reader app, that supports reflowable and fixed-layout publications across all web-capable devices including as mobile, tablet and desktop. The reader is powered by a "streamer" - the assets are sent on demand rather than delivering and unpacking entire ePubs.

Implementation

I have been responsible for (and sole developer of) the implementation of the Jellybooks web application — built as a large Ruby-on-Rails codebase. It's a highly dynamic application because so much of what we do is data driven. We support many products, many user types/tiers, multiple geographies.

I'm also responsible for the asset management on the backend. Our "peek-inside" excerpt product has required a dedicated asset ingestion service where publishers can provide their files via SFTP and then processed accordingly through a long pipeline of steps that have to interact with the "streamer" microservice and an internal Rails API. We also have an equivalent web form equivalent for small publishers with only a handful of titles. In combination we've ingested close to 70,000 publications. Customers are able to access excerpt links via an external API served by the Rails app, or alternatively via a section on the website for ad-hoc lookups.

We have a large bespoke analytics processing engine written in C++, developed by another co-founder, that analyses incoming events and produces stats and key metrics for our various services. There's an internal API that the Rails app uses to fetch the relevant data to present to the user.

Primary app stack:

  • Ruby on Rails
  • JavaScript (including D3.js)
  • SASS/CSS
  • MySQL & MongoDB
  • Delayed Job background workers
  • ZeroMQ message queue
  • MeiliSearch
  • Nginx
  • Linux (Ubuntu) hosts provided by Linode
  • AWS S3 & CloudFront; Azure Container Storage and CDN. CloudFlare load balancer and CDN.
  • SendGrid for transactional emails
  • Monitoring: Grafana, Telegraf & influxdb
  • Error tracking: Rollbar

Additional backend services:

  • Microservice for adding ePubs and audiobooks to the publication asset streamer via REST API [NodeJS/Express]
  • Epub/audiobook tools:
    • Ebook sample creator - excerpts derived from master files [Python]
    • Epub v2 to Epub v3 converter [Python]
    • LPF audiobook bundler [JavaScript]
  • Bulk metadata, ePub & cover ingestion [Ruby]

Longman Dictionaries Online - full stack web development

2011–2014

Background

Longman Dictionaries, part of the global Pearson Education group, produced a broad range of learner dictionaries for students learning English and sold internationally across a wide range of markets. Their physical books would often come bundled with a CD-ROM containing an interactive version of the dictionary. In addition, their digital dictionaries would also include supplementary resources such as interactive language exercises, grammar and language usage guides, photo/picture banks, and vocabulary building tools.

Early projects to produce online versions had proved costly and complex: each project became its own silo on its own domain & host, and developed by different external suppliers with proprietary codebases. However, despite CD-ROMs remaining popular (remember, many markets in developing countries internet and IT facilities were lagging) there was a pressing need to produce a robust and flexible online solution that was also cost-effective and maintainable.

Solution

A single online platform to host all the Longman dictionary projects. Users would have a single account and add one or more dictionaries to their "bookshelf". The platform would contain all the necessary functionality to handle the typical feature set for a digital product: A-Z dictionary, thesaurus, interactive exercises, textual guides, help pages, etc. The project achieved large cost savings because of the reusable components that could be easily leveraged per dictionary title. Although each new dictionary addition still required some dedicated software engineering time to onboard the title, the vast majority of effort was spent on getting the source data consolidated, normalised and in the required formats to conform to the system's specifications in order to be ingested. The codebase was itself a project deliverable, meaning that Pearson had the means to maintain the platform via their own preferred means rather than being beholden to an individual supplier.

The LAMP tech stack was chosen to fit the organisation's existing competencies.

  • PHP & CodeIgniter framework
  • JavaScript
  • CSS
  • MySQL
  • Apache HTTP Server
  • Apache Solr (search engine)
  • Data processing: Python, XSLT, Bash

Longman Dictionaries iOS mobile apps

2010–2012

Pearson Education had already licenced data for a couple of their best-selling dictionaries to a 3rd party in the early days of smartphones. It became apparent that mobile apps were a promising and viable revenue stream. I created a proposal to develop a platform that could serve as a base for all subsequent iOS-based dictionary apps. Longman had an extensive list of dictionaries that were suitable for the mobile market – a selection of eight distinct dictionaries (including three bilingual titles) were eventually released off the shared codebase.

  • Objective-C & UIKit
  • Bespoke webview and JavaScript bridge
  • Custom sqlite3 build enabling full-text search capabilities
  • Bespoke sqlite db generator for bundling content, images and audio assets in to efficient resource files.
  • Simple vocabulary exercise engine
  • Data processing: Python, XSLT

In addition, a ninth app was developed and targetted for iPad users although supported iPhone devices too. It was created for the Longman Language Activator, which is a completely different style of resource and couldn't be built off the core platform.

Exam English mobile apps

2013

Background

Exam English is a website specialising in English language proficiency exam practice. There are many different providers and levels and the site provides practice questions to match the style and type for a given exam. The site was performed well in the online space and wanted to move in to the mobile arena where users (typically young learners) were increasingly moving to and wanted to produce an app for each of the main exam types.

Solution

The client wanted to use a cross-platform solution that leveraged webviews and the HTML/JS platform in order to simultaneously release apps on Apple and Android app stores with minimal additional work. The app would consist primarily of a question/answer system (multiple choice, gap fill, listening, etc) that would track user progress.

The PhoneGap (now Apache Cordova) mobile application framework was selected. A custom HTML container with JS & CSS to present questions to the user as well as answer feedback. Progress was stored in the LocalStorage database. And a command-line Python script was developed to convert the client's XML formatted question-answer database and output into a functional offline HTML & JS standalone app that could be loaded directly into PhoneGap.

The client wanted to be able to take the core codebase and create as many spin off apps as required. without having to touch the code itself. Therefore the solution involved delivering an iOS default project and an Android project, and the client simply had to duplicate and then customise the app (name, icons, load screen, data, etc) but not touch any code.

An enhanced platform was later commissioned and developed (when it transpired a plagiarist extracted the client's content from the app bundle and tried to repackage the copyrighted material). This version relied on storing the data in an obfuscated way within a local SQLite database and the question engine loaded html fragments on demand from the DB via a bridge between the webview and the app container.

Society of Young Publishers web app

2013

Background

The organisation has an online presence that is used to: share news, advertise events & jobs, allow new subscriber sign-ups (including recurring payments), distribute online copies of their quarterly magazine, committee information, and local branch information pages. In addition their web application contained mailing list administration and allowed for messages to be sent to their subscriber list. Regrettably the inherited application code was in impenetrable PHP where business and display logic was all intertwined. Only the most trivial amendments were possible without causing widespread bugs/outages and I was brought on board to architect a new web application for the Society.

Solution

Due to limited budgets, it was deemed appropriate to leverage existing CMS platforms and tailor to their needs. The committee reviewed three potential CMS platforms and preferred Wordpress. The solution was therefore to create a Wordpress-based application and integrate existing plugins, as well as bespoke plugins to fill in any holes in requirements.

  • Wordpress
  • LAMP stack
  • Bespoke Mailchimp API integration
  • Integrate S2Member (subs and payments) and Events Calendar plugins
  • Licenced and amended a jobs board plugin (rather than writing from scratch)
  • Bespoke plugins (PHP) for administration tasks
  • Bespoke theme (HTML, CSS)

Andrew Nurnberg Associates International website

2013

This London-based literary agency required an easy to maintain website. Their old website was difficult to keep up-to-date, and information about authors and books was manually consolidated rather than coming from any kind of database.

The solution was a Wordpress-based site with custom plugins and theme. This provided a dedicated section for the admins to maintain an up-to-date database of all the authors they represent and their associated publications, and therefore author pages would be dynamically derived from the database. In addition, the standard Wordpress platform allowed for easy editing of all their site's pages and managing user roles.

  • Wordpress
  • Custom WP plugin (PHP) and theme
  • LAMP stack

Getting to Grips with LaTeX [typesetting] Tutorials

2003–

The LaTeX document preparation system (based on Donald Knuth's TeX typesetting engine) has been heavily used within engineering and academic arenas and still has a strong following within technical folk, largely because it produces high-quality documents. As a text-based markup language with a wide-ranging feature set, it has a fairly steep learning curve which can put off newcomers.

My Getting to Grips with LaTeX tutorials were begun in 2003 to serve anyone using LaTeX although with a primary focus to newcomers or novices. They have been expanded and edited over the years, often as a result of questions or feedback from readers.

Thousands of readers access the tutorials each month. And shortly after their release they reached an even larger audience because also served as the seed content for the LaTeX wikibook.