Our work

Bastiano: a custom order-reporting tool, self-hosted and rebuilt

We took over a bespoke tool from its external maker, rebuilt it on our own Cloudflare infrastructure and expanded it into exactly what the kitchen and drivers need every day. Zero dependency, ready for high volume.

Bastiano had a handy order-reporting tool, but running and extending it depended entirely on the external maker. The question: how do we make that tool fully Bastiano's, and better at the same time?

Challenge

The existing tool ran on an outdated stack and depended entirely on its original maker. Every change or outage hinged on someone else. And the daily workflow, prepping in the kitchen, delivering by van and customers who pick up, was missing crucial information in the right place.

Approach

We took the tool over entirely and rebuilt it on our own Cloudflare infrastructure with our own authentication, so Bastiano no longer depends on anyone. Then a fully new version on a modern stack, extended with exactly what the team needs every day, in close consultation with the owner. The latest addition: a driver module that plans the routes and works out the mileage allowance by itself.

From external dependency to owned infrastructure

The tool now runs entirely on our own Cloudflare infrastructure: a Worker for the logic, Pages for the app and our own OAuth for the Shopify connection. No more vendor lock-in, no more waiting until someone else has time. Bastiano owns the full chain, and the order data stays safely behind Shopify authentication.

A day overview the kitchen and the driver grasp instantly

The main screen shows at a glance what needs to be ready that day, with quick buttons for today, tomorrow, the day after and yesterday. The prep list bundles all products with the right quantities. The delivery cards show customer name, address, phone and the delivery time, sorted by time and ready for the route. The whole app is styled in Bastiano's own colours, and a built-in manual keeps the team self-reliant.

Errors out, speed in

Order notes like "no onion" or an allergy appear prominently next to the right order, so the kitchen misses nothing. A warning pops up the moment an order has no delivery date or type, so no order slips through unnoticed. On top of that: section navigation to focus on one part at a time (all, prep, deliveries or pickups), deliveries you sort by delivery time or postcode for the route, the phone number on pickups too so you can call a customer who does not show up, sortable columns, a real Excel export with multiple sheets and a kitchen-friendly print layout where you choose which lists go on paper, each on its own page.

From order list to route planning per driver

Bastiano delivers with several drivers. Handing everyone the same list of all deliveries led to mistakes, and the mileage allowance was manual work every month: looking up distances, recounting routes and working out what each driver was owed. So ClickForest built a driver module on top of the order reporting for caterer Bastiano in Bonheiden, with two new tabs in the app: Drivers and Reporting.

In the Drivers tab, Bastiano manages its own team. You pick each driver's home address from a list that appears as you type, so the location is fixed down to the house number. That matters, because every route ends at the driver's home. Each day you mark who is driving, usually two to four people, or copy the team from a previous day.

One click then splits the deliveries. The app divides them into contiguous areas around the premises, takes into account where each driver lives and then searches for the split with the fewest kilometres in total, with at most one delivery difference between drivers. You can always adjust.

For each driver the full route appears, from the premises past the assigned deliveries to the home address, in the order with the fewest kilometres. You see the distance, the allowance and roughly how long the route takes, and every leg is listed separately so you can check where the kilometres come from. Move a delivery and the routes involved are recalculated automatically. Each driver gets their own route sheet with name, date and the addresses in driving order.

There is more maths behind the split and the routes than you might expect. The app looks up delivery addresses in the Flemish address register, which knows every house number in Flanders, and first cleans up messy input such as a doubled house number or a box number. If it still cannot find a house number, the card says "approximate address". Across 60 simulated days the split found the exact shortest solution in 50 cases, and on average it was 0.36% above that optimum. A simple split into pie slices around the premises came in almost 17% above it. We also rechecked a real delivery day with five deliveries using a second, independent route planner: the chosen order turned out to be the shortest of the 120 possible.

A mileage allowance that works itself out

The Reporting tab adds everything up over a period of your choice, from one week to a full year. Per driver you see the days, the number of deliveries, the kilometres, the time and the allowance, with the detail per day and a subtotal per month. Bastiano sets the mileage rate and the time per delivery itself. Change either one and everything is recalculated, including past weeks.

  • Weekly email: an extra request from the owner. Every Monday at 6 am the report for the past week lands in the inbox, with an Excel file attached.
  • Excel any time: sheets per driver, per month and per day. Anyone who needs the report in between sends it from the app to an address of their choice.
  • No day slips through: if a day has deliveries but no split, that day shows up as a yellow warning at the top of the report.
  • Late changes count: if a delivery becomes a pickup after all or gets cancelled, the report recalculates that day.

The kilometres are a calculation of the shortest route by car over real roads, done the same way for every driver. That makes the allowance objective and easy for anyone to verify.

One tool for two stores

Bastiano has two Shopify stores: a B2B store and the busy B2C store. One shared codebase serves them both. The differences between the stores live in the data, not in the code, so an improvement applies to both at once.

Under the hood

We swapped the outdated base for a modern stack with Vite and React 18: noticeably lighter, faster and much easier to extend. The data comes through Shopify's modern GraphQL Admin API with a server-side filter, ready for high volume. And the app is secured with Shopify session tokens: only a genuine, fresh request from the store itself reaches the order data.

The driver module stores the team and the daily totals in Cloudflare D1, and every night a backup of all driver data goes to R2. The weekly email runs as a scheduled task on the Worker, which builds the Excel file itself and sends it through Resend.

Zero dependency

Fully owned infrastructure and authentication. No vendor lock-in, Bastiano owns the whole chain.

Daily time savings

Delivery-ready lists and routes per driver, with address, time, notes and kilometres. The monthly number-crunching for the allowance disappears.

Ready for high volume

Modern stack and GraphQL, live on both the quiet B2B and the busy B2C store.

Tools used

Cloudflare Workers, Pages, KV, D1 and R2
Shopify Admin API (GraphQL) and App Bridge
Vite and React 18
Routes and driving times via OpenRouteService
Addresses via the Flemish address register
Weekly email with Excel attachment via Resend
Own OAuth and session-token security
Claude Code (building with AI)
Your project as the next case?

We work with Belgian SMEs that want to grow.

Through Shopify, performance marketing and AI.

Client reviews

What clients experience

Why entrepreneurs love working with ClickForest.

Excellent on Google 5.0 ★★★★★ based on 25 reviews