Terug naar alle case studies

Software

Everyplants B.V. - An internal operations tool that actually gets used

Incident management, returns, and cost management within 1 application

Klant:EveryPlants B.V.
SoftwareDevelopmentDashboarding

Not every project needs AI. Sometimes the problem is simpler: information is everywhere except in one place. That was the case for Green Bubble and EveryPlants. Their customer service worked with a mix of Picqer, Shopify, spreadsheets, and email. It worked, until it didn't.

Everyplants B.V. - An internal operations tool that actually gets used

Impact

Resultaten

3

systems centralized

0

incidents 'lost'

100%

cost insight

Aanpak

Uitdaging en oplossing

De Uitdaging

  1. Incidents disappeared – Customer reports came in via email, phone, chat. Some were picked up, others forgotten. No one had an overview
  2. Returns in spreadsheets – A Google Sheet with returns that was sometimes updated, sometimes not. Duplicate entries, missing data, unclear status
  3. Three systems, zero overview – Order info in Picqer, prices in Shopify, costs somewhere else. Customer service constantly switched between tabs
  4. Manual cost calculation – For EveryPlants orders, costs had to be passed on. That was done with Excel and a lot of manual work
  5. Discounts were guesswork – How much discount do you give for a damaged plant? Everyone did it differently

Onze Oplossing

  1. One place for incidents – Form to create incidents, linked to the order, with photos attached. Search, filter, nothing gets lost anymore
  2. Return system with duplicate check – Three layers of protection against duplicate returns. Sounds like overkill, but it happened constantly
  3. Order lookup that shows everything – Search an order number, see everything: customer details, products, prices, shipping, and all linked incidents and returns
  4. Automatic cost calculation – Integration with Everspring pulls in the costs. No more manually figuring out what each plant cost
  5. Consistent discounts – Discount is calculated based on Shopify prices. Everyone uses the same logic

The situation

Green Bubble & Everyplants sell plants. Lots of plants. And with plants, sometimes something goes wrong: damaged during transport, the wrong plant delivered, or just an unhappy customer. That's normal.

What's not normal: tracking those reports in email threads and spreadsheets. With a handful of reports per day, that works. With dozens per day, it doesn't anymore.

EveryPlants – their B2B division – had an extra challenge: costs had to be passed on. Plant X costs Y euros, packaging Z euros, shipping something else again. Calculated manually in Excel. Every week, all over again.

They didn't need a tool that could do everything. They needed a tool that did a few things well.

What we built

Incident management

The core is simple: someone from customer service creates an incident, links it to an order, chooses a type (damaged, wrong item delivered, not received), uploads photos, and selects a resolution.

Under the hood, more happens. We fetch the original Shopify prices for discount calculations. We link to Picqer for order data. Everything is stored with timestamps and who did what.

Archiving is a soft delete. Nothing is actually thrown away – important for when questions come up later about a specific case.

Returns management

Returns needed their own flow. A return isn't the same as an incident: something physically comes back, inventory has to be updated.

The biggest problem here was duplicate returns. Someone creates a return, accidentally clicks twice, or a colleague creates the same return because they didn't know it already existed.

Our solution: three layers of protection. A lock on the client, an idempotency key in the HTTP request, and a database constraint that blocks duplicate entries within 60 seconds. Sounds technical, but it solves a real problem.

Order lookup

This is probably the most used feature. Type an order number, see everything: customer details, products with prices, shipping status with tracking link, and all incidents and returns linked to this order.

One screen instead of three systems.

EveryPlants costs

This was the hardest one. Every order has costs: the plant itself, the pot, packaging, handling, pick & pack, shipping. We had to pull those from Everspring (their cost system), show them in a clear table, and make them exportable to Excel.

We group by their order reference. The main row shows the order, sub-rows show incidents and returns that have costs. Per line, you can indicate whether something should be passed on or not.

At the end of the week: one button, Excel export, ready for accounting.

Carrier issues

If a package arrives damaged, you want to be able to file a claim with the carrier. But then you need evidence, and you need to track what you've communicated.

A separate module for carrier issues. Linked to the original incident, with photos, notes, and status (in progress, emailed to carrier, completed). Also exportable.

The integrations

This project revolved around integrations. We connected with:

Picqer – Their warehouse management system. This is where orders come from, and where inventory goes back to on returns. We sync order data and can add tags.

Shopify – For the original sale prices. If someone gets a 40% discount on a damaged plant, we need to know what the plant cost.

Everspring – (among other things) the B2B cost system. This is where we get the breakdown from: what the plant costs, the packaging, the shipping. Automatically, with every new incident.

Every integration had its own challenges. Rate limits with Picqer. Authentication tokens expiring with Everspring. But that's the job: making sure it keeps running, even when external systems behave unexpectedly.

What we learned

Internal tools are different – No marketing, no onboarding flow, no trial period. Users are colleagues who have to use the system. They'll tell you right away what doesn't work.

Duplicate prevention is serious – We wouldn't have come up with those three layers if the problem wasn't real. Duplicate returns cost money.

Excel export isn't sexy, but it's essential – Every stakeholder wants the data in Excel. Always. Build it in early.

Permission structure is more complex than you think – Admin vs. member sounds simple. But what if some members are allowed to see incidents but not costs? Page-level permissions were the solution.

How it runs now

The tool is used daily by the customer service team. Incidents no longer get lost. Returns have a clear status. Costs are automatically calculated and exported.

It's not revolutionary software. It's practical software that solves a specific problem well. And that's exactly what it needed to be.

Stack

Gebruikte technologieën

Next.jsSupabasePicqer APIShopify APIEverspring APITypescriptTailwind CSS
“Finally, we know where we stand. Before, it was guesswork how many returns and how much damage we had — now I just see it. And that Excel export for EveryPlants costs saves me hours per week.”

Eric Mulder

Owner

Volgende stap

Klaar om jouw processen te automatiseren?

Ontdek hoe wij ook jouw bedrijf kunnen helpen met slimme automatiseringen die tijd en geld besparen.