CASES

The work, with the names attached.

No mood boards and no "elevated brand experience". Which store it is, what we found, and what we do about it. Where there are numbers, they were measured.

Filter cases

DEVELOPMENT · CONSULTANCY

BMN Bouwmaterialen: three online stores and an ordering app on one catalogue

For BMN we work on the B2B stores of BMN, Van Keulen and BMN IJzerwaren, and on BMN Connect, the ordering app used on the building site. Everything runs on one Adobe Commerce installation with one catalogue of almost 200,000 products, and Business Central as the ERP. Building materials are one of the hardest categories there is: every customer has its own prices and contract items, and units and packaging differ from product to product.

  • A custom Akeneo import, because the standard connector could no longer keep up: it spends five minutes per product family even when only a single line has changed, and with 1,600 families and up to 130,000 changed products a day every run took 34 to 120 hours. Our sync writes only what actually differs, was shown to match the connector value for value, and loads the full catalogue in an hour and a half. An import that fails or stalls raises an alarm.
  • Real-time customer pricing from Business Central for some 90,000 customer companies, each with its own agreements. A cache layer that knows, per customer, exactly what the store may show, and an integration that never lets a slow or unreachable ERP drag the store down with it.
  • The BMN Partner API: procurement platforms fetch their customers' negotiated prices in real time and hand orders straight into the store. Every partner gets its own random key per customer company, so no customer IDs or email addresses appear in the contract, and no partner can request another partner's prices. Alongside it, punchout (OCI) for buyers ordering from inside their own system.
  • Two frontends on one backend: a React storefront on Adobe PWA Studio for the stores and a Nuxt app for Connect. All business logic sits behind GraphQL rather than in the frontend, so price, assortment and units follow exactly the same rules in both channels.
  • Not just building: refinement and estimates for the backlog, code review on every pull request, and a CI pipeline with static analysis and tests before anything reaches acceptance.
The bmn.nl homepage: product-group navigation, search bar and the become-a-customer block
Adobe Commerce
PLATFORM
Business Central
ERP
196,000
PRODUCTS
90,000
CUSTOMER COMPANIES

NEW BUILD · FULL STACK

FarWay Stables: a stable with the engineering of an online store

For FarWay Stables in Nistelrode, home to sport horses, Quarter Horses and American Miniature Horses, we built the site from the ground up. On the surface it is a showroom with big photos and video. Underneath runs what you would expect from an online store: a catalogue in two languages on two domains, a custom media pipeline, uploads of hundreds of megabytes through the contact form, and a feed that puts every horse on Marktplaats and 2dehands automatically and takes it down the moment it is sold. All on Cloudflare Workers, with no server to manage.

  • An integration with iCAS, Adevinta's feed API behind Marktplaats and 2dehands. Every horse goes out as an ad, with the attributes the category expects and a budget that survives the import rules. Sold means offline, without anyone touching an ad. The first import placed zero ads; every lesson from it is now a test.
  • Uploads of hundreds of megabytes through the contact form, on a platform that refuses any request over 100 MB and gives a Worker 128 MB of memory. The browser cuts each file into 8 MiB chunks, the server stitches them back together in a private R2 bucket, and the email carries links instead of attachments.
  • Photos and video go straight from the phone to the site: drop a horse's camera exports into a folder, HEIC, MOV, any filenames, and one command turns them into everything the page needs. Photos are converted from Display P3 to sRGB, get their rotation baked in and a consistent grade, and come out in five WebP sizes. Clips become AV1 with an H.264 version for older Safari and a poster frame. GPS data is stripped on purpose, so the location of the paddock never ends up online.
  • Video in 4K quality through R2 and a dedicated media domain. Cloudflare refuses any static file over 25 MiB, and inside that ceiling a trotting horse's legs turned into a blur.
  • Findable for Google and for AI assistants: two domains with hreflang, structured data per horse, /llms.txt and IndexNow after every deploy. Turnstile against spam and Brevo for email.
The horses for sale page on farway-stables.nl, with filters per discipline and large photos of each horse
Nuxt · Workers
STACK
R2 · D1
STORAGE
NL / EN
LANGUAGES
Camera → web
MEDIA

AI · HOW WE WORK

AI in every engagement, not just in the proposal

AI is not a separate product for us, it is how we work. Agents work for every client, from a store on a single server to an Adobe Commerce platform with three storefronts and an ERP behind it. They read logs, review code, work out what a ticket is really about and build on their own where they can. Whatever we set up for a client, we have run in production ourselves first.

Every client
USED FOR
Every PR
CODE REVIEW
Daily
ROUTINES
Claude Code
STACK

