Internet & Tech

Vijftien jaar over nagedacht, in 2018 getekend, nu gebouwd

25 augustus 2026

Voor Nimad BV bouw ik één centraal systeem, en de sites zijn er kanalen op. Het systeem heet Mercuris. Het houdt de waarheid over product, prijs, leverancier, offerte, order en factuur. De site rendert wat het systeem levert en stuurt aanvragen terug. Meer is het niet, en dat is precies het punt.

Sinds 21 augustus 2026 draait Promotiemiddelen.com als het eerste kanaal op dat systeem. De site haalt alles uit één feed van het systeem.

Drie zinnen dragen het hele model

  • Elk feit heeft één huis.
  • De site heeft geen eigen waarheid: hij toont wat het systeem levert.
  • Daardoor is een tweede kanaal geen tweede administratie.

Die derde zin is de reden dat ik het zo doe. Een kanaal erbij is dan een renderer erbij, geen productbeheer erbij, geen prijstabel erbij, geen tweede plek waar iemand een prijs of een drukvlak moet bijwerken.

Daar hoort een grens bij die op papier stond vóór hij in code stond. Het ordersysteem is de waarheid over product, prijs, offerte, order en factuur. Het klantsysteem is de waarheid over de klantrelatie. Zonder die grens groeien er twee halve administraties, en dan ben je terug bij af.

Waar het model vandaan komt

In 2003 begon ik Merchandise.nl: promotionele kleding, bedrukte shirts, relatiegeschenken. In 2009 won ik daarmee de ZIBB Business Challenge en werd ik uitgeroepen tot Creatiefste Ondernemer van Nederland. Rond 2020 ging dat bedrijf failliet.

Die jaren zijn de reden dat ik dit model überhaupt kon bedenken. Ik weet hoe een offerte tot stand komt. Ik weet waar een drukproef misgaat. Ik weet wat een klant twee jaar later opnieuw bestelt. Ruim vijftien jaar heb ik lopen puzzelen op de vorm die dat allemaal in één systeem zou vangen.

In 2018 tekende ik het uit en bouwde ik het als Configuro/Mercuris: één centraal order-, product- en leveranciersysteem voor alle sites van het concern. Mercuris was de centrale Laravel-backend, Configuro de configurator-frontend erop, gekoppeld aan meerdere concern-sites. Het model klopte. Die koppeling is later doodgelopen.

De opgave waar het opnieuw mee begon

Het concern had een stuk of tien losse sites, elk met eigen hosting en eigen beheer. Promotiemiddelen.com was er één van: een leadgenerator op een verouderd thema, met een dode koppeling naar het ordersysteem uit 2018. De backoffice draaide volledig op een extern pakket dat per omgeving gehuurd werd. In augustus 2026 is besloten dat dat pakket er gefaseerd uit gaat.

Ik heb het oude systeem bewust laten staan en ben opnieuw begonnen: een headless backbone áchter de bestaande sites. Elke site houdt zijn eigen front-end en kan er site voor site op over. Dat besluit ligt vast op 29 juni 2026.

Wat er nu in staat

De cijfers hieronder zijn geteld op 25 augustus 2026. De catalogus groeit terwijl er leveranciers bij komen, dus de systeemcijfers rond ik af; de cijfers van de site zelf staan vast. Het zijn bouwgetallen: ze zeggen iets over de omvang van het systeem, niet over handel.

  • ruim 30.000 producten
  • ruim 260.000 varianten
  • 52 leveranciers en 297 leverancier-categorieën
  • 834.181 inkoopstaffels
  • 21 bedrukkingstechnieken op de site, van tampondruk en lasergravure tot borduren, doming en sublimatie — elk met een eigen prijsmatrix: afmeting, staffelband, prijs per stuk, instelkosten per kleur
  • 46.438 drukvlakken
  • 13.667 van de 17.643 artikelen op de site hebben een toonbaar drukvoorbeeld
  • 17.643 artikelen live op de site, in een sitemap-index van 17.954 URL’s (311 pagina’s plus die 17.643 producten)
De bedrukkingenpagina van Promotiemiddelen.com met de technieken naast elkaar, elk met uitleg en het aantal artikelen erbij
De technieken zoals ze op de site staan: per techniek waar hij voor bedoeld is en op hoeveel artikelen hij kan.

De canonieke eenheid is de variant

Alles hangt aan de variant, herkend aan zijn EAN. Eén variant kan meerdere leveranciers-aanbiedingen dragen, dus geen enkele aanbieder is de master-catalogus. Het importcontract is vier regels: match of maak aan op EAN, bewaar het ruwe bronrecord, normaliseer naar canonieke velden, hang de aanbieding eraan. Alles vastleggen en dán mappen — nooit weggooien.

Dat was nodig omdat alle producteigenschappen op één hoop stonden. Dezelfde kleur kwam in duizenden schrijfwijzen en in vijf talen voor. Daar valt niet op te filteren. Kleur, materiaal en herkomstland zijn genormaliseerd via woordenlijsten die in het systeem de bron van waarheid zijn.

Prijs, rollen en wie beslist

Wie wat mag zien en doen ligt vast in zes rollen: admin, prijsbeheerder, verkoop, buitendienst, inkoop en finance. Vanaf fase 0 staat er een tenant_id op elke tabel, zodat een tweede merk later geen verbouwing is.

De verkoopprijzen zelf gaan ter goedkeuring naar Coen en Erwin. Die beslissing hoort niet in software. Van elke prijs ligt wel vast waar hij vandaan komt.

Omdat de prijsmotor in het systeem zit en niet in de site, komen de prijs op de productpagina en de prijs op de offerte uit dezelfde berekening en dezelfde bron. Dat is geen belofte, het is een gevolg. Op elke productpagina staat het blok “Uw prijsopbouw” open: artikel maal aantal, bedrukking per aantal kleuren, instelkosten, totaal en prijs per stuk, alles exclusief btw.

Productpagina van Promotiemiddelen.com met het blok Uw prijsopbouw: artikel maal aantal, bedrukking met aantal kleuren, instelkosten, totaal en prijs per stuk
Dezelfde berekening die straks in de offerte staat, open op de productpagina.

Wat het kanaal daarmee kan

Het drukvoorbeeld werkt zonder één fotoshoot, want het drukvlak is data. Verslepen en schalen gebeurt volledig in de browser, zonder één aanroep naar de server. Zonder JavaScript blijven positiekeuze en upload gewoon werken.

De categoriepagina’s hebben negen tellende filters: merk, kleur, prijs per stuk, materiaal, bedrukking, aantal kleuren in het logo, gewenste oplage, land van herkomst en prijsvorm. Elke keuze toont hoeveel artikelen hij oplevert, geteld met de andere filters aan maar zonder zichzelf. Keuzes die nul opleveren verdwijnen. Ook dat werkt zonder JavaScript.

Categoriepagina voor bedrukte pennen met de filterrij: merk, kleur, prijs per stuk, materiaal, bedrukking, kleuren in het logo, oplage, land van herkomst en prijsvorm
Negen filters, elk met het aantal artikelen dat de keuze oplevert.

Toegankelijkheid is gemeten, niet aangenomen: axe-core over twaalf pagina’s bij twee schermbreedtes gaf nul overtredingen. Een latere ronde over negen pagina’s gaf hetzelfde resultaat.

Meten gebeurt pas na een ja. De analytics-tag laadt alleen na toestemming, en vóór die toestemming gaat er niets naar Google. Dat is op productie gecontroleerd. De keuze staat een jaar in een cookie en is via de voettekst te herzien.

Wat er nog in aanbouw is

Ik noem alleen af wat af is. Dit is het niet, en dat staat er ook zo bij:

  • De klantomgeving die met de klant meegroeit. Herbestelbare offerteregels en eigen orderhistorie zijn gebouwd en gedraaid, op een wegwerp-database. Er is nog geen enkele login aangemaakt en niemand is uitgenodigd. Eerst moet die omgeving de lat van het huidige gehuurde pakket halen, dan gaat er één pilotklant over met het oude systeem als vangnet ernaast.
  • De keten van offerte via akkoordlink naar order, zonder overtypen. Die is één keer van begin tot eind gedraaid: verstuurde offerte, klik op de akkoordlink, order die zichzelf aanmaakte met de juiste bron en status. Dat is bouwbewijs, geen oplevering. Tot de doorloop met de testklant rond is, blijft het in aanbouw. De meetlat is minder dan vijf minuten handwerk tussen aanvraag en verzonden offerte.
  • Voorraad en levertijd. Die staan niet op de site, en dat is een keuze. De broncatalogus voert voor alle producten voorraad nul en heeft geen levertijdveld. Zonder antwoord van de leveranciers is elke leverdatum een gok.
  • Productveiligheid (GPSR). Het mechanisme staat, het register is nog leeg. Alleen leveranciersgegevens die bevestigd én compleet zijn gaan de feed in; ontbreekt de bevestiging, dan staat de eerlijke regel dat Nimad het opvraagt en met de offerte meestuurt. In de hele broncatalogus staan drie fabrikanten en nul producten met een veiligheidskenmerk — het gat zit bij de bron. Het oordeel of aan de verordening is voldaan ligt bij Nimad, niet bij mij en niet bij de software.
  • De volgende kanalen op hetzelfde systeem. De pijplijn per site is elke keer dezelfde: onder versiebeheer brengen, staging, herbouwen, redirectplan, productie, en daarna meekijken in Search Console.

De rode draad

Bouwtekening-illustratie: een centrale kluis met daaruit verbindingslijnen naar kleinere winkelvormen eromheen
Een plek waar het staat, kanalen die erop aansluiten.

De site is het zichtbare topje van een ordersysteem. Daardoor komt elke prijs, elk drukvlak en elke offerteregel uit dezelfde bron.

Dit stuk is het overzicht. De losse onderdelen krijgen elk hun eigen artikel. Wat er nog komt: een catalogus zonder eigenaar (EAN als sleutel); waarom de prijs op de productpagina dezelfde is als op de offerte; een drukvoorbeeld zonder fotoshoot; oude adressen verhuizen zonder verkeer te verliezen; een site die zonder JavaScript werkt; eerlijk zijn over wat je niet weet, over GPSR en levertijden; en wat er gebeurt nadat iemand op akkoord klikt.

Verder lezen

De volledige case staat op de Nimad-pagina: de opgave, het systeem in vijf lagen, het eerste kanaal en wat er in aanbouw is. Wat ik voor bedrijven bouw, staat op werk, en het bredere portfolio op projecten. Voor een website ga je naar Sepp Stokbroekx van Nixo Webbuilding — collega-bouwer uit de Kempen. Ik bouw de systemen erachter.

Wil je weten hoe één systeem met kanalen erop er bij jou uit zou zien? Begin bij contact.


Richard

Meer lezen

Gerelateerde berichten