# 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
- **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)

## 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

## 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.

## 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.

## 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.

## 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.

## 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.

## 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

## 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.

## Om te proberen

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

[Claude koppelen aan de winkel](https://tools-universe.superfast.shop/nl/mcp.md): MCP instellen, inloggen als democlient, en hoe de winkel is ingericht voor AI-zoeken

---

Webpagina: https://tools-universe.superfast.shop/nl/about
Markdown-versie van deze pagina, voor taalmodellen. Prijzen zijn netto (excl. btw) tenzij incl. btw vermeld.
