B2B webshop voor werkkleding · van WooCommerce naar maatwerk

Toen doorbouwen duurder werd
dan opnieuw beginnen.

RoPa Workwear levert werkkleding aan bedrijven. Wat ze nodig hadden bestond niet kant en klaar, dus was er in de loop van de jaren van alles omheen gebouwd. Op een gegeven moment raakte elke aanpassing drie andere dingen, en werd nog een plugin erbij duurder dan het in één keer goed doen.

LIVE B2B SHOP
Homepage van RoPa Workwear met werkkleding voor bedrijven
Werkkleding voor bedrijven
circa 4.400 producten
Vergroten
Klant
RoPa Workwear
Sector
Werkkleding, zakelijk
Van
Zeven eigen WooCommerce-plugins
Naar
Next.js en Supabase
Catalogus
Circa 4.400 producten uit een feed
Resultaat
CLS 0,878 naar 0,000
Het probleem

Zeven plugins die elkaar in de weg zaten.

Wat RoPa nodig had, bestond niet kant en klaar. Dus was het er in de loop van de jaren omheen gebouwd: een plugin voor de productimport, een voor de branding, een voor het klantportaal, een voor de totaalpakketten, en zo verder tot er zeven waren. Elk stuk deed zijn werk. Samen waren ze een systeem dat niemand meer in één keer kon overzien.

Elke wijziging raakte er drie. De importer wist dingen die het portaal ook wist, de branding-plugin hing aan de filters, en wie een categorie wilde aanpassen moest op vier plekken kijken. Dat is geen kritiek op hoe het gebouwd is: elk stuk is ooit gemaakt omdat er iets moest. Maar opgeteld werd doorbouwen duurder dan opnieuw beginnen.

Wat er kant en klaar niet was, is precies wat een zakelijke klant nodig heeft. Kledingbudget per medewerker, maten die vastliggen per persoon, een aanvraag die langs de manager gaat, en een logo dat op de rug anders is dan op de borst. Dat zijn geen instellingen in een webshop, dat is een systeem.

Zeven losse plugins
Eén systeem
Vier plekken per wijziging
Eén plek
B2B eromheen gebouwd
B2B in de kern
7eigen plugins

Productimport, filters, branding, klantportaal, totaalpakketten, chatbot en AI-content. Zeven stukken die elk hun werk deden en samen een systeem vormden dat niemand meer in één keer kon overzien. Vervangen door één shop waarin dat allemaal één ding is.

Het verhaal

Van zeven losse stukken naar één systeem.

Opnieuw bouwen is zelden het goedkoopste antwoord. Hier was het dat wel, omdat elke aanpassing anders drie andere plugins raakte.

01 · Uitdaging

Zeven plugins, een trage shop en een onzichtbaar assortiment

Elke wijziging raakte iets anders. De shop was traag, en het assortiment stond niet in de HTML waar een zoekmachine het kan lezen.

02 · Aanpak

Het kledingmanagementsysteem als hart

Alles opnieuw op Next.js en Supabase, met de zakelijke klant als uitgangspunt: budgetten, medewerkers en goedkeuringen zitten in de kern, niet eromheen.

03 · Resultaat

Sneller, leesbaar en uit te leggen

Eén systeem in plaats van zeven, met het kledingbeheer in de kern. En een bouwfout in ons eigen werk die we hebben gemeten, opgelost en dichtgezet met een test.

Tech stackNext.jsReactTypeScriptSupabaseMollieResendOpenAIVercel
GeleverdB2B webshopKledingmanagementsysteemMedewerkersportaalBranding-configuratorLeveranciersfeedGoogle Shopping-feedFacturen met eigen nummerreeksAI-chatbotPerformance
Het proces

Vier stukken die de shop dragen.

Het beheer van kleding per medewerker, de personalisatie, de catalogus en de vindbaarheid.

01 · Het KMS

Kledingbudget per medewerker, per jaar

