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
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
Specifikationer är typade, inte text
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
Taxonomi, varumärken och batteriplattformar
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.
Uthyrning med riktig bokning
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.
Fyra språk, tre valutor, moms åt båda håll
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.
Rankad för varje kund
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.
Bara data från tillverkarna
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.
En idempotent seed
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
En assistent på sajten, och en MCP-server för alla agenter
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ökSaker att prova
- 1Byt kund i sidhuvudet (prova Sindre, sedan Lotte) och se startsidan och kategorierna rankas om.
- 2Sök på en specifikation, inte ett namn. “sds max bilningshammare” →
- 3Öppna en batteriplattform från menyn och se varje verktyg, batteri och laddare på den.
- 4Hyr en bilningshammare över en helg: välj depå, se vilka enheter som är lediga, boka den i varukorgen.
- 5Växla inkl./exkl. moms överst, och byt språk för att se NOK och SEK.
- 6Fråga assistenten: ”Vilka batterier passar mina verktyg, och vilket ger mest för pengarna?”
- 7Lägg till .md på en URL för att se vad en språkmodell läser.






























