ToolsUniverse

Om demon

En verktygsbutik byggd direkt på Crystallize

Tools Universe är en demo för verktygsbranschen i Norden: sex tillverkare, köp eller hyr, företagskunder och privatpersoner, fyra språk. Allt är ren Crystallize: webbutiken läser Discovery API och Shop API och inget annat.

416

produkter från sex tillverkare, 611 utföranden

~2 800

typade specifikationsvärden, 106 komponenter med ETIM-kod

13

batteriplattformar

24

hyrmaskiner, 75 enheter på fem depåer

4

språk och tre valutor

Så hänger det ihop

En tenant, två API:er. Seeden skriver tenanten via PIM-API:et; allt en besökare, en assistent eller en crawler ser läses tillbaka via Discovery och Shop API.

Tillverkarkällor

Datablad, listpriser och bilder från de sex varumärkenas egna webbplatser. Ingen data från återförsäljare.

Seed

npm run seed: tio idempotenta steg, från modell till kunder

Crystallize-tenant

PIM

Shapes, typade pieces, topics, ETIM-klasser, vektorer

Discovery API

Sök, facetter, rankBy med kundens smak

Shop API

Varukorg, kassa, ordrar, offerter, hyrbokningar

Webbutik

Next.js 16, cachade Discovery-anrop, kunddata strömmas in

Vem läser den

Kunder

Fyra språk, momsväxel, kontoväljare

Assistent på sajten

Claude med katalogverktygen

MCP-klienter

Claude, Claude Code, alla MCP-värdar

Crawlers och LLM:er

JSON-LD, llms.txt, .md-sidor

01

Specifikationer är typade, inte text

Inga egenskapstabeller. Varje specifikation är sin egen komponent, så den kan filtreras, rankas, översättas och exporteras utan tolkning.

Ett verktyg har två gemensamma pieces, power (strömkälla, spänning, motor) och physical (vikt, mått, vibration, buller), och en specifikationsfamilj vald per produkt: borrning, betong, sågning, slipning, träbearbetning, infästning, installation, mätning, utsug, batteri och laddning, byggarbetsplats, förvaring, utomhus eller förbrukning. Familjen är ett enkelval, så en bilningshammare kan inte få en sågs fält.

Tal är numeriska komponenter med enhet (230 Nm, 18 V, 5 Ah), ja/nej är booleska, fasta urval är selections. 106 komponenter har sin ETIM 10.0-egenskap, och de norska, svenska och nederländska etiketterna är ETIM:s officiella namn. Varje produkt ligger i sin ETIM-klass.

Samma typade värden styr facetterna i kategorierna (intervallfilter på slagenergi, klingdiameter …), specifikationsbladet, JSON-LD med UN/CEFACT-enhetskoder, och specifikationsfiltren i assistenten och MCP-servern.

Slagenergi
specs.concrete.impactEnergy · J (JOU) · EF002831
Verktygsfäste
specs.concrete.toolHolder · SDS-max · EV005657
Vikt
physical.weight · kg (KGM) · EF011121
02

Taxonomi, varumärken och batteriplattformar

Elva topic maps beskriver varje produkt så som branschen tänker, på fyra språk.

Varumärke, batteriplattform, produkttyp, yrke, material, nivå, prisklass, egenskap, tillgänglighet, bildtyp och ETIM-klass: 188 topics. De styr navigering, facetter och smakvektorer.

Varumärken, batteriplattformar och tekniker är dokument med egna sidor. Batteriplattformen (Milwaukee M18, Makita LXT, Hilti Nuron …) är valet en yrkesperson redan har gjort: den avgör vilka batterier som passar, och den är den starkaste signalen i personaliseringen. Tillbehör, klingor och batterier anger maskinerna de passar till; maskinerna har tillverkarens rekommenderade tillbehör.

03

Uthyrning med riktig bokning

Tung utrustning hyrs per dag, helg, vecka eller fyra veckor, från fem depåer i Oslo, Bergen, Stockholm, Göteborg och Rotterdam.

Varje hyrartikel är en bokningsbar produkt med en pool av namngivna enheter, de fysiska maskinerna. Webbutiken visar tillgänglighet per depå och period från Shop API, bokar enheten i varukorgen och bekräftar bokningen i kassan, kopplad till ordern.

Tre bokningsregler ger ledtid och ett avbokningsfönster på 24 eller 48 timmar: inom det kan en hyra fortfarande tas bort ur varukorgen och enheten frigörs. Behörighetskrav, deposition och leverans till arbetsplatsen ingår i hyrartikeln.

04

Fyra språk, tre valutor, moms åt båda håll

Namn, texter, topics, bildtexter och URL-sökvägar är översatta. Språket väljer marknaden.

Engelska och nederländska säljer i EUR (21 % moms), norska i NOK och svenska i SEK (25 %). Priser lagras netto, per valuta, med mängdpriser. Inkl./exkl. moms-växeln överst byter varje pris på sidan; företagskunder ser exkl. moms som standard.

Företagskunder får företagets prislista från Crystallize-marknader: Discovery ger nokPriceFor(marketIdentifiers) och varukorgen i Shop API använder samma lista. Faktura med inköpsreferens, offerter i egen pipeline, och en kontosida med ordrar, hyror och offerter per status.

05

Rankad för varje kund

Ingen separat rekommendationstjänst. En smakvektor per kund, och Discovery rankar.

Topics blir tre vokabulärer: ecosystem (varumärke och plattform), work (yrke och material) och gear (produkttyp, nivå, egenskaper). Varje produkt har en vektor i varje. Kundens smakvektor byggs från orderhistoriken i Shop API och skickas med varje anrop som context.userTaste, med en rankBy-regel som blandar den med försäljning, marginal och lager.

Byt demokund i sidhuvudet så rankas butiken om: startsidan, ordningen i kategorierna, bilderna i megamenyn, tillbehör och alternativ. Sindre, en möbelsnickare som bara köper Festool, har den tydligaste vektorn; Lotte, helgsnickare med DeWalt, ser en helt annan butik.

06

Bara data från tillverkarna

Inget kommer från återförsäljare.

Specifikationer, listpriser och bilder kommer från de sex tillverkarnas egna webbplatser, insamlade av research-agenter och normaliserade in i modellen med källa per produkt. Produkttexterna är skrivna för demon. Bosch, Festool och Hilti har listpriser; resten, och NOK och SEK, är uppskattade och avrundade till hyllpriser. Depåer, enheter, kunder och antal recensioner är fiktiva.

07

En idempotent seed

Tenanten är kod. Ändra data eller modell, kör ett steg igen, och tenanten följer med.

npm run seed kör tio steg i ordning: tenant-inställningar, innehållsmodell, taxonomi, bilder, katalog, uthyrning, översättningar, landningssidor, vektorer, kunder. Varje steg kan köras för sig; det uppdaterar det som finns i stället för att skapa dubbletter. Smakvektorerna beräknas sist, skrivs som utkast, publiceras och indexeras.

Bygget är inspelat steg för steg för uppspelning, och det Crystallize-skillsen borde ha berättat skrivs ner längs vägen.

00–02
Tenant, 29 pieces och 11 shapes, 11 topic maps
03–05
1 104 bilder, 416 produkter, 24 hyrartiklar
06–07
Norska, svenska, nederländska; landningssidor
08–09
Vektorer och index; kunder och historik
08

En assistent på sajten, och en MCP-server för alla agenter

Samma katalog, samma rankning, två vägar in.

Fråga-knappen i sidhuvudet öppnar en shoppingassistent som körs på Claude med butikens egna verktyg: sök med typade specifikationsfilter, produktdetaljer, plattformar, uthyrning och varukorg.

Butiken är också en MCP-server. Lägg till den i Claude som koppling, logga in som demokund och handla från chatten: jämför verktyg på en plattform, boka en hyrmaskin, fyll varukorgen och gå till kassan i butiken. Varje sida är också byggd för att läsas av sökmotorer och språkmodeller.

Koppla Claude till butikenMCP-konfiguration, demoinloggning, och hur butiken är byggd för AI-sök

Saker att prova

Tio minuter genom butiken.
  1. 1Byt kund i sidhuvudet (prova Sindre, sedan Lotte) och se startsidan och kategorierna rankas om.
  2. 2Sök på en specifikation, inte ett namn. “sds max bilningshammare” →
  3. 3Öppna en batteriplattform från menyn och se varje verktyg, batteri och laddare på den.
  4. 4Hyr en bilningshammare över en helg: välj depå, se vilka enheter som är lediga, boka den i varukorgen.
  5. 5Växla inkl./exkl. moms överst, och byt språk för att se NOK och SEK.
  6. 6Fråga assistenten: ”Vilka batterier passar mina verktyg, och vilket ger mest för pengarna?”
  7. 7Lägg till .md på en URL för att se vad en språkmodell läser.

Koppla Claude till butiken →← Tillbaka till butiken