Bij een zakelijke klant bestelt niet één inkoper, maar bestelt iedereen. Daarom krijgt elke medewerker een eigen jaarbudget en een eigen omgeving. Wat binnen het budget past, bestelt hij zelf. Wat erbuiten valt, gaat als aanvraag naar de manager. Die hoeft niet meer te onthouden wie welke maat heeft, want dat staat vast per persoon.

Budget per medewerker · per jaar, met wat er is besteed en wat er over is
Maten vastgelegd · shirt, broek, schoen en jas, per persoon
Goedkeuringen · een aanvraag gaat naar de manager, niet naar de mail
KMS
Kledingbudget per medewerker per jaar in het kledingmanagementsysteem
Budget per medewerker
toegekend, besteed, resterend
Vergroten
02 · De branding

Bedrukken of borduren, per locatie

Een jas krijgt het grote logo op de rug en het kleine op de borst. Dat zijn twee bestanden, twee technieken en twee prijzen, op één kledingstuk. De configurator laat je per locatie kiezen uit de logo's die het bedrijf al heeft aangeleverd, en rekent de prijs meteen mee. Wat er geborduurd wordt, krijgt de klant eerst als digitaal voorbeeld te zien.

Per locatie · borst, rug of mouw, elk met een eigen logo
Eigen logobibliotheek · één keer aanleveren, daarna herbruikbaar
Digitaal voorbeeld · de klant keurt goed of vraagt een aanpassing
Prijs meteen zichtbaar · inclusief de eenmalige borduurkaart
PERSONALISEREN
Productpagina met de branding-configurator voor bedrukken en borduren
Branding-configurator
ander logo per locatie
Vergroten
Uit de leveranciersfeed

Circa 4.400 actieve producten, elke nacht bijgewerkt. Een feed levert data, geen winkel; die indeling moest er nog omheen.

Restbak accessoires644123
Ondergoed0103
Signalisatiekleding0364
444 producten hernoemd
Ze heetten allemaal “Jobman Jobman - 9291 Belt”, omdat de feed de merknaam nog een keer voor de titel plakte.
03 · De catalogus

4.400 producten die kloppen

De catalogus komt uit de leveranciersfeed en wordt automatisch bijgewerkt. Maar een feed levert data, geen winkel. Er zaten 138 capuchontruien bij de sweaters terwijl de hoodie-categorie op 26 bleef steken, en de restbak accessoires zat op 644 producten. Dat is niet met een filter op te lossen, dat is indelen.

Automatische feed · nieuwe producten, prijzen en beelden komen vanzelf binnen
Eigen indeling · bovenop de feed, zodat een categorie klopt
Twee ingangen live · per categorie en per merk, beroepen staan klaar in het beheer
15.989 afbeeldingen · omgezet naar WebP en op eigen opslag gezet
04 · Gevonden worden

De fout die we in ons eigen werk vonden

Dit was onze eigen fout. De productlijst zat achter een Suspense-grens met een lege fallback, dus de statische pagina bevatte 936 KB aan productdata en geen enkele link. Google rendert JavaScript en kwam er uiteindelijk bij, maar de crawlers van ChatGPT, Claude en Perplexity doen dat niet en zagen het assortiment nooit. De eerste 24 producten worden nu serverside gerenderd en de paginatie is een gewone link. De meting staat in een script dat faalt zodra een lijstpagina onder de 20 productlinks zakt.

24 producten serverside · zichtbaar in de HTML, niet alleen in de data
Paginatie als link · te volgen door een crawler, ook zonder JavaScript
Oude adressen · geven een 410, dus ze verdwijnen netjes uit de index
Meting vastgelegd · een script slaat alarm als het opnieuw misgaat
Gemeten in Search Console
De schade, merkpagina's
mediaan positie 34,89.856 vertoningen0 klikken
Terwijl de teksten op die pagina's al volledig gevuld waren.
Hele site, de drie maanden vóór de fix
72.846vertoningen191klikken
Een klikpercentage van 0,26 procent. Dat is laag, en dat is precies wat je verwacht als het assortiment niet in de HTML staat.

