Most booking systems are built for one thing. Book a table. Reserve a rental car. Buy a ticket. Kiewiet needed something different: one system to manage bike rentals, island-wide luggage pickup and delivery, and passenger transfer bookings — with a storefront tying them together.
We built it in 4D, and it handles all three without compromise.
Why 4D
4D is not a household name in the web development world, and that is exactly why we sometimes recommend it. For complex, data-intensive back-office applications — particularly in European SME and operational contexts — 4D offers something that general-purpose web stacks do not: a tightly integrated database, application server, and development environment in a single product.
There is no ORM layer to fight. No impedance mismatch between your data model and your query language. No deployment pipeline involving six separate services. You define your tables, write your methods, and the system runs.
For Kiewiet, this meant we could build extremely dense business logic — overlapping rental periods, route-based luggage scheduling, seasonal pricing rules, availability calendars — without the overhead of orchestrating a microservice architecture that would be overkill for the problem.
What the system handles
The Kiewiet application manages three distinct operational streams from a single back-office:
- Bike rental: Fleet availability, multi-day bookings, customer records, deposit tracking, and seasonal rate tables
- Luggage transport: Route planning across island zones, pickup time windows, weight and volume constraints, and driver assignments
- Ferry transfers: Timetable integration, group bookings, and passenger manifests
These are not three separate modules bolted together. The data is genuinely shared — a customer who books a bike also has their luggage transferred and their ferry crossing registered, and the back-office sees all of it in one record.
The web interface
The customer-facing booking flow is built in PHP with a clean JavaScript front-end. 4D exposes an internal API that the PHP layer consumes, keeping the presentation layer fully separated from the business logic. This means we can iterate on the website without touching the core 4D application, and the 4D system can be updated without breaking the front-end.
Running on an island
Ameland is a Wadden Island with seasonal tourism peaks. In summer, Kiewiet processes hundreds of bookings a week. The system needs to be reliable, fast, and operable by staff who are not software engineers. We put considerable work into the back-office UI — clear forms, sensible defaults, and a calendar view that makes availability obvious at a glance.
The result is a system that the Kiewiet team runs themselves, without calling us for routine operations. That is what good business software looks like.