THE WORK

  • Incident analysis: an agent reads slow logs, server metrics and application logs alongside the code. Blank pages, slow searches and nightly outages can often be traced to a single query or a single line of config within the hour.
  • Code review on every pull request, ours and the client team's, against the project's own coding standards. On the largest team that is a pass every half hour across four repositories, which also moves clean work on to test.
  • Ticket preparation and estimation: tickets are investigated in the real code and on production before the team discusses them, with a reasoned estimate based on hundreds of previously estimated tickets.
  • Autonomous development: a ticket with the right label gets built on its own, from branch and code to checks, pull requests and test scenario. The first was ready within eleven minutes and passed QA and review first time.
  • Takeovers and upgrades mapped faster: modules compared against their originals, changelogs and patches read, and one set of AI guidelines per repository, with guardrails on what an agent may push and merge.

DEVELOPMENT · TRACKING

HV Equestrian: four brands, one installation

HV Polo, Euro-Star, HV Society and Imperial Riding run together on a single Magento installation with a Hyvä frontend. Wholesale and retail side by side, a separate website and catalogue per brand, but one codebase to maintain and one place to patch. We took over development of that existing build and sorted out the tracking and quality gates.

4
BRANDS
Hyvä
FRONTEND
Multistore
SETUP
GA4 · Meta CAPI
TRACKING

THE WORK

  • Meta Pixel with a server-side Conversions API made to work on Hyvä, advanced matching included, replacing an extension that no longer did.
  • GA4 purchase events that actually arrive: the Hyvä Checkout thank-you page sat in the full-page cache, so purchases went unreported.
  • Sale prices fixed on product cards and product pages, with an override for a bug in Magento's special-price resolver, and the theme stripped of unused stylesheets and an entire unused parent theme.
  • Checkout and trust: Apple Pay and Klarna logos on the payment methods, a Trusted Shops badge, and a REST API that no longer accepts unwanted uploads.
  • GrumPHP, PHP-CS-Fixer and PHPMD as git hooks, dependency updates and core fixes through composer-patches, and a post-deploy script so a release needs no manual steps.

TAKEOVER · MODERNISATION

Boeties: a codebase you can read again

Taken over from another agency in early 2026. Projects like this rarely start with new features: first the code has to become predictable again and the store safe to update. After that comes the detective work: why pages are slow and links break, usually in extensions nobody had looked at in years. Boeties now runs on current Magento and PHP versions, every security patch goes out shortly after release, and a pull request only passes when it is clean.

Magento 2
PLATFORM
−85%
CATEGORY QUERIES
Deployer · CI
DEPLOYS
Takeover
TYPE

THE WORK

  • Category pages that ran 8,380 database queries now run 1,272. A stock-label extension hooked into every template block, parsed the finished product grid back into HTML and loaded each product again, checking 36 attributes per product. We moved the label into the listing template itself, kept it for the 254 products that use it, and fixed a bug on the way that called sold-out products "in stock".
  • Filters on brand pages did nothing, and every click added another piece to the address until it read /merken/<brand>/rond/rond/vierkant/punt. The cause was URL handling that had been switched off in the code we took over. It is back, and the brand router is patched so a broken address returns a 404 instead of trapping the visitor.
  • Sixteen Mageplaza modules moved from a copy in app/code back to Composer. A plain diff showed some 270 changed files, nearly all of them reformatting, so we compared the code token by token: two changes were real. The same reformatting had broken one admin script, which left every admin form spinning forever without a single error in any log.
  • From manual deploys to Bitbucket Pipelines with Deployer: staging, acceptance and production from the same pipeline, with three releases to roll back to. Magento and PHP on current versions, and the dead extensions removed.
  • Adobe security patches shortly after each release, plus our own mitigation for StyleSmuggler before the patch existed.
  • Tracking and discoverability: GA4 through Tag Manager, Meta Conversions API, and structured data with the right tax-inclusive price for Google Shopping, for configurable, grouped and bundle products alike.

HOSTING · PERFORMANCE

45kmParts: parts, two VAT regimes and a cache storm

Not every store is Magento. This one runs on PrestaShop, on a server we manage, with a catalogue of over 11,000 parts in which used items carry no VAT and new ones carry 21%, side by side. When this store "goes down" it is almost never down: Apache and MySQL are up, but the pages come back empty. We enjoy that kind of outage.

PrestaShop
PLATFORM
Cloudflare
EDGE
11,000+
CATALOGUE
Hosting & care
TYPE