De fix staat live sinds 18 augustus 2026. Wat hij oplevert, weten we pas als er genoeg maanden overheen zijn. Daarom staat hier de diagnose en nog geen resultaat: dit zijn de cijfers van vóór de ingreep, niet erna.

De meting

Wat we in ons eigen werk vonden.

Een nieuwe shop is niet automatisch een snelle shop. Dit is wat de eerste versie deed en wat een dag meten en bijsturen opleverde.

53
Voor de sprint
78
Erna, koude cache
98
Erna, warme cache
0 t/m 4950 t/m 8990 t/m 100
Productpagina51 naar 74
CLS0,878 naar 0,000
LCP5,9s naar 2,5s
Afbeeldingen15.989 naar WebP

Alle metingen zijn van 28 mei 2026 op de nieuwe shop, mobiel, en gaan over onze eigen performance-sprint van die dag. Van de oude WooCommerce-shop bestaat geen Lighthouse-meting, dus we zetten er ook geen naast. De productpagina staat op 74 en dus niet in het groen; die moet meer doen dan de homepage.

De eerste versie van de nieuwe shop laadde de lettertypes te zwaar, hield de chatwidget en de vergelijkbalk in de hoofdbundel en reserveerde geen ruimte voor de beelden. Dat laatste zie je terug in een CLS van 0,878: de pagina sprong tijdens het laden onder je vinger weg.

Een dag bijsturen loste dat op. De widgets werden apart geladen, twee lettertypes gingen eruit en de beeldruimte wordt nu vooraf vastgelegd. CLS staat op 0,000 en de grootste afbeelding is er in 2,5 seconden.

Waarom je dit hier leest

Dit had niemand hoeven weten. We zetten het erbij omdat een case zonder misstappen niet bestaat, en omdat de vraag die je aan een bureau wil stellen niet is of het fout gaat, maar of het gemeten en opgelost wordt.

Zes schermen

Van de winkel tot het portaal.

De storefront, het kledingmanagementsysteem en het beheerscherm waar de klant op de hoogte wordt gehouden.

HOMEPAGE
Homepage van RoPa Workwear met werkkleding voor bedrijven
Werkkleding voor bedrijven
circa 4.400 producten
Vergroten
01 / 06

Homepage

Werkkleding per categorie en per merk, met de zakelijke ingang meteen in beeld.

De hele shop

Van etalage tot medewerkersportaal.

Twaalf schermen uit de live shop, het kledingbeheer en de backoffice. Klik er een aan om hem groot te bekijken.

Impact & resultaten

Wat het opleverde.

Een snellere shop, een assortiment dat leesbaar is voor zoekmachines en een systeem dat een opvolger kan overnemen.

0,00

De pagina springt niet meer

CLS ging van 0,878 naar 0,000 en LCP van 5,9 naar 2,5 seconden. Op de homepage tilde onze performance-sprint Lighthouse van 53 naar 78 bij een koude cache, en 98 zodra die warm is. De productpagina staat op 74, daar ligt nog werk.

24

De producten staan nu in de HTML

Onze eigen eerste versie stuurde 936 KB naar de browser zonder één product als link in de HTML. Nu renderen categoriepagina's de eerste 24 producten serverside en is de paginatie een echte link. Een script slaat alarm als het terugkomt.

1.027

De architectuur staat op papier

Het architectuurdocument telt 1.027 regels en legt niet alleen vast wat er is gebouwd, maar ook wat er is afgewezen en waarom. Iemand anders kan het systeem overnemen zonder dat wij ernaast hoeven te zitten.

Klaar voor jouw next win?

Draait jouw shop ook op losse plugins?

Soms is opnieuw bouwen goedkoper dan nog een plugin erbij. We kijken eerst wat je hebt, en zeggen het ook als je beter kunt blijven waar je zit. Bekijk wat we doen met webshops.