Case_Study // Dpixel × Kampen CE-marked machinery

EZ Break.

The platform is not allowed to invent a number.

Back offices
3
staff · owners · dealers — one codebase
Verified torque rows
23
interpolated, never extrapolated
Tests passing
63
294 assertions · 3.7 s
3D model size
−93%
14 MB STEP → 0.89 MB GLB
// the product

Kampen builds the EZ Break 7.0, a hydraulic break-out unit that cracks drill-pipe joints on horizontal directional drilling rigs. It is CE-marked machinery, so every figure and every document the software shows is part of a safety file — not marketing copy. Dpixel built the product site, the operator torque reference, a per-serial document page behind a QR code, and three separate back offices for Kampen staff, machine owners and dealers.

// the brief

Four constraints.

constraint_01

Documents are legal artifacts

A CE declaration belongs to the unit it shipped with, so document versions are bound to serial numbers — not to the product.

constraint_02

The numbers come from Kampen

Torque figures and warranty durations come from client tables. The software may interpolate and convert units; it may never guess.

constraint_03

Three audiences, conflicting visibility

Staff see everything. Owners see their machines. Dealers file claims for machines they sold — without seeing the owner’s invoice.

constraint_04

It is sold, not browsed

No cart, no checkout. The core objects are identity and entitlement: who owns this serial, what warranty it carries, which documents they may download.

// engineering decisions

Seven calls,
explained.

Safety data

A reference table with hard bounds, not a formula

23 Kampen-verified bar → Nm rows, interpolated linearly and refused outside 10–230 bar. psi and ft·lb are exact conversions underneath, never the anchor. A test asserts every reference row is reproduced exactly.

Browser reality

Vanilla JS for the one component that must work

The calculator failed twice in the client’s browser as Livewire, then Alpine. Version three wires the slider as the page parses — no framework, no hydration. The gauge on this page uses the same approach.

Access control

Three panels, boundary in the guard — not the form

/admin, /portal and /dealer on one codebase. Dealers are refused the owner panel at the guard, their queries are scoped to their own dealership, and the claim form can’t be used to probe which serials exist.

Warranty

A policy object that refuses to compute

While a warranty policy is unconfigured the calculator throws instead of returning a number. On approval, 24 months fill from the invoice date — never overwriting dates a human set by hand.

Field access

A public per-serial page behind a QR sticker

/m/{serial} needs no login and serves the exact document versions bound to that unit — throttled to 20 requests per minute so serials can’t be enumerated.

Private files

Every download goes through a controller

Invoices, CE documents and 3D manifests live on private disks outside the web root; access is authorised per file and tested as a property, not a deployment habit.

Handover

The manual as a wiki inside the panels

18 role-tagged articles rendered inside the admin and dealer panels, with search that requires every word to match.

// the cad problem

14 MB of CAD,
in a browser.

Staff wanted to explore the machine by part. What arrived was a STEP export straight out of Inventor. No CAD tooling could be installed on the server and no production file could stay on it — so the route was npm and WebAssembly, run offline.

STAGE 01

STEP received

14 MB

AP214 · 98 products · 295 solids

STAGE 02

Converted

6.3 MB

GLB · 171k triangles · OpenCascade as WASM

STAGE 03

Optimised

0.89 MB

GLB · 103k triangles · gltf-transform + meshopt

STAGE 04

Source destroyed

0 bytes

production CAD never needed again

// 13 named parts — the real ceiling of a flattened assembly. We reported the cause instead of shipping fake granularity.

// how it was built

Three phases,
no guessing.

The brief had real gaps — warranty terms, document PDFs, the dealer list. Every unknown became configuration with an explicit refusal behaviour, tracked openly instead of guessed at.

Jul 2026 Public site, data model, admin EN and NL site (DE ready), torque calculator, public serial page and the staff panel over the full schema.
Aug 2026 Owners, CE flow, rebrand Owner claims a serial, uploads the invoice, staff approve and attach the CE document. Dealer map on Leaflet; accent moved to signal red.
Sep 2026 Dealers, 3D, warranty automation The dealer panel with claims and team accounts, the STEP → GLB pipeline and 13-part viewer, automatic warranty dates — shipped the same day as the phone call, suite green at every commit.
Laravel 12Filament 4Pest 3MySQLTailwind 4Vite 7three.jsLeafletSpatie media / activity logDompdfQR codesocct-import-js (WASM)gltf-transform + meshopt

The hardest part of software for a CE-marked machine is not what it displays. It is what it refuses to display.

// industrial product? safety-grade software.
System_Status: Optimal

Ready to
Scale?

We don't just build websites. We engineer high-performance acquisition systems that turn traffic into predictable revenue.

00:00:00 Local_Time
256-bit Encryption