Skip to content
Case study

FF Echsenbach website

The website of the Freiwillige Feuerwehr Echsenbach. We moved 946 reports going back to 2004 into WordPress and handed the site to the brigade's team.

  1. Challenge

    Since December 2004 the brigade had published its reports on a custom PHP site with its own database. The archive had grown to 946 reports, split across two tables built differently. The older one stored each date as text, for example 10. Dez 2004 10:39. The newer one, used from 2012, recorded the vehicles as one yes/no column per vehicle, the alarm level as a code like T1 and the incident commander as free text.

    The new site had to keep all of it and link every report to its vehicles and specialist areas. After launch the brigade's own team would run the site, so publishing a report or adding a vehicle could not depend on us. A volunteer fire department has no budget for ongoing care, so the site had to work without a maintenance contract.

  2. What we built

    We recommended WordPress with Elementor and JetEngine after showing the team what it allows: every department shapes its own pages from building blocks, without a developer. Before the handover we showed them how to maintain the site and build further pages.

    We built the site in WordPress, with JetEngine content types for reports, vehicles, specialist areas, members and citizen-service pages, linked to each other. A report points to its vehicles, its specialist areas and its incident commander. From those links a shortcode builds the details table on every report: type of operation, alarm level, start time, incident commander, crew size and vehicles. Rows without data are left out, and a report that only has a date shows a date instead of a start time of 00:00. The menus for vehicles, specialist areas and citizen service are built from the entries themselves. A new vehicle shows up without anyone editing the menu, and a vehicle taken out of service drops out of it. The menu links to a page of former vehicles instead.

    For the move we wrote a script that reads the database export, maps the old columns onto the new structure and splits alarm codes such as B2 into type and level. The import runs in batches, 100 reports at a time or 10 when it also fetches photos, and carries on by itself, so no step runs into the server's time limit. Running it again updates a report with the same title and date instead of creating a second copy. That let us correct a mapping and run the whole import again. The photos came over report by report from the old site: the first became the report image, the rest its gallery.

    The incident commanders were the messiest part. 259 reports named one, in a free-text field that held 90 different values: names with and without rank, surname first or last, a few with broken characters, one field with two people in it. The import created one member entry per value. A cleanup tool then repaired the characters, moved the rank into a field of its own, put the names into one order and merged duplicates along with their report links. It shows a preview before it changes anything, and it lists names that differ by only a few letters for a person to decide, because two similar names can belong to two people.

    Sorting members by rank took three fixes in the last three days of the project. The first version rewrote the database query behind every member list. It hid members whose rank had no sort number, and it broke pages until we replaced it. The version that stayed is simpler. Each member keeps the sort number of their rank in a field of its own, updated when the member is saved, when their rank changes and when the order of ranks changes. Members without a rank still appear, at the end of the list.

  3. Stack

    WordPress with Elementor for the page layouts and JetEngine for the content types and the links between them. Our own code is PHP hooked into WordPress: the details shortcode, the menu builder, the rank sorting, display conditions for Elementor elements, and the import and cleanup tools in the admin area. Day to day the team works in the normal WordPress editor.

  4. Result

    The site is live with the archive back to December 2004. The project ran about three and a half months, from late December 2025 to mid-April 2026. Since the launch the brigade's own team has run the site and kept publishing reports, and the details table on a new report fills from the same links as on the old ones.

    The move from the old site and its database was the largest part of the work. The oldest export had already lost its umlauts to an encoding error, so some early reports show question marks. If you are moving an old site, check the character encoding of the export first, read every free-text field before you map it, build the import so it can run twice, and fetch the photos while the old server is still up.

    Visit the live site

A steaming green enamel mug next to a book on a table by the window.

Want something like this for your business?

Tell us what you need. We will get back to you within one business day.

Fabian Wagner, founder of Blax Software

You talk to Fabian Wagner, founder

No sales desk in between: he reads every enquiry himself.

Prefer a call? +•• ••• ••• •• ••