Leveraging Laravel to Modernize Guttmacher Institute’s Database

We recently partnered with the Guttmacher Institute on a fascinating challenge. Their team needed to migrate an existing data application built years ago in Silex PHP — a framework that’s no longer supported. The application stored large datasets in CouchDB, which were uploaded and parsed from XML and CSV files. Those datasets powered a series of interactive data visualizations embedded on Guttmacher’s Drupal site.

The primary motivation for rebuilding? A complex, outdated database layer in CouchDB — and a steep learning curve for Guttmacher’s internal team.

Key Objectives

As we began to scope the project, three main objectives emerged:

  • Streamlined Data Management: Create a simple backend interface where internal users can upload CSV files to add or update records. If a unique data ID already exists, the record should update automatically. The data model would mirror the structure of the existing CouchDB datasets.
  • Preserve the Existing Data Structure: Migrate the CouchDB data to a new system that maintains the same JSON-based framework. This was critical — any change in data structure would have required major updates to the Drupal and React applications that depend on the current API.
  • Rebuild API Endpoints: Recreate two public API endpoints responsible for data calculations and transformations, ensuring downstream applications (Drupal and React) continue to function exactly as before.

Backend Development Considerations

Our first instinct was to rebuild the backend logic within Drupal, keeping everything inside the same ecosystem. We also discussed moving the data to MongoDB, since it would closely resemble the flexibility of CouchDB.

But after diving deeper into the requirements, it became clear that Drupal wasn’t the right fit. While we could have made it work, Drupal’s entity system and API layers introduce unnecessary complexity for a lightweight application like this. Supporting non-native databases (outside MySQL, PostgreSQL, or SQLite) would also have added significant development overhead.

In short: Drupal’s power wasn’t the problem — it was overkill for the task at hand.

Framework Implementation

So what did we choose instead? Laravel, paired with Filament PHP for the admin interface and backend authentication.

Laravel offered the flexibility we needed — lightweight, elegant, and fast to implement. Its Eloquent ORM made it easy to define data models with minimal overhead, while Filament PHP allowed us to spin up an authenticated admin panel in minutes.

Filament’s built-in tools, like export and import capabilities, were especially valuable. We used them to handle CSV uploads, importing data directly into our custom data model designed to mirror CouchDB’s structure.

To migrate existing data, we built a Laravel Seeder. The process was straightforward: connect to CouchDB, iterate through the records, map each property to our Laravel model, and save them to the new datastore.

During the migration, we realized that only one property required JSON storage. Rather than introducing a new datastore like MongoDB, we simplified the stack further by using MySQL, which has supported JSON fields since version 5.7.8. Laravel’s native JSON model support made this transition seamless.

The Result: A Happy Client

The outcome was exactly what both Guttmacher and our team hoped for — a cleaner, faster, and easier-to-maintain application. By choosing the right tool for the job, we reduced technical debt, met tight deadlines, and empowered Guttmacher’s developers with a familiar and efficient workflow.

The new Laravel application now allows their team to manage datasets through a simple CSV import process — no more struggling with legacy code or unsupported frameworks.

At Aten, we believe every project deserves a thoughtful technical foundation. When you work with us, we take the time to understand your goals and choose the right technology to meet them.

Interested in modernizing your application? Let’s talk and find the right tool for your next digital challenge.

Drupal Client work

Read This Next