THE WORK

  • Search ran a query over the entire category link table, half a million rows, before it looked at a single keyword. An override on the search class and instant search switched off: the store and its admin are fast again.
  • Empty pages with an HTTP 200: PrestaShop's template cache ran a DELETE with LIKE over a 77,000-row table on every product listing, and InnoDB was reading 262,000 rows a second. Found in the slow log, fixed at the source rather than with a restart.
  • A PHP-FPM pool of its own for the admin, so a traffic spike on the storefront no longer drags the back office down with it.
  • Cloudflare at the edge: abuse blocked through the API, because behind a proxy a firewall rule on the server address blocks nothing. And explicit cache headers, so Safari does not keep an old product page forever.
  • Two VAT regimes in one catalogue: used parts under the margin scheme, new parts at 21%, and a product page that actually shows the right label.

NEW BUILD · DROPSHIPPING

123orgasme: an online store without a warehouse

An online store for adult products with no stock of its own: everything comes from the wholesaler EDC, which also ships it. Since late 2020 we have built, hosted and maintained the Magento 2 store. The hard part is the integration. Range, prices and stock have to match a supplier you do not control, and every order has to reach them without manual work and come back with tracking.

Magento 2
PLATFORM
EDC
SUPPLIER
2020
SINCE
Managed by us
HOSTING

THE WORK

  • A custom EDC import: products, prices and stock from the wholesaler's XML feed, in batches rather than product by product, with a report on what the feed contained. An item that drops out of the feed goes offline and comes back by itself as soon as stock returns, even when it sits under a configurable parent product.
  • Orders go to EDC automatically the moment they are placed. When EDC ships, the status comes back through a webhook: the shipment is created with tracking, and a partial delivery triggers a notification.
  • Stock through Magento's Multi-Source Inventory, with a repair route for the inconsistencies MSI leaves behind after large imports, and products matched on EAN alongside the supplier's SKU.
  • Hosting managed by us behind Cloudflare, with Varnish, search on OpenSearch and fail2ban rules that block a scanner at account level: caught on this store means blocked on all our sites.
  • Deployments through Deployer and Bitbucket Pipelines with a SonarCloud scan, the upgrade to Magento 2.4.8 and PHP 8.3, and affiliate tracking through Tradetracker.

NEW BUILD · STORYBLOK

Brommobiel Boxtel: an inventory the dealer keeps up to date himself

A dealer in new and used microcars that has its own workshop and also buys cars in. The site is a Nuxt application on Cloudflare Workers with the inventory in Storyblok: the dealer enters a car with price, year, mileage, warranty and, for electric models, the battery type, and the site does the rest. In six languages, because customers come from Germany, Poland and Spain as well. The company changed its name along the way; the site moved with it, with the old domains redirected cleanly.

Nuxt · Vue
FRONTEND
Storyblok
CONTENT
Cloudflare
HOSTING
6
LANGUAGES

THE WORK

  • A content model for cars the dealer maintains without a developer: a sold status with a ribbon over the photo, warranty, and a battery type that only appears when the fuel is electric.
  • Six languages without six times the work: fields that need no translation (price, year, mileage) live once in Storyblok, the copy around them comes from i18n.
  • Photos through Storyblok's image service, watermarked and sized for each placement, with a lightbox that works on a phone too.
  • A rebrand midway through: from Mobiliteitscenter Perry Verbruggen to Brommobiel Boxtel, including new domains, redirects from the old ones and a sitemap that brought the search engines along with it.
  • LCP work with Lighthouse as the acceptance test, contact and newsletter forms handled server-side, and a WhatsApp button because microcar buyers call and message, they do not email.

TAKEOVER · MIGRATION

Vetus: a dealer portal taken over and moved

Vetus makes boat systems and sells through dealers worldwide. The dealer portal runs on a Magento backend served over GraphQL, with Business Central as the ERP for prices, stock and orders. We took the codebase over from the previous agency in 2024: brought up to date and cleaned up first, then moved to a new server, and in our care ever since.

Magento 2
PLATFORM
Business Central
ERP
Hypernode
HOSTING
2024
SINCE

THE WORK

  • Magento and PHP on current versions, and the errors and warnings in every custom module from the previous agency cleared before anything new was added.
  • A move to a new production server with a full rehearsal first: sync scripts for database and media, a step-by-step migration plan, and a production database whose duplicate URL rewrites had to be deduplicated first, or the new server would never have started.
  • From manual uploads to a deploy pipeline from Bitbucket, and error monitoring with Flare so a dealer's error reaches us before the dealer calls.
  • The things that bring a dealer portal to a halt: logins that locked after a single failed attempt, add-to-cart with special characters in names, a stuck index, timeouts under load and a SOAP integration that stopped loading order history.
  • Search replaced with Algolia, with the category index switched off because on this catalogue it broke more than it delivered.

REPLATFORM · LEAD DEVELOPMENT

ChromeBurner: from small online store to multi-million business

An international online store for motorcycle clothing and accessories, running on a single old server maintained by one person. As lead developer we were responsible for everything IT, and we led the team. In those years ChromeBurner grew from a small online store into a business with revenue in the millions, and the platform grew with it.

Magento 1 → 2
MIGRATION
Lead developer
ROLE
Zero downtime
DEPLOYS
Millions
REVENUE

THE WORK

  • From Magento 1 to Magento 2: a full replatform of an international store that kept selling throughout.
  • From one server with one administrator to a renowned hosting company, so the store no longer depended on the knowledge and availability of a single person.
  • Zero-downtime deployments: a release became routine instead of an evening job with the store in maintenance mode.
  • A way of working where there was none: tickets in Jira, all code in Git on Bitbucket, and with that, for the first time, a clear view of what was being built and why.
  • Final responsibility for all IT, from hosting and integrations to the developers working on it, so the platform could carry the growth to multi-million revenue.

REPLATFORM · ONGOING DEVELOPMENT

Gazelle: a bike brand from Adobe Commerce Cloud to Hypernode

From late 2022 to 2025 we worked as an external developer, contracted by Pon, inside the team behind Gazelle's B2C stores: over a thousand commits across more than 120 tickets, in a codebase with 27,000 commits of history. A bike is not an ordinary product. Every model comes in frame sizes, batteries, brakes and wheel sizes, each combination with its own price, sold in countries that use kilometres and countries that use miles, and through leasing too. And underneath all that, we moved the platform itself.

Magento 2
PLATFORM
Hypernode
HOSTING
Storyblok
CMS
1,000+
COMMITS

THE WORK

  • From Adobe Commerce Cloud to Magento Open Source on Hypernode: the Enterprise modules out, the data converted, and a new deployment pipeline with Deployer and automatic builds, a database sync for staging, monitoring and a Slack notification on every release.
  • Storyblok inside Magento: a custom extension that imports stories from Storyblok, creates URL rewrites for them and renders the content in Magento pages and static blocks. Marketing builds pages without a developer, and the store stays one site.
  • The bike configurator: batteries, frame sizes, brakes and wheel sizes as choices, with an extra price per option and the cheapest battery as the starting point. Delivered through an API to the separate product page frontend, with a per-product cache flush from the backend.
  • The PIM import: products, prices per store and stock including batteries, with attribute mapping, price validation and metric alongside imperial, so a British customer sees their e-bike's range in miles.
  • Leasing as a full sales channel: Lease a Bike as a payment method, a separate stock status with delivery times for lease, and the lowest lease price calculated across all variants. Plus the move to PHP 8.1 and the upgrade to Magento 2.4.7.

HOSTING · DEVOPS

Acknowledge: a Kubernetes stack built for Magento

A B2B store for IT hardware on Magento 2, built by another agency. For Acknowledge we designed and built a custom Kubernetes stack, tailored to hosting Magento.

Magento 2
PLATFORM
Kubernetes
STACK
Hosting
TYPE
2023
YEAR

HOSTING · MIGRATION

Brick Fever: a store that fell over every evening at eight

A Lego parts store on WooCommerce, connected to the BrickOwl, BrickLink and BrickScout marketplaces and to the till in the shop. The request was small and concrete: mail landing in spam, and a site that went down every evening around eight on shared hosting where nobody could see why. The answer was a move.

WooCommerce
PLATFORM
Cloudflare
EDGE
3
MARKETPLACES
2023
YEAR

THE WORK

  • Mail that arrives: DKIM on the domain, sending through Brevo instead of the web server, and the sending limit that was holding back order confirmations tracked down.
  • From shared hosting to a server of our own, with Cloudflare in front. After that there was something to measure, and the evening problem was gone.
  • Clean-up: plugins nobody used any more disabled and removed, the XML feed to the marketplaces repaired, and Search Console connected.

HOSTING · MONITORING

The stores nobody sees, because nothing goes wrong

Most of our work is not a launch. It is the stores that have been running for years: security patches on the day they ship, Magento upgrades without downtime, search indexes that survive an OpenSearch update, and monitoring that wakes us instead of the client. That work never produces a screenshot, and it is what most of our clients' revenue depends on.

Monthly
PATCHES
24/7
MONITORING
To us
ESCALATION

Will your store be the next case?