How We Rebuilt eGovReview on Drupal 11 Without Carrying Forward Its Legacy System

| | 4 min read

Introduction

eGovReview  covers technology in public services, exploring domains like digital identity, civic infrastructure, cybersecurity, and policy and governance. Before publication could resume, the organization needed more than a Drupal upgrade: it needed a new platform that could preserve its existing archive without carrying the legacy system forward. Its archive included 739 articles published between July 2021 and August 2022, covering 11 editorial topics.

Moving eGovReview to Drupal 11
Moving eGovReview from Drupal 10 to Drupal 11
 

Challenges


The publication's archive had to survive the rebuild intact. Its articles were already indexed by search engines and referenced by other websites, so changing their URLs could result in broken links and lost search visibility.

The Drupal 11 migration therefore had three non-negotiable requirements:

  • Preserve every article's title, byline, publication date, image, and body content.
  • Keep every existing article URL working.
  • Move to Drupal 11 without carrying the legacy database, schema, and module dependencies into the new platform.

A database migration would have been the conventional approach. The original site had been built on the Thunder distribution and a commercially purchased theme, allowing the publication to launch quickly without developing its presentation layer from scratch. However, support for the theme had since been discontinued, and the existing implementation included theme and module dependencies that were not necessary for the new platform. Carrying the database and configuration forward would have reproduced those dependencies in Drupal 11 rather than giving the team a clean foundation for the rebuild.

The challenge was therefore not simply to migrate the content, but to rebuild the content structure in Drupal 11 while preserving the publication's existing URLs and archive.


Our Approach


The migration needed the content, not the legacy system behind it. Rather than carrying the old database into Drupal 11, the team treated the public site as the source of truth.

The process started with the site's public sitemap, which provided a complete list of article and page URLs. A custom Python crawler then fetched each page, retrying failed requests and extracting the content into a consistent structure. It cleaned the article body into well-formed HTML and selected original, high-resolution images where available instead of importing resized copies.

Each page was saved as a separate JSON record. This created a clean boundary between content extraction and Drupal import, allowing the extracted dataset to be inspected and validated independently before anything was imported into the new platform.

The team used an AI coding agent to accelerate development of the extraction scripts, while keeping the migration logic and validation under engineering control.

Migration Flow
The migration pipeline, from the public sitemap to verified Drupal 11 content

Solution


The migration was implemented using Drupal core, a custom Drush command, and a Python-based extraction pipeline. The implementation separated content extraction from Drupal import, making each stage independently testable and repeatable.

Sitemap Crawler: A custom Python crawler read the public sitemap and fetched each page, retrying failed requests automatically. It cleaned article bodies into well-formed HTML, selected original images over resized copies where available, and stored each item as a JSON record. This provided a consistent dataset that could be reviewed and validated before import.

Custom Importer: A custom egov_importer module added a dedicated Drush command for importing the JSON dataset into Drupal. The command included a dry-run mode for testing and validation before making changes. During import, it created or reused taxonomy terms, prevented duplicate image records, preserved the original publication dates, and assigned each article its exact legacy URL.

Restructured Author Bylines: Author bylines were modeled as a dedicated content type rather than standard Drupal user accounts. This separated editorial identity from system authentication while giving each author a reusable profile page, including a profile image and a dynamically generated list of their articles.

Author Page
The Author Page

A Reusable Approach to Content Presentation: The rebuild also surfaced a presentation challenge: the publication needed more flexible ways to arrange and highlight content than conventional Views listings could provide. Rather than implementing a one-off layout specifically for the site, the team developed Bento Showcase as a reusable Drupal module for creating configurable bento-style content layouts.

The Product showcase layout with five news items: one large hero tile beside four smaller tiles

This turned a site-specific design requirement into a reusable Drupal capability. The module was subsequently contributed to Drupal.org, making the solution available to other Drupal projects facing similar content presentation requirements.


Result


The migration transferred the complete archive to Drupal 11 while preserving the site's existing URLs and leaving the legacy Thunder database behind.

Flawless URL Preservation: All 1,916 recorded URLs were preserved. Existing links from search engines and other websites continue to resolve to the corresponding content on the new platform.

Complete Content Integrity: The importer migrated 742 items: 739 articles and 3 pages. Articles retained their original publication dates, images, and body content.

Enhanced Information Architecture: The migrated content was organized into 11 editorial topics and 1,162 keyword tags. The migration also created 11 author pages representing 10 named writers and one staff byline.

Zero Technical Debt: The legacy Thunder database, theme and module dependencies were not carried into Drupal 11. The importer can also be run repeatedly, updating existing content without creating duplicates, providing a repeatable path for future content migrations or updates.

Free and Open-Source Contribution: A requirement identified during the rebuild became a reusable Drupal module. Bento Showcase was contributed to Drupal.org, extending the value of the project beyond the publication itself and providing other Drupal sites with a configurable approach to bento-style content layouts.