ToolsUniverse

Over deze demo

Een gereedschapswinkel native gebouwd op Crystallize

Tools Universe is een demo voor de gereedschapshandel in Scandinavië en de Benelux: zes fabrikanten, kopen of huren, zakelijke klanten en consumenten, vier talen. Alles is gewoon Crystallize: de webwinkel leest de Discovery API en de Shop API en verder niets.

416

producten van zes fabrikanten, 611 uitvoeringen

~2.800

getypeerde specificatiewaarden, 106 componenten met ETIM-code

13

accuplatformen

24

huurmachines, 75 eenheden in vijf depots

4

talen en drie valuta

Hoe het samenhangt

Eén tenant, twee API’s. De seed schrijft de tenant via de PIM API; alles wat een bezoeker, een assistent of een crawler ziet, wordt teruggelezen via Discovery en de Shop API.

Fabrikantbronnen

Datasheets, adviesprijzen en beelden van de eigen sites van de zes merken. Geen data van dealers.

Seed

npm run seed: tien idempotente stappen, van model tot klanten

Crystallize-tenant

PIM

Shapes, getypeerde pieces, topics, ETIM-klassen, vectoren

Discovery API

Zoeken, facetten, rankBy met de smaak van de klant

Shop API

Winkelwagen, afrekenen, bestellingen, offertes, huurboekingen

Webwinkel

Next.js 16, gecachte Discovery-reads, klantdata gestreamd

Wie leest het

Klanten

Vier talen, btw-schakelaar, accountkiezer

Assistent op de site

Claude met de catalogustools

MCP-clients

Claude, Claude Code, elke MCP-host

Crawlers en LLM’s

JSON-LD, llms.txt, .md-pagina’s

01

Specificaties zijn getypeerd, geen tekst

Geen eigenschappentabellen. Elke specificatie is een eigen component, dus filteren, ranken, vertalen en exporteren gaat zonder parsen.

Een machine heeft twee gedeelde pieces, power (voeding, spanning, motor) en physical (gewicht, maten, trilling, geluid), en één specificatiefamilie per product: boren, beton, zagen, schuren, houtbewerking, bevestigen, installatie, meten, afzuiging, accu en laden, bouwplaats, opslag, buiten of verbruik. De familie is een enkele keuze, dus een breekhamer kan geen zaagvelden krijgen.

Getallen zijn numerieke componenten met een eenheid (230 Nm, 18 V, 5 Ah), ja/nee zijn booleans, vaste sets zijn selecties. 106 componenten hebben hun ETIM 10.0-kenmerk, en de Noorse, Zweedse en Nederlandse labels zijn de officiële ETIM-namen. Elk product zit in zijn ETIM-klasse.

Dezelfde getypeerde waarden sturen de facetten in de categorieën (bereikfilters op slagenergie, zaagbladdiameter …), het specificatieblad, de JSON-LD met UN/CEFACT-eenheidscodes, en de specificatiefilters van de assistent en de MCP-server.

Slagenergie
specs.concrete.impactEnergy · J (JOU) · EF002831
Gereedschapsopname
specs.concrete.toolHolder · SDS-max · EV005657
Gewicht
physical.weight · kg (KGM) · EF011121
02

Taxonomie, merken en accuplatformen

Elf topic maps beschrijven elk product zoals de vakman denkt, in vier talen.

Merk, accuplatform, producttype, vak, materiaal, niveau, prijsklasse, kenmerk, beschikbaarheid, beeldtype en ETIM-klasse: 188 topics. Ze sturen navigatie, facetten en smaakvectoren.

Merken, accuplatformen en technologieën zijn documenten met eigen pagina’s. Het accuplatform (Milwaukee M18, Makita LXT, Hilti Nuron …) is de keuze die een vakman al gemaakt heeft: het bepaalt welke accu’s passen, en het is het sterkste signaal voor personalisatie. Accessoires, zaagbladen en accu’s noemen de machines waarop ze passen; machines hebben de aanbevolen combinaties van de fabrikant.

03

Verhuur met echte boekingen

Zwaar materieel wordt per dag, weekend, week of vier weken verhuurd, vanuit vijf depots in Oslo, Bergen, Stockholm, Göteborg en Rotterdam.

Elk huurartikel is een boekbaar product met een pool van benoemde eenheden, de fysieke machines. De webwinkel toont de beschikbaarheid per depot en periode uit de Shop API, boekt de eenheid in de winkelwagen en bevestigt de boeking bij het afrekenen, gekoppeld aan de bestelling.

Drie boekingsregels bepalen de levertijd en een annuleringsvenster van 24 of 48 uur: daarbinnen kan een huur nog uit de winkelwagen en komt de eenheid vrij. Certificaateisen, borg en levering op de bouwplaats horen bij het huurartikel.

04

Vier talen, drie valuta, btw beide kanten op

Namen, teksten, topics, alt-teksten en URL-paden zijn vertaald. De taal kiest de markt.

Engels en Nederlands verkopen in EUR (21% btw), Noors in NOK en Zweeds in SEK (25%). Prijzen worden netto opgeslagen, per valuta, met staffels. De schakelaar incl./excl. btw bovenin wisselt elke prijs op de pagina; zakelijke klanten zien standaard excl. btw.

Zakelijke klanten krijgen de prijslijst van hun bedrijf uit Crystallize-markten: Discovery geeft nokPriceFor(marketIdentifiers) en de winkelwagen in de Shop API gebruikt dezelfde lijst. Factuur met inkoopreferentie, offertes in een eigen pipeline, en een accountpagina met bestellingen, huur en offertes per status.

05

Gerankt voor elke klant

Geen aparte aanbevelingsdienst. Eén smaakvector per klant, en Discovery rankt.

Topics worden drie vocabulaires: ecosystem (merk en platform), work (vak en materiaal) en gear (producttype, niveau, kenmerken). Elk product heeft in elk een vector. De smaakvector van een klant wordt opgebouwd uit de bestelhistorie in de Shop API en meegestuurd als context.userTaste, met een rankBy-regel die hem mengt met verkoop, marge en voorraad.

Wissel van democlient in de header en de winkel rankt opnieuw: de voorpagina, de volgorde in categorieën, de beelden in het megamenu, combinaties en alternatieven. Sindre, een meubelmaker die alleen Festool koopt, heeft de duidelijkste vector; Lotte, weekendhoutbewerker met DeWalt, ziet een heel andere winkel.

06

Alleen data van de fabrikanten

Niets komt van dealers.

Specificaties, adviesprijzen en beelden komen van de eigen sites van de zes fabrikanten, verzameld door research-agents en in het model genormaliseerd met een bron per product. Productteksten zijn voor de demo geschreven. Bosch, Festool en Hilti hebben adviesprijzen; de rest, en NOK en SEK, zijn geschat en afgerond op schapprijzen. Depots, eenheden, klanten en aantallen reviews zijn fictief.

07

Een idempotente seed

De tenant is code. Wijzig data of model, draai een stap opnieuw, en de tenant volgt.

npm run seed draait tien stappen op volgorde: tenantinstellingen, contentmodel, taxonomie, beelden, catalogus, verhuur, vertalingen, landingspagina’s, vectoren, klanten. Elke stap kan los opnieuw; hij werkt bij wat er is in plaats van te dupliceren. De smaakvectoren komen als laatste, als concept, en worden dan gepubliceerd en geïndexeerd.

De bouw is stap voor stap opgenomen om af te spelen, en wat de Crystallize-skills ons hadden moeten vertellen wordt onderweg opgeschreven.

00–02
Tenant, 29 pieces en 11 shapes, 11 topic maps
03–05
1.104 beelden, 416 producten, 24 huurartikelen
06–07
Noors, Zweeds, Nederlands; landingspagina’s
08–09
Vectoren en index; klanten en hun historie
08

Een assistent op de site, en een MCP-server voor elke agent

Dezelfde catalogus, dezelfde ranking, twee ingangen.

De knop Vraag in de header opent een winkelassistent die op Claude draait met de eigen tools van de winkel: zoeken met getypeerde specificatiefilters, productdetails, platformen, verhuur en de winkelwagen.

De winkel is ook een MCP-server. Voeg hem toe aan Claude als connector, log in als democlient en winkel vanuit de chat: vergelijk machines op een platform, boek een huurmachine, vul een winkelwagen en reken af in de winkel. Elke pagina is ook ingericht om door zoekmachines en taalmodellen gelezen te worden.

Claude koppelen aan de winkelMCP instellen, inloggen als democlient, en hoe de winkel is ingericht voor AI-zoeken

Om te proberen

Tien minuten door de winkel.
  1. 1Wissel van klant in de header (probeer Sindre, dan Lotte) en zie de voorpagina en categorieën opnieuw ranken.
  2. 2Zoek op een specificatie, niet op een naam. “sds max breekhamer” →
  3. 3Open een accuplatform in het menu en zie elke machine, accu en lader erop.
  4. 4Huur een breekhamer voor een weekend: kies een depot, zie welke eenheden vrij zijn, boek hem in de winkelwagen.
  5. 5Wissel incl./excl. btw bovenin, en wissel van taal om NOK en SEK te zien.
  6. 6Vraag de assistent: “Welke accu’s passen op mijn machines, en welke is het voordeligst?”
  7. 7Zet .md achter een URL om te zien wat een taalmodel leest.

Claude koppelen aan de winkel →← Terug naar de winkel