Link iconbookdash.org

Owning books can change the path of a child's life

Automated imports of book and contributor data from Consonance. Daily scans for source file changes to auto-generate very large, downloadable assets. Integrated source file browser that captures usage information.

Case study published on 28 June 2025

Background: Bending WordPress to the client's will

Book Dash is a non-profit organisation that creates and distributes free, high-quality children's books in multiple languages. The website was originally built with WordPress.

I was hired a few years ago to develop a newly designed site, with more advanced content requirements, such as searchable book listings, book content and assets, contributor information, role mapping, various taxonomies, and language variations.

I developed a collection of custom Gutenberg blocks to allow for page layout flexibitly, while avoiding inconsistent and throw-away markup, as is often the case with page builder plugins (especially at the time).

The blocks require no knowledge of page builders or custom markup, and keep the data separate from the presentation, meaning design changes can be made holistically within the codebase without having to re-edit content. This design approach has proven its value over the years.

Illustration of the custom Gutenberg blocks
← Swipe or scroll on image →

Importing data from Consonance

All book and contributor data was originally managed exclusively within WordPress. For improved centralisation and distrubution of content, this data was more recently migrated to Consonance, a headless publishing CMS that exposes a GraphQL API.

The API provided can be best described as coldline, so could not be fetched on demand from a headless frontend. For this reason, I built an importer that translates the various forms of data into WordPress from Consonance, while making sure it is not editable via the WordPress admin UI, to maintain the single source of truth.

The imported data includes various types of metadata, contributor information, thematic taxonomies, and language versions. The importer runs daily, and can also be triggered manually from the WordPress admin area.

Illustration of the data importer
← Swipe or scroll on image →

Source file browser and asset generation

Book Dash provides downloadable source files for each book. This often includes large assets due to multiple languages and assets intended for printing and remixing. The files are stored on S3.

I built a source file browser integrated into the site structure. A requirement for the browser was to allow users to download any folder or file, on any level. Because of the size of some top level folders, generating zipped assets on demand would have been too slow and resource-intensive.

Illustration of source file broser
← Swipe or scroll on image →

To solve this performance issue, I created a zip generator that runs periodically. It scans the source files to detect changes. Where differences are identified, new zip files are created for the affected folders and uploaded to S3. The browser is therefore able to provide up-to-date downloads instantly from Cloudfront and with no impact on server performance.

The source file browser also captures usage information from users when downloading source files, which is stored for reporting and analysis.