[{"data":1,"prerenderedAt":2471},["ShallowReactive",2],{"blog-category-en-web":3},[4,86,143,218,287,336,406,477,552,607,680,755,817,883,949,1017,1068,1138,1208,1271,1340,1380,1451,1519,1590,1663,1722,1775,1822,1878,1966,2032,2113,2159,2212,2256,2304,2356,2419],{"slug":5,"published":6,"minutes":7,"category":8,"tags":9,"tagPages":15,"keywords":18,"about":30,"sources":39,"cover":76,"og":77,"expertise":78,"locales":79,"lang":80,"title":83,"description":84,"coverAlt":85},"schema-org-structured-data-b2b-shop","2026-10-17",10,"web",[10,11,12,13,14],"Schema.org","Structured data","B2B e-commerce","Technical SEO","Nuxt",[16,17],"b2b-e-commerce","nuxt",[19,20,21,22,23,24,25,26,27,28,29],"schema.org b2b shop","product structured data b2b","merchant listing structured data","product snippet vs merchant listing","unitpricespecification referencequantity","productgroup variants structured data","organization schema vatid","b2b prices behind login seo","json-ld nuxt schema org","merchant return policy structured data","mpn gtin structured data",[31,33,36],{"name":10,"url":32},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSchema.org",{"name":34,"url":35},"JSON-LD","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON-LD",{"name":37,"url":38},"Business-to-business","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBusiness-to-business",[40,43,46,49,52,55,58,61,64,67,70,73],{"title":41,"url":42},"Google Search Central: Introduction to Product structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct",{"title":44,"url":45},"Google Search Central: Merchant listing (Product, Offer) structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fmerchant-listing",{"title":47,"url":48},"Google Search Central: Product snippet structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-snippet",{"title":50,"url":51},"Google Search Central: Product variant structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-variants",{"title":53,"url":54},"Google Search Central: Organization structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Forganization",{"title":56,"url":57},"Google Search Central: Merchant return policy structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Freturn-policy",{"title":59,"url":60},"Google Search Central: General structured data guidelines","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fsd-policies",{"title":62,"url":63},"Google Search Central: Generate structured data with JavaScript","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fgenerate-structured-data-with-javascript",{"title":65,"url":66},"Schema.org: Offer","https:\u002F\u002Fschema.org\u002FOffer",{"title":68,"url":69},"Schema.org: UnitPriceSpecification","https:\u002F\u002Fschema.org\u002FUnitPriceSpecification",{"title":71,"url":72},"Unhead: Product schema (defineProduct)","https:\u002F\u002Funhead.unjs.io\u002Fdocs\u002Fschema-org\u002Fapi\u002Fschema\u002Fproduct",{"title":74,"url":75},"Nuxt SEO: Schema.org identity setup","https:\u002F\u002Fnuxtseo.com\u002Fdocs\u002Fschema-org\u002Fguides\u002Fsetup-identity","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fog.jpg","b2b-ecommerce-developer",[80,81,82],"en","de","hu","Schema.org structured data for B2B shops: prices behind logins, units and variants","Product markup for B2B shops: snippet or merchant listing, which price to publish, part numbers, unit pricing, variants, Organization and SSR in Nuxt.","Schema.org for B2B shops: a robot reads a product tag on a shop shelf, one box behind a locked glass door.",{"slug":87,"published":6,"minutes":88,"category":8,"tags":89,"tagPages":94,"keywords":95,"about":107,"sources":115,"cover":137,"og":138,"expertise":78,"locales":139,"lang":80,"title":140,"description":141,"coverAlt":142},"ai-assistant-b2b-shop-customer-support",9,[12,90,91,92,93],"AI assistant","Customer support","LLM agents","EU AI Act",[16],[96,97,98,99,100,101,102,103,104,105,106],"ai assistant b2b shop","ai customer support b2b ecommerce","llm chatbot order status","ai agent customer service tools","chatbot liability air canada","klarna ai assistant results","human handoff chatbot design","eu ai act chatbot disclosure","owasp excessive agency","ai support resolution rate","b2b customer portal chatbot",[108,111,114],{"name":109,"url":110},"Customer service","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCustomer_service",{"name":112,"url":113},"Chatbot","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FChatbot",{"name":37,"url":38},[116,119,122,125,128,131,134],{"title":117,"url":118},"Klarna: AI assistant handles two-thirds of customer service chats in its first month (press release, 2024)","https:\u002F\u002Fwww.klarna.com\u002Finternational\u002Fpress\u002Fklarna-ai-assistant-handles-two-thirds-of-customer-service-chats-in-its-first-month\u002F",{"title":120,"url":121},"Entrepreneur: Klarna is hiring customer service agents again, according to its CEO (May 2025)","https:\u002F\u002Fwww.entrepreneur.com\u002Fbusiness-news\u002Fklarna-ceo-reverses-course-by-hiring-more-humans-not-ai\u002F491396",{"title":123,"url":124},"ABA Business Law Today: BC tribunal confirms companies remain liable for information provided by AI chatbot","https:\u002F\u002Fwww.americanbar.org\u002Fgroups\u002Fbusiness_law\u002Fresources\u002Fbusiness-law-today\u002F2024-february\u002Fbc-tribunal-confirms-companies-remain-liable-information-provided-ai-chatbot\u002F",{"title":126,"url":127},"OWASP GenAI Security Project: LLM06:2025 Excessive Agency","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm062025-excessive-agency\u002F",{"title":129,"url":130},"OWASP GenAI Security Project: LLM05:2025 Improper Output Handling","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm052025-improper-output-handling\u002F",{"title":132,"url":133},"EU AI Act, Article 50: Transparency obligations","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F50\u002F",{"title":135,"url":136},"Intercom: Fin pricing and billable outcomes","https:\u002F\u002Ffin.ai\u002Fpricing","\u002Fimages\u002Fblog\u002Fai-assistant-b2b-shop-customer-support\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fai-assistant-b2b-shop-customer-support\u002Fog.jpg",[80,81,82],"An AI assistant for B2B shop support: tools, permissions and the human handoff","How to build an AI support assistant for a B2B shop: which requests to automate, tools that run in the customer context, handoff, AI Act and metrics.","AI assistant for B2B shop support: a robot with a headset at a help desk hands a ticket card to a human hand.",{"slug":144,"published":6,"minutes":145,"category":8,"tags":146,"tagPages":151,"keywords":152,"about":164,"sources":174,"cover":211,"og":212,"expertise":213,"locales":214,"lang":80,"title":215,"description":216,"coverAlt":217},"vue-ai-chat-ui-streaming-accessibility",11,[147,14,148,149,150],"Vue","Accessibility","Streaming","AI chat",[17],[153,154,155,156,157,158,159,160,161,162,163],"vue ai chat ui","nuxt llm streaming","sse vs fetch streaming","aria-live streaming text","accessible chat interface","abort fetch stream vue","dompurify markdown llm","role log chat","reduced motion chat ui","wcag 2.2 chat","screen reader streaming",[165,168,171],{"name":166,"url":167},"Web accessibility","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_accessibility",{"name":169,"url":170},"Server-sent events","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",{"name":172,"url":173},"Vue.js","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVue.js",[175,178,181,184,187,190,193,196,199,202,205,208],{"title":176,"url":177},"MDN: Using server-sent events","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FServer-sent_events\u002FUsing_server-sent_events",{"title":179,"url":180},"MDN: AbortController","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FAbortController",{"title":182,"url":183},"MDN: ReadableStream","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FReadableStream",{"title":185,"url":186},"MDN: TextDecoderStream","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FTextDecoderStream",{"title":188,"url":189},"MDN: ARIA log role","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAccessibility\u002FARIA\u002FReference\u002FRoles\u002Flog_role",{"title":191,"url":192},"W3C: Understanding SC 4.1.3 Status Messages","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Fstatus-messages.html",{"title":194,"url":195},"W3C WAI: What's new in WCAG 2.2","https:\u002F\u002Fwww.w3.org\u002FWAI\u002Fstandards-guidelines\u002Fwcag\u002Fnew-in-22\u002F",{"title":197,"url":198},"MDN: prefers-reduced-motion","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002F@media\u002Fprefers-reduced-motion",{"title":200,"url":201},"DOMPurify README","https:\u002F\u002Fgithub.com\u002Fcure53\u002FDOMPurify",{"title":203,"url":204},"markdown-it README","https:\u002F\u002Fgithub.com\u002Fmarkdown-it\u002Fmarkdown-it",{"title":206,"url":207},"AI SDK docs: useChat","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fchatbot",{"title":209,"url":210},"Vue docs: nextTick","https:\u002F\u002Fvuejs.org\u002Fapi\u002Fgeneral.html#nexttick","\u002Fimages\u002Fblog\u002Fvue-ai-chat-ui-streaming-accessibility\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fvue-ai-chat-ui-streaming-accessibility\u002Fog.jpg","vue-nuxt-developer",[80,81,82],"Streaming AI chat in Vue and Nuxt: accessible by design","Streaming AI chat UI in Vue and Nuxt: fetch streams, abort and retry, safe markdown, aria-live announcements, keyboard support and reduced motion.","Streaming AI chat in Vue and Nuxt: chat bubbles appear one by one in a window, headphones and a keyboard key in front.",{"slug":219,"published":6,"minutes":88,"category":8,"tags":220,"tagPages":225,"keywords":226,"about":238,"sources":248,"cover":281,"og":282,"expertise":213,"locales":283,"lang":80,"title":284,"description":285,"coverAlt":286},"llm-translation-pipeline-i18n",[221,222,223,147,224],"Translation","i18n","LLM","Localization",[],[227,228,229,230,231,232,233,234,235,236,237],"llm translation pipeline","icu messageformat placeholders","vue i18n llm translation","translation memory llm","glossary enforcement translation","german informal sie du","hungarian translation quality llm","structured output json translation","machine translation post-editing","locale file validation","cldr plural categories",[239,242,245],{"name":240,"url":241},"Internationalization and localization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInternationalization_and_localization",{"name":243,"url":244},"ICU MessageFormat","https:\u002F\u002Funicode-org.github.io\u002Ficu\u002Fuserguide\u002Fformat_parse\u002Fmessages\u002F",{"name":246,"url":247},"Vue I18n","https:\u002F\u002Fvue-i18n.intlify.dev\u002F",[249,251,254,257,260,263,266,269,272,275,278],{"title":250,"url":244},"Unicode ICU User Guide: Formatting Messages",{"title":252,"url":253},"Vue I18n: Message Format Syntax","https:\u002F\u002Fvue-i18n.intlify.dev\u002Fguide\u002Fessentials\u002Fsyntax",{"title":255,"url":256},"Nuxt i18n: Getting started","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fgetting-started",{"title":258,"url":259},"Unicode CLDR: Plural rules","https:\u002F\u002Fcldr.unicode.org\u002Findex\u002Fcldr-spec\u002Fplural-rules",{"title":261,"url":262},"OpenAI: Structured outputs","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fstructured-outputs",{"title":264,"url":265},"DeepL API: Glossaries","https:\u002F\u002Fdevelopers.deepl.com\u002Fdocs\u002Fapi-reference\u002Fglossaries",{"title":267,"url":268},"W3C: Localization vs. internationalization","https:\u002F\u002Fwww.w3.org\u002FInternational\u002Fquestions\u002Fqa-i18n",{"title":270,"url":271},"GNU gettext manual","https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002Fmanual\u002Fgettext.html",{"title":273,"url":274},"RFC 5646: Tags for Identifying Languages","https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc5646",{"title":276,"url":277},"Rat für deutsche Rechtschreibung","https:\u002F\u002Fwww.rechtschreibrat.com\u002F",{"title":279,"url":280},"Microsoft Writing Style Guide","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fstyle-guide\u002Fwelcome\u002F","\u002Fimages\u002Fblog\u002Fllm-translation-pipeline-i18n\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-translation-pipeline-i18n\u002Fog.jpg",[80,81,82],"An LLM translation pipeline for i18n: glossary, placeholders and review","How to translate product and website strings with LLMs without breaking placeholders, plurals or tone: glossary, ICU messages, QA checks and review gates.","LLM translation pipeline for i18n: three speech bubbles linked by a ribbon above an open dictionary and a pencil.",{"slug":288,"published":289,"minutes":290,"category":8,"tags":291,"tagPages":295,"keywords":296,"about":307,"sources":314,"cover":330,"og":331,"expertise":213,"locales":332,"lang":80,"title":333,"description":334,"coverAlt":335},"nuxt-i18n-multilingual-seo-hreflang","2026-10-16",8,[14,222,292,293,294],"SEO","hreflang","Multilingual",[17],[297,298,299,300,301,302,303,304,305,306],"nuxt i18n seo","nuxt hreflang","useLocaleHead","nuxt i18n canonical","hreflang x-default","prefix_except_default","multilingual seo nuxt","nuxt i18n sitemap hreflang","hreflang self-referencing","nuxt i18n baseUrl",[308,310,313],{"name":14,"url":309},"https:\u002F\u002Fnuxt.com\u002F",{"name":311,"url":312},"Hreflang","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHreflang",{"name":240,"url":241},[315,318,321,324,327],{"title":316,"url":317},"Nuxt i18n docs: SEO (useLocaleHead)","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fguide\u002Fseo",{"title":319,"url":320},"Nuxt i18n docs: Routing strategies","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fguide",{"title":322,"url":323},"Google Search Central: Tell Google about localized versions of your page","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fspecialty\u002Finternational\u002Flocalized-versions",{"title":325,"url":326},"Google Search Central: Managing multi-regional and multilingual sites","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fspecialty\u002Finternational\u002Fmanaging-multi-regional-sites",{"title":328,"url":329},"Google Search Central: How to specify a canonical URL","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fconsolidate-duplicate-urls","\u002Fimages\u002Fblog\u002Fnuxt-i18n-multilingual-seo-hreflang\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-i18n-multilingual-seo-hreflang\u002Fog.jpg",[80,81,82],"Multilingual SEO with Nuxt i18n: URL strategy, hreflang, canonicals and sitemaps","How to set up Nuxt i18n so search engines index every language: routing strategy, useLocaleHead, hreflang rules, partial translations and sitemaps.","Multilingual SEO with Nuxt i18n: a signpost with three arrows points to three houses, a globe at its foot.",{"slug":337,"published":289,"minutes":338,"category":8,"tags":339,"tagPages":344,"keywords":346,"about":359,"sources":366,"cover":400,"og":401,"expertise":213,"locales":402,"lang":80,"title":403,"description":404,"coverAlt":405},"llm-endpoint-abuse-denial-of-wallet",14,[14,340,341,342,343],"LLM security","Rate limiting","OWASP","Cost control",[17,345],"llm-security",[347,348,349,350,351,352,353,354,355,356,357,358],"denial of wallet llm","owasp llm10 unbounded consumption","rate limit llm api nuxt","nuxt security rate limiter","protect openai api key frontend","llm token budget per user","limit llm cost per user","nitro api rate limiting","cloudflare turnstile nuxt","anthropic spend limit","openai hard spend limit","llm prompt size limit",[360,362,365],{"name":341,"url":361},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",{"name":363,"url":364},"Denial-of-service attack","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDenial-of-service_attack",{"name":14,"url":309},[367,370,373,376,379,382,385,388,391,394,397],{"title":368,"url":369},"OWASP GenAI Security Project: LLM10:2025 Unbounded Consumption","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm102025-unbounded-consumption\u002F",{"title":371,"url":372},"Nuxt Security: Rate Limiter middleware","https:\u002F\u002Fnuxt-security.vercel.app\u002Fmiddleware\u002Frate-limiter",{"title":374,"url":375},"Nuxt Security: Request Size Limiter middleware","https:\u002F\u002Fnuxt-security.vercel.app\u002Fmiddleware\u002Frequest-size-limiter",{"title":377,"url":378},"nuxt-auth-utils: README (GitHub)","https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",{"title":380,"url":381},"h3: request utilities (getRequestIP, readValidatedBody)","https:\u002F\u002Fh3.dev\u002Futils\u002Frequest",{"title":383,"url":384},"Upstash: Ratelimiting algorithms","https:\u002F\u002Fupstash.com\u002Fdocs\u002Fredis\u002Fsdks\u002Fratelimit-ts\u002Falgorithms",{"title":386,"url":387},"Cloudflare Turnstile: Validate the token","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fturnstile\u002Fget-started\u002Fserver-side-validation\u002F",{"title":389,"url":390},"Claude Platform Docs: Rate limits and spend limits","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Frate-limits",{"title":392,"url":393},"Claude Platform Docs: Token counting","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Ftoken-counting",{"title":395,"url":396},"OpenAI API Docs: Spend limits","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fspend-limits",{"title":398,"url":399},"OpenAI API Docs: Rate limits","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Frate-limits","\u002Fimages\u002Fblog\u002Fllm-endpoint-abuse-denial-of-wallet\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-endpoint-abuse-denial-of-wallet\u002Fog.jpg",[80,81,82],"Denial of wallet: protecting public LLM endpoints in a Nuxt app","How to stop abuse and runaway cost on a public LLM route in Nuxt: auth, per-user rate limits, prompt caps, token budgets, Turnstile and spend limits.","Denial of wallet on LLM endpoints: a turnstile slows a queue of tiny robots heading for an open wallet.",{"slug":407,"published":408,"updated":6,"minutes":88,"category":8,"tags":409,"tagPages":415,"keywords":416,"about":427,"sources":436,"cover":471,"og":472,"expertise":78,"locales":473,"lang":80,"title":474,"description":475,"coverAlt":476},"procurement-agent-buyer-side","2026-10-15",[410,411,412,413,414],"Agentic commerce","Procurement","B2B shop","Product data","UCP",[],[417,418,419,420,421,422,423,424,425,426],"agentic commerce readiness","buyer-side procurement agents","what B2B shops must expose to AI agents","UCP integration","ACP agentic checkout","AP2 mandates supplier","machine-readable quotes B2B","product data for AI agents","punchout vs agentic commerce","AI agent traffic ecommerce",[428,431,433],{"name":429,"url":430},"Agentic commerce (Universal Commerce Protocol)","https:\u002F\u002Fucp.dev\u002F",{"name":411,"url":432},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProcurement",{"name":434,"url":435},"BMEcat","https:\u002F\u002Feclass.eu\u002Fsupport\u002Ftechnical-specification\u002Fdata-model\u002Fbmecat",[437,440,443,446,449,452,454,457,460,463,466,469],{"title":438,"url":439},"Google: new agentic commerce tools and the Universal Commerce Protocol (11 Jan 2026)","https:\u002F\u002Fblog.google\u002Fproducts\u002Fads-commerce\u002Fagentic-commerce-ai-tools-protocol-retailers-platforms\u002F",{"title":441,"url":442},"Google Developers Blog: Under the hood of the Universal Commerce Protocol (11 Jan 2026)","https:\u002F\u002Fdevelopers.googleblog.com\u002Funder-the-hood-universal-commerce-protocol-ucp\u002F",{"title":444,"url":445},"Google Merchant Center: UCP integration guide","https:\u002F\u002Fdevelopers.google.com\u002Fmerchant\u002Fucp",{"title":447,"url":448},"Agentic Commerce Protocol (ACP)","https:\u002F\u002Fagenticcommerce.dev\u002F",{"title":450,"url":451},"Agent Payments Protocol (AP2)","https:\u002F\u002Fap2-protocol.org\u002F",{"title":453,"url":42},"Google Search Central: Product structured data",{"title":455,"url":456},"Adobe: AI traffic surges to retail sites, but many are not machine-readable","https:\u002F\u002Fbusiness.adobe.com\u002Fblog\u002Fai-traffic-surge-retail-sites-not-machine-readable",{"title":458,"url":459},"Cloudflare: Web Bot Auth, message signatures for bots and agents","https:\u002F\u002Fblog.cloudflare.com\u002Fweb-bot-auth\u002F",{"title":461,"url":462},"SAP News: SAP Connect, spend management and procurement (8 Oct 2025)","https:\u002F\u002Fnews.sap.com\u002F2025\u002F10\u002Fsap-connect-spend-management-procurement\u002F",{"title":464,"url":465},"Amazon: Amazon Business reaches $60 billion in annualized gross sales (21 Jul 2026)","https:\u002F\u002Fpress.aboutamazon.com\u002F2026\u002F7\u002Famazon-business-reaches-60-billion-in-annualized-gross-sales-serving-over-11-million-organizations-worldwide",{"title":467,"url":468},"Digital Commerce 360: Gartner, AI agents and $15 trillion in B2B purchases by 2028 (28 Nov 2025)","https:\u002F\u002Fwww.digitalcommerce360.com\u002F2025\u002F11\u002F28\u002Fgartner-ai-agents-15-trillion-in-b2b-purchases-by-2028\u002F",{"title":470,"url":435},"ECLASS: BMEcat technical specification","\u002Fimages\u002Fblog\u002Fprocurement-agent-buyer-side\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fprocurement-agent-buyer-side\u002Fog.jpg",[80,81,82],"Agentic commerce readiness: what buyer-side procurement agents need from your B2B shop","What a B2B shop must expose so buyer-side procurement agents can find, compare and order: product data, price truth, quotes, identity and protocols.","Buyer-side procurement agents: three cards slide toward a basket, a gate with a check lets one through.",{"slug":478,"published":479,"updated":289,"minutes":290,"category":8,"tags":480,"tagPages":486,"keywords":488,"about":499,"sources":509,"cover":546,"og":547,"expertise":78,"locales":548,"lang":80,"title":549,"description":550,"coverAlt":551},"llm-rfq-quote-automation","2026-10-14",[481,482,483,484,485],"RFQ","Quote automation","Document AI","Product matching","Human review",[487],"document-ai",[489,490,491,492,493,494,495,496,497,498],"RFQ automation","automated quote generation","quote automation LLM","request for quote parsing","part number matching","B2B quote automation software","AI quote generation distribution","human in the loop document review","PDF RFQ extraction","semantic product matching",[500,503,506],{"name":501,"url":502},"Request for quotation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRequest_for_quotation",{"name":504,"url":505},"Optical character recognition","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOptical_character_recognition",{"name":507,"url":508},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",[510,513,516,519,522,525,528,531,534,537,540,543],{"title":511,"url":512},"Harvard Business Review: The Short Life of Online Sales Leads (March 2011)","https:\u002F\u002Fhbr.org\u002F2011\u002F03\u002Fthe-short-life-of-online-sales-leads",{"title":514,"url":515},"Mistral AI: OCR 4.1 model card","https:\u002F\u002Fdocs.mistral.ai\u002Fmodels\u002Focr-4-1",{"title":517,"url":518},"Mistral AI: models overview and deprecations","https:\u002F\u002Fdocs.mistral.ai\u002Fgetting-started\u002Fmodels\u002Fmodels_overview\u002F",{"title":520,"url":521},"Google Cloud: Document AI pricing","https:\u002F\u002Fcloud.google.com\u002Fdocument-ai\u002Fpricing",{"title":523,"url":524},"Google Cloud: Document AI deprecations","https:\u002F\u002Fcloud.google.com\u002Fdocument-ai\u002Fdocs\u002Fdeprecation",{"title":526,"url":527},"Amazon Textract pricing","https:\u002F\u002Faws.amazon.com\u002Ftextract\u002Fpricing\u002F",{"title":529,"url":530},"Microsoft Learn: Azure OpenAI structured outputs","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-foundry\u002Fopenai\u002Fhow-to\u002Fstructured-outputs",{"title":532,"url":533},"Tian et al.: Just Ask for Calibration (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.14975",{"title":535,"url":536},"Peppol BIS Upgrade 3: ordering profiles and code lists","https:\u002F\u002Fdocs.peppol.eu\u002Fpoacc\u002Fupgrade-3\u002F",{"title":538,"url":539},"ETIM International: model releases","https:\u002F\u002Fwww.etim-international.com\u002Fdownloads\u002F?_sft_downloadcategory=model-releases",{"title":541,"url":542},"ECLASS: classification standard","https:\u002F\u002Fwww.eclass.eu\u002F",{"title":544,"url":545},"O*NET OnLine: Order Clerks (43-4151.00)","https:\u002F\u002Fwww.onetonline.org\u002Flink\u002Fsummary\u002F43-4151.00","\u002Fimages\u002Fblog\u002Fllm-rfq-quote-automation\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-rfq-quote-automation\u002Fog.jpg",[80,81,82],"RFQ automation with LLMs: parsing, part matching and human review","How to automate RFQ handling with LLMs: document intake, line extraction, part-number matching, contract pricing and a review queue that stays fast.","RFQ automation with LLMs: a sheet leaves an envelope and becomes a sealed document via a small gear.",{"slug":553,"published":479,"minutes":88,"category":8,"tags":554,"tagPages":559,"keywords":561,"about":572,"sources":582,"cover":601,"og":602,"expertise":78,"locales":603,"lang":80,"title":604,"description":605,"coverAlt":606},"b2b-email-order-entry-llm",[555,556,483,557,558],"Order entry","ERP","Idempotency","GDPR",[487,560],"gdpr",[562,563,564,565,566,567,568,569,570,571],"email order entry automation","sales order automation","automate order entry from email","AI order processing ERP","order desk automation","PDF order to ERP","sales order automation ROI","order entry error rate","touchless order processing","order validation rules ERP",[573,576,579],{"name":574,"url":575},"Sales order","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSales_order",{"name":577,"url":578},"Enterprise resource planning","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnterprise_resource_planning",{"name":580,"url":581},"General Data Protection Regulation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[583,586,587,590,593,594,595,596,597,598],{"title":584,"url":585},"Microsoft Learn: Receive change notifications through webhooks (Microsoft Graph)","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fgraph\u002Fchange-notifications-delivery-webhooks",{"title":529,"url":530},{"title":588,"url":589},"Stripe API reference: Idempotent requests","https:\u002F\u002Fdocs.stripe.com\u002Fapi\u002Fidempotent_requests",{"title":591,"url":592},"Regulation (EU) 2016\u002F679 (GDPR), EUR-Lex","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002F?uri=CELEX%3A32016R0679",{"title":535,"url":536},{"title":544,"url":545},{"title":526,"url":527},{"title":520,"url":521},{"title":514,"url":515},{"title":599,"url":600},"Conexiom: sales order automation (vendor)","https:\u002F\u002Fconexiom.com\u002F","\u002Fimages\u002Fblog\u002Fb2b-email-order-entry-llm\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fb2b-email-order-entry-llm\u002Fog.jpg",[80,81,82],"Email order entry automation: turning emailed orders into ERP orders","How to automate B2B order entry from email with LLMs: reliable mailbox intake, line extraction, validation rules as code, idempotency and GDPR.","Email order entry automation: envelopes unfold into tidy rows on a clipboard that point to a box.",{"slug":608,"published":609,"updated":6,"minutes":290,"category":8,"tags":610,"tagPages":616,"keywords":618,"about":629,"sources":638,"cover":674,"og":675,"expertise":78,"locales":676,"lang":80,"title":677,"description":678,"coverAlt":679},"b2b-customer-portal-ai","2026-10-13",[611,612,613,614,615],"Customer portal","Self-service","Permissions","Caching","AI agents",[617],"ai-agents",[619,620,621,622,623,624,625,626,627,628],"B2B customer portal","B2B customer portal AI","B2B self-service portal","order status delivery date","invoice and credit note self-service","reorder from order history","per-user permissions portal","deflection rate benchmark","cost per contact","headless B2B portal Nuxt",[630,633,635],{"name":631,"url":632},"Web portal","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_portal",{"name":612,"url":634},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSelf-service",{"name":636,"url":637},"HTTP caching (RFC 9111)","https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9111.html",[639,642,645,648,651,654,656,659,662,665,668,671],{"title":640,"url":641},"Gartner: only 14% of customer service issues are fully resolved in self-service (19 Aug 2024)","https:\u002F\u002Fwww.gartner.com\u002Fen\u002Fnewsroom\u002Fpress-releases\u002F2024-08-19-gartner-survey-finds-only-14-percent-of-customer-service-issues-are-fully-resolved-in-self-service",{"title":643,"url":644},"ContactBabel: The Inner Circle Guide to Self-Service (updated Dec 2025)","https:\u002F\u002Fwww.contactbabel.com\u002Fthe-inner-circle-guide-to-self-service\u002F",{"title":646,"url":647},"McKinsey: The surprising economics of B2B growth (B2B Pulse 2026)","https:\u002F\u002Fwww.mckinsey.com\u002Fcapabilities\u002Fgrowth-marketing-and-sales\u002Four-insights\u002Fthe-surprising-economics-of-b2b-growth-the-new-survival-threshold-and-what-it-takes-to-thrive",{"title":649,"url":650},"Digital Commerce 360: Sana Commerce survey on B2B online ordering errors (11 Mar 2024)","https:\u002F\u002Fwww.digitalcommerce360.com\u002F2024\u002F03\u002F11\u002Fsana-commerce-survey-b2b-sellers-online-buyers-error-prone-order-processing",{"title":652,"url":653},"OWASP API Security Top 10 2023: API1 Broken Object Level Authorization","https:\u002F\u002Fowasp.org\u002FAPI-Security\u002Feditions\u002F2023\u002Fen\u002F0xa1-broken-object-level-authorization\u002F",{"title":655,"url":637},"RFC 9111: HTTP Caching",{"title":657,"url":658},"PortSwigger Web Security Academy: Web cache deception","https:\u002F\u002Fportswigger.net\u002Fweb-security\u002Fweb-cache-deception",{"title":660,"url":661},"Model Context Protocol: Authorization (revision 2026-07-28)","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2026-07-28\u002Fbasic\u002Fauthorization",{"title":663,"url":664},"Spryker: company user roles and permissions","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fpbc\u002Fall\u002Fcustomer-relationship-management\u002Flatest\u002Fbase-shop\u002Fcompany-account-feature-overview\u002Fcompany-user-roles-and-permissions-overview",{"title":666,"url":667},"Fortune: Klarna brings humans back to customer service (9 May 2025)","https:\u002F\u002Ffortune.com\u002F2025\u002F05\u002F09\u002Fklarna-ai-humans-return-on-investment\u002F",{"title":669,"url":670},"Fin by Intercom: reporting metrics and resolution definitions","https:\u002F\u002Ffin.ai\u002Fhelp\u002Fen\u002Farticles\u002F13975807-reporting-metrics-attributes",{"title":672,"url":673},"Service-Public.fr: electronic invoicing reform, 1 September 2026","https:\u002F\u002Fentreprendre.service-public.gouv.fr\u002Factualites\u002FA18953","\u002Fimages\u002Fblog\u002Fb2b-customer-portal-ai\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fb2b-customer-portal-ai\u002Fog.jpg",[80,81,82],"AI in the B2B customer portal: orders, invoices and reorders","AI agent for a B2B customer portal: live order, invoice and reorder data, per-user permissions, the cache boundary and honest deflection metrics.","AI in the B2B customer portal: a portal window with three tiles and a small speech bubble over one of them.",{"slug":681,"published":682,"updated":6,"minutes":290,"category":8,"tags":683,"tagPages":689,"keywords":691,"about":702,"sources":712,"cover":749,"og":750,"expertise":78,"locales":751,"lang":80,"title":752,"description":753,"coverAlt":754},"pim-data-quality-llm","2026-10-12",[684,685,686,687,688],"PIM","Data quality","ETIM","ECLASS","Deduplication",[690],"pim",[692,693,694,695,696,697,698,699,700,701],"PIM data quality","ETIM classification LLM","eCl@ss classification automation","product data normalization","duplicate detection product data","product data deduplication embeddings","product data stewardship queue","ETIM vs eCl@ss","attribute normalization units","golden set product data evaluation",[703,706,709],{"name":704,"url":705},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":707,"url":708},"Record linkage","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRecord_linkage",{"name":710,"url":711},"ETIM classification","https:\u002F\u002Fwww.etim-international.com\u002F",[713,716,719,722,725,728,731,734,737,740,743,746],{"title":714,"url":715},"ETIM International: new release ETIM 10.0 (10 Dec 2024)","https:\u002F\u002Fwww.etim-international.com\u002Fnew-release-etim-10-0-available\u002F",{"title":717,"url":718},"ETIM International: model information","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002Fmodel-information\u002F",{"title":720,"url":721},"ETIM International: licence information","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002Flicense-info\u002F",{"title":723,"url":724},"Ketenstandaard: ETIM 11.0 is coming (3 Feb 2026)","https:\u002F\u002Fketenstandaard.nl\u002Fnieuws\u002Fetim-11-0-komt-eraan-tijd-om-voor-te-sorteren\u002F",{"title":726,"url":727},"ECLASS: releases (Release 16.0, 28 Nov 2025)","https:\u002F\u002Feclass.eu\u002Fen\u002Feclass-standard\u002Freleases",{"title":729,"url":730},"ECLASS: language versions","https:\u002F\u002Feclass.eu\u002Fen\u002Feclass-standard\u002Flicenses\u002Flanguage-versions",{"title":732,"url":733},"Peeters and Bizer: Using ChatGPT for entity matching (ADBIS 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.03423",{"title":735,"url":736},"Peeters et al.: WDC Products, a multi-dimensional entity matching benchmark (EDBT 2024)","https:\u002F\u002Farxiv.org\u002Fhtml\u002F2301.09521v2",{"title":738,"url":739},"Splink: probabilistic record linkage","https:\u002F\u002Fmoj-analytical-services.github.io\u002Fsplink\u002F",{"title":741,"url":742},"Pimcore: Data Quality Management","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FData_Quality_Management\u002F",{"title":744,"url":745},"Akeneo: understand data quality","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-understand-data-quality",{"title":747,"url":748},"SQLI: commerce search-first strategy (vendor case study)","https:\u002F\u002Fwww.sqli.com\u002Fint-en\u002Finsights\u002Fcommerce-search-first-strategy-impact","\u002Fimages\u002Fblog\u002Fpim-data-quality-llm\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpim-data-quality-llm\u002Fog.jpg",[80,81,82],"PIM data quality with LLMs: ETIM classification, normalization and dedup","How to raise PIM data quality with LLMs: ETIM and ECLASS classification, unit and language normalization, duplicate detection and a stewardship queue.","PIM data quality with LLMs: a table of rows with a magnifying glass over the one incomplete row.",{"slug":756,"published":682,"updated":6,"minutes":88,"category":8,"tags":757,"tagPages":760,"keywords":761,"about":772,"sources":779,"cover":811,"og":812,"expertise":78,"locales":813,"lang":80,"title":814,"description":815,"coverAlt":816},"supplier-data-onboarding-llm",[758,684,434,483,759],"Supplier onboarding","GTIN",[690,487],[762,763,764,765,766,767,768,769,770,771],"supplier data onboarding","LLM price list extraction","supplier catalog import PIM","BMEcat import","GTIN validation","supplier product data automation","PDF price list extraction","supplier data quality scorecard","cost per row LLM extraction","supplier onboarding automation B2B",[773,774,777],{"name":704,"url":705},{"name":775,"url":776},"Global Trade Item Number","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGlobal_Trade_Item_Number",{"name":434,"url":778},"https:\u002F\u002Fwww.bme.de\u002Fservices\u002Fbmecat\u002Fdownloads_BMEcat",[780,783,785,788,789,792,795,798,799,802,805,808],{"title":781,"url":782},"GS1: Everyone needs better product data (Global Data Model)","https:\u002F\u002Fwww.gs1.org\u002Fstandards\u002Fgs1-global-data-model\u002Feveryone-needs-better-product-data",{"title":784,"url":778},"BME: BMEcat downloads (version 2005.2)",{"title":786,"url":787},"ETIM International: exchange format (ETIM xChange)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002Fexchange-format\u002F",{"title":717,"url":718},{"title":790,"url":791},"GS1: check digit calculator","https:\u002F\u002Fwww.gs1.org\u002Fservices\u002Fcheck-digit-calculator",{"title":793,"url":794},"Pimcore: Data Importer","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FData_Importer\u002F",{"title":796,"url":797},"Akeneo: Supplier Data Manager","https:\u002F\u002Fhelp.akeneo.com\u002Fen_US\u002Fsupplier-data-manager",{"title":526,"url":527},{"title":800,"url":801},"Anthropic: Claude pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":803,"url":804},"GS1 US: data quality","https:\u002F\u002Fwww.gs1us.org\u002Fservices\u002Fdata-quality",{"title":806,"url":807},"GS1 US: National Data Quality Program","https:\u002F\u002Fwww.gs1us.org\u002Fservices\u002Fdata-quality\u002Fnational-data-quality-program",{"title":809,"url":810},"Unite: catalogue format BMEcat 1.2","https:\u002F\u002Funite.eu\u002Fen-gb\u002Fsupport\u002Fcatalogue-format-bmecat-1-2-xml","\u002Fimages\u002Fblog\u002Fsupplier-data-onboarding-llm\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fsupplier-data-onboarding-llm\u002Fog.jpg",[80,81,82],"Supplier data onboarding with LLMs: price lists, PDFs and certificates","How to onboard supplier product data with LLMs: deterministic BMEcat and Excel imports, PDF price list extraction, GTIN validation and supplier scorecards.","Supplier data onboarding with LLMs: mixed sheets pass through a funnel and come out as identical cards.",{"slug":818,"published":819,"updated":6,"minutes":88,"category":8,"tags":820,"tagPages":824,"keywords":825,"about":836,"sources":846,"cover":877,"og":878,"expertise":78,"locales":879,"lang":80,"title":880,"description":881,"coverAlt":882},"digital-product-passport-llm","2026-10-09",[821,822,823,483,684],"Digital Product Passport","ESPR","Compliance data",[487,690],[826,827,828,829,830,831,832,833,834,835],"digital product passport data extraction","digital product passport","ESPR delegated act 2026","battery passport 18 February 2027","DPP registry","GS1 Digital Link QR code","product compliance data LLM","supplier declaration extraction","recycled content declaration","DPP service provider",[837,840,843],{"name":838,"url":839},"Digital product passport","https:\u002F\u002Fsingle-market-economy.ec.europa.eu\u002Fsingle-market\u002Fdigital-product-passport_en",{"name":841,"url":842},"Ecodesign for Sustainable Products Regulation","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002FHTML\u002F?uri=CELEX:32024R1781",{"name":844,"url":845},"GS1 Digital Link","https:\u002F\u002Fwww.gs1.org\u002Fstandards\u002Fgs1-digital-link",[847,849,851,854,857,860,863,866,868,871,874],{"title":848,"url":842},"Regulation (EU) 2024\u002F1781 (ESPR), EUR-Lex",{"title":850,"url":839},"European Commission: Digital Product Passport",{"title":852,"url":853},"Commission Implementing Decision (EU) 2026\u002F1736 on harmonised DPP standards","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002FHTML\u002F?uri=CELEX:32026D1736",{"title":855,"url":856},"Commission Implementing Regulation (EU) 2026\u002F1778 on the DPP registry","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002FHTML\u002F?uri=CELEX:32026R1778",{"title":858,"url":859},"Regulation (EU) 2023\u002F1542 (Batteries), EUR-Lex","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002FHTML\u002F?uri=CELEX:32023R1542",{"title":861,"url":862},"Commission working plan COM(2025) 187 under ESPR","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002FHTML\u002F?uri=CELEX:52025DC0187",{"title":864,"url":865},"European Commission: CBAM certificate price","https:\u002F\u002Ftaxation-customs.ec.europa.eu\u002Fcarbon-border-adjustment-mechanism\u002Fprice-cbam-certificates_en",{"title":867,"url":845},"GS1: Digital Link standard",{"title":869,"url":870},"Publications Office: SCIP database information requirements","https:\u002F\u002Fop.europa.eu\u002Fen\u002Fpublication-detail\u002F-\u002Fpublication\u002F887091cb-0938-11ec-b5d3-01aa75ed71a1\u002Flanguage-en",{"title":872,"url":873},"CIRPASS-2 project","https:\u002F\u002Fcirpass2.eu\u002F",{"title":875,"url":876},"Vectara hallucination leaderboard","https:\u002F\u002Fgithub.com\u002Fvectara\u002Fhallucination-leaderboard\u002F","\u002Fimages\u002Fblog\u002Fdigital-product-passport-llm\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fdigital-product-passport-llm\u002Fog.jpg",[80,81,82],"Digital Product Passports with LLMs: extracting and assembling ESPR data","Where the Digital Product Passport stands in October 2026, which data a DPP record needs, and how LLMs extract supplier evidence without inventing values.","Digital Product Passports with LLMs: a product box with a code tag next to an open passport booklet.",{"slug":884,"published":885,"updated":408,"minutes":290,"category":8,"tags":886,"tagPages":891,"keywords":892,"about":903,"sources":910,"cover":943,"og":944,"expertise":78,"locales":945,"lang":80,"title":946,"description":947,"coverAlt":948},"b2b-punchout-cxml-oci","2026-10-08",[887,888,889,890,412],"Punchout","cXML","SAP OCI","eProcurement",[],[893,894,895,896,897,898,899,900,901,902],"punchout catalog","cxml punchout","sap oci interface","oci roundtrip","punchout setup request","secure oci","level 2 punchout","eprocurement punchout integration","punchout2go tradecentric","punchout catalog integration",[904,905,907],{"name":411,"url":432},{"name":888,"url":906},"https:\u002F\u002Fcxml.org\u002F",{"name":908,"url":909},"E-procurement","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FE-procurement",[911,913,916,919,922,925,928,931,934,937,940],{"title":912,"url":906},"cXML.org (cXML 1.2.071)",{"title":914,"url":915},"PunchOutCommerce: cXML PunchOutSetupRequest","https:\u002F\u002Fpunchoutcommerce.com\u002Fguides\u002Fpunchout\u002Fcxml-punchout-setup-request\u002F",{"title":917,"url":918},"PunchOutCommerce: cXML PunchOutOrderMessage","https:\u002F\u002Fpunchoutcommerce.com\u002Fguides\u002Fpunchout\u002Fcxml-punchout-order-message\u002F",{"title":920,"url":921},"PunchOutCommerce: OCI RoundTrip","https:\u002F\u002Fpunchoutcommerce.com\u002Fguides\u002Fpunchout\u002Foci-roundtrip\u002F",{"title":923,"url":924},"SAP: Open Catalog Interface 5.0","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsrm\u002F1.0\u002Fen-US\u002Fattachments\u002F3362936504\u002FOCI_50_EN20130121.pdf",{"title":926,"url":927},"SAP Help: OCI catalogs in S\u002F4HANA Plant Maintenance","https:\u002F\u002Fhelp.sap.com\u002Fdocs\u002FSAP_S4HANA_ON-PREMISE\u002F79e86803745943368f3beb4a7d0bca2a\u002F1dcfb65334e6b54ce10000000a174cb4.html",{"title":929,"url":930},"Mercateo\u002FUnite: technical information on the OCI interface","https:\u002F\u002Fwww.mercateo.com\u002Fsupport\u002Fwp-content\u002Fuploads\u002F2025\u002F02\u002FTechnical-Information-on-the-OCI-Interface-2.7-EN.pdf",{"title":932,"url":933},"Amazon Business: punchout integration instructions","https:\u002F\u002Fstatic-assets.business.amazon.com\u002Fassets\u002Fglobal\u002Fdocuments\u002Fguides\u002FAmazon-Business-Punchout-Integration-Instructions.pdf",{"title":935,"url":936},"Amazon Business: punchout","https:\u002F\u002Fbusiness.amazon.com\u002Fen\u002Fsolutions\u002Fsystems-integration\u002Fpunchout",{"title":938,"url":939},"TradeCentric: pricing","https:\u002F\u002Ftradecentric.com\u002Fpricing\u002F",{"title":941,"url":942},"OWASP: XML External Entity Prevention Cheat Sheet","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FXML_External_Entity_Prevention_Cheat_Sheet.html","\u002Fimages\u002Fblog\u002Fb2b-punchout-cxml-oci\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fb2b-punchout-cxml-oci\u002Fog.jpg",[80,81,82],"Punchout catalogs explained: cXML, SAP OCI and the round trip to the buyer’s ERP","How punchout catalogs work: the cXML PunchOut and SAP OCI round trips, Secure OCI, what a supplier shop must implement, and when to buy a gateway.","Punchout catalogs (cXML, OCI): a cart travels from one building to another and returns filled.",{"slug":950,"published":885,"updated":6,"minutes":290,"category":8,"tags":951,"tagPages":956,"keywords":957,"about":968,"sources":976,"cover":1011,"og":1012,"expertise":78,"locales":1013,"lang":80,"title":1014,"description":1015,"coverAlt":1016},"b2b-order-sync-erp",[952,953,557,954,955],"ERP integration","SAP","Outbox pattern","Reconciliation",[],[958,959,960,961,962,963,964,965,966,967],"order sync between shop and ERP","sap sales order api","odata sales order s\u002F4hana","idoc orders05","transactional outbox pattern","idempotency key","erp reconciliation report","sap event mesh sales order created","bapi_salesorder_createfromdat2","shop erp order integration",[969,970,973],{"name":577,"url":578},{"name":971,"url":972},"Idempotence","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIdempotence",{"name":974,"url":975},"Transactional outbox pattern","https:\u002F\u002Fmicroservices.io\u002Fpatterns\u002Fdata\u002Ftransactional-outbox.html",[977,980,983,986,989,992,995,998,1000,1002,1005,1008],{"title":978,"url":979},"SAP Community: posting sales orders into S\u002F4HANA Cloud via API (2018)","https:\u002F\u002Fcommunity.sap.com\u002Ft5\u002Fenterprise-resource-planning-blog-posts-by-sap\u002Fposting-sales-orders-into-s-4hana-cloud-api-part-1\u002Fba-p\u002F13350199",{"title":981,"url":982},"SAP Community: S\u002F4HANA OData V4 APIs quick reference (15 Feb 2026)","https:\u002F\u002Fcommunity.sap.com\u002Ft5\u002Ffinancial-management-blog-posts-by-sap\u002Fsap-s-4-hana-odata-v4-apis-available-quick-reference-and-available-in-sap\u002Fba-p\u002F14328827",{"title":984,"url":985},"SAP Help: EDI inbound processing, sales order","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsaphelp_nw70\u002F7.0.12\u002Fja-JP\u002Fdc\u002F6b7cac43d711d1893e0000e8323c4f\u002Fcontent.htm",{"title":987,"url":988},"SAP Help: ALE inbound processing","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsaphelp_nw75\u002F7.5.5\u002Fen-US\u002F4d\u002F51189400071c86e10000000a42189b\u002Fcontent.htm",{"title":990,"url":991},"SAP Community: custom fields in sales document BAPIs (2024)","https:\u002F\u002Fcommunity.sap.com\u002Ft5\u002Fenterprise-resource-planning-blog-posts-by-sap\u002Fhow-to-use-custom-fields-in-sales-document-bapis\u002Fba-p\u002F13721645",{"title":993,"url":994},"Microsoft Learn: Business Central API v2.0, create salesOrders","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fdynamics365\u002Fbusiness-central\u002Fdev-itpro\u002Fapi-reference\u002Fv2.0\u002Fapi\u002Fdynamics_salesorder_create",{"title":996,"url":997},"Infor Developer Portal: get all sales orders","https:\u002F\u002Fdeveloper.infor.com\u002Fbusiness-obj-v1\u002Fsales-order\u002Fget-all-sales-orders",{"title":999,"url":975},"microservices.io: transactional outbox",{"title":1001,"url":589},"Stripe API reference: idempotent requests",{"title":1003,"url":1004},"Confluent: Kafka message delivery guarantees","https:\u002F\u002Fdocs.confluent.io\u002Fkafka\u002Fdesign\u002Fdelivery-semantics.html",{"title":1006,"url":1007},"Mercari Engineering: payment reconciliation (2021)","https:\u002F\u002Fengineering.mercari.com\u002Fen\u002Fblog\u002Fentry\u002F20211222-1df9e3a553\u002F",{"title":1009,"url":1010},"OpenTelemetry: messaging spans semantic conventions","https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fmessaging\u002Fmessaging-spans\u002F","\u002Fimages\u002Fblog\u002Fb2b-order-sync-erp\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fb2b-order-sync-erp\u002Fog.jpg",[80,81,82],"Order sync between shop and ERP: SAP APIs, idempotency and reconciliation","How to sync orders between a B2B shop and the ERP: SAP OData, IDoc and BAPI options, the outbox pattern, idempotency keys and routine reconciliation.","Order sync between shop and ERP: two boxes joined by a loop of arrows carrying an envelope and a receipt.",{"slug":1018,"published":1019,"minutes":88,"category":8,"tags":1020,"tagPages":1023,"keywords":1024,"about":1032,"sources":1039,"cover":1061,"og":1062,"expertise":1063,"locales":1064,"lang":80,"title":1065,"description":1066,"coverAlt":1067},"llms-txt-vs-markdown-content-negotiation","2026-10-07",[1021,1022,615,14],"llms.txt","Content negotiation",[617,17],[1021,1025,1026,1027,1028,1029,1030,1031],"markdown for agents","content negotiation","AI crawlers","generative engine optimization","Accept text\u002Fmarkdown header","llms-full.txt","agent-ready website",[1033,1036],{"name":1034,"url":1035},"Markdown","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMarkdown",{"name":1037,"url":1038},"Hypertext Transfer Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHypertext_Transfer_Protocol",[1040,1043,1046,1049,1052,1055,1058],{"title":1041,"url":1042},"llmstxt.org: The \u002Fllms.txt file (proposal, version 2)","https:\u002F\u002Fllmstxt.org\u002F",{"title":1044,"url":1045},"llmstxt.org: Changes from v1 to v2","https:\u002F\u002Fllmstxt.org\u002Fchanges.html",{"title":1047,"url":1048},"Cloudflare changelog: Markdown for Agents (12 February 2026)","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fchangelog\u002Fpost\u002F2026-02-12-markdown-for-agents\u002F",{"title":1050,"url":1051},"Cloudflare docs: Markdown for Agents","https:\u002F\u002Fdevelopers.cloudflare.com\u002Ffundamentals\u002Freference\u002Fmarkdown-for-agents\u002F",{"title":1053,"url":1054},"Ahrefs: 137K sites analyzed, 97% of llms.txt files never get read (June 2026)","https:\u002F\u002Fahrefs.com\u002Fblog\u002Fllmstxt-study\u002F",{"title":1056,"url":1057},"Checkly: The current state of content negotiation for AI agents (February 2026)","https:\u002F\u002Fwww.checklyhq.com\u002Fblog\u002Fstate-of-ai-agent-content-negotation\u002F",{"title":1059,"url":1060},"Suganthan: tracking Cloudflare Markdown for Agents on one site","https:\u002F\u002Fsuganthan.com\u002Fblog\u002Fcloudflare-markdown-for-agents\u002F","\u002Fimages\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation\u002Fog.jpg","ai-engineer",[80,81,82],"llms.txt vs Markdown content negotiation: what agents actually fetch","llms.txt is a proposal, Markdown content negotiation is a header. What AI agents fetch, what the logs show, and how to serve both from Nuxt and nginx.","llms.txt vs Markdown content negotiation: a robot at a counter reaches past a short menu card for a full page.",{"slug":1069,"published":1019,"updated":6,"minutes":1070,"category":8,"tags":1071,"tagPages":1075,"keywords":1076,"about":1086,"sources":1095,"cover":1132,"og":1133,"expertise":78,"locales":1134,"lang":80,"title":1135,"description":1136,"coverAlt":1137},"b2b-pricing-engine",12,[1072,1073,953,614,1074],"Pricing","Spryker","VAT",[],[1077,1078,1079,1080,1081,1082,1083,1084,1085],"b2b pricing engine","customer specific pricing b2b","spryker price dimensions customer specific","sap condition technique pricing","commercetools price selection","price cache invalidation customer group","b2b volume pricing tiers","price audit trail explainability","vat rounding invoice line items",[1087,1089,1092],{"name":1072,"url":1088},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPricing",{"name":1090,"url":1091},"Value-added tax","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FValue-added_tax",{"name":1093,"url":1094},"Cache invalidation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCache_invalidation",[1096,1099,1102,1105,1108,1111,1114,1117,1120,1123,1126,1129],{"title":1097,"url":1098},"Spryker docs: prices feature overview (Sep 2026)","https:\u002F\u002Fraw.githubusercontent.com\u002Fspryker\u002Fspryker-docs\u002Fmaster\u002Fdocs\u002Fpbc\u002Fall\u002Fprice-management\u002Flatest\u002Fbase-shop\u002Fprices-feature-overview\u002Fprices-feature-overview.md",{"title":1100,"url":1101},"Spryker docs: price explosion and ERP-owned pricing in B2B (Sep 2026)","https:\u002F\u002Fraw.githubusercontent.com\u002Fspryker\u002Fspryker-docs\u002Fmaster\u002Fdocs\u002Fpbc\u002Fall\u002Fprice-management\u002Flatest\u002Fbase-shop\u002Ftutorials-and-howtos\u002Fhandle-price-explosion-and-erp-owned-pricing-in-b2b.md",{"title":1103,"url":1104},"Spryker docs: volume prices overview","https:\u002F\u002Fraw.githubusercontent.com\u002Fspryker\u002Fspryker-docs\u002Fmaster\u002Fdocs\u002Fpbc\u002Fall\u002Fprice-management\u002Flatest\u002Fbase-shop\u002Fprices-feature-overview\u002Fvolume-prices-overview.md",{"title":1106,"url":1107},"commercetools docs: pricing and discounts overview","https:\u002F\u002Fdocs.commercetools.com\u002Fapi\u002Fpricing-and-discounts-overview",{"title":1109,"url":1110},"SAP Learning: introducing the condition technique","https:\u002F\u002Flearning.sap.com\u002Fcourses\u002Fconfiguring-pricing-in-sap-s-4hana-sales\u002Fintroducing-the-condition-technique_dce0f313-dee6-470e-8851-3f1773cb5d45",{"title":1112,"url":1113},"Pimcore docs: price systems and getting prices (2026.3)","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FEcommerce_Framework\u002FWorking_with_Prices\u002FPrice_Systems_and_getting_Prices\u002F",{"title":1115,"url":1116},"Adobe Experience League: shared catalog pricing structure (Oct 2026)","https:\u002F\u002Fexperienceleague.adobe.com\u002Fen\u002Fdocs\u002Fcommerce-admin\u002Fb2b\u002Fshared-catalogs\u002Fdefine\u002Fcatalog-shared-pricing-structure",{"title":1118,"url":1119},"Shopify Help Center: B2B quantity rules and volume pricing","https:\u002F\u002Fhelp.shopify.com\u002Fen\u002Fmanual\u002Fb2b\u002Fcatalogs\u002Fquantity-pricing",{"title":1121,"url":1122},"Varnish libvmod-xkey README","https:\u002F\u002Fraw.githubusercontent.com\u002Fvarnish\u002Flibvmod-xkey\u002Fmaster\u002FREADME.rst",{"title":1124,"url":1125},"Opinion of the Advocate General in Case C-484\u002F06 (Koninklijke Ahold)","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002FHTML\u002F?uri=CELEX:62006CC0484",{"title":1127,"url":1128},"HMRC internal manual VATREC12030: rounding of VAT","https:\u002F\u002Fwww.gov.uk\u002Fhmrc-internal-manuals\u002Fvat-trader-records\u002Fvatrec12030",{"title":1130,"url":1131},"Playwright docs: snapshot testing","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Ftest-snapshots","\u002Fimages\u002Fblog\u002Fb2b-pricing-engine\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fb2b-pricing-engine\u002Fog.jpg",[80,81,82],"B2B pricing engines: customer-specific prices, caching and audits","How B2B platforms resolve customer-specific prices, how to cache them without leaks, explain them in a dispute, test them and round VAT.","B2B pricing engines: four price tags in a descending staircase, the first one highlighted.",{"slug":1139,"published":1019,"updated":6,"minutes":1070,"category":8,"tags":1140,"tagPages":1146,"keywords":1147,"about":1157,"sources":1165,"cover":1202,"og":1203,"expertise":78,"locales":1204,"lang":80,"title":1205,"description":1206,"coverAlt":1207},"b2b-rfq-quote-management",[1141,1142,1143,1144,1145],"B2B quotes","RFQ workflow","Quote versioning","Order conversion","Quote expiry",[],[1148,1142,1149,1150,1151,1152,1153,1154,1155,1156],"B2B quote management","request for quote e-commerce","quote to order conversion","quote versioning","quote expiry capture","Spryker quote request","negotiable quotes Adobe Commerce","quote approval workflow","quote data model",[1158,1159,1162],{"name":501,"url":502},{"name":1160,"url":1161},"Finite-state machine","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFinite-state_machine",{"name":1163,"url":1164},"Audit trail","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAudit_trail",[1166,1169,1172,1175,1178,1181,1184,1187,1190,1193,1196,1199],{"title":1167,"url":1168},"Spryker: request for quote feature","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fpbc\u002Fall\u002Frequest-for-quote\u002Flatest\u002Frequest-for-quote",{"title":1170,"url":1171},"Spryker: quote request import file details","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fpbc\u002Fall\u002Frequest-for-quote\u002Flatest\u002Fimport-and-export-data\u002Ffile-details-quote-request.csv",{"title":1173,"url":1174},"Spryker: Approval Process feature overview","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fpbc\u002Fall\u002Fcart-and-checkout\u002Flatest\u002Fbase-shop\u002Ffeature-overviews\u002Fapproval-process-feature-overview",{"title":1176,"url":1177},"Spryker: Purchasing Control feature overview","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fpbc\u002Fall\u002Fcart-and-checkout\u002Flatest\u002Fbase-shop\u002Ffeature-overviews\u002Fpurchasing-control-feature-overview",{"title":1179,"url":1180},"Adobe Commerce B2B: negotiable quotes","https:\u002F\u002Fexperienceleague.adobe.com\u002Fen\u002Fdocs\u002Fcommerce-admin\u002Fb2b\u002Fquotes\u002Fquotes",{"title":1182,"url":1183},"Adobe Commerce B2B: configure quotes","https:\u002F\u002Fexperienceleague.adobe.com\u002Fen\u002Fdocs\u002Fcommerce-admin\u002Fb2b\u002Fquotes\u002Fconfigure-quotes",{"title":1185,"url":1186},"SAP Commerce: Commerce Quotes (2205 documentation)","https:\u002F\u002Fhelp.sap.com\u002Fdocs\u002FSAP_COMMERCE\u002F9d346683b0084da2938be8a285c0c27a\u002F18f87a040b814781a459fe60fb28c912.html",{"title":1188,"url":1189},"SAP Commerce: quote statuses (2205 documentation)","https:\u002F\u002Fhelp.sap.com\u002Fdocs\u002FSAP_COMMERCE\u002F4c33bf189ab9409e84e589295c36d96e\u002F5958905dbb1e4e62b117f5448bb91e63.html",{"title":1191,"url":1192},"Shopware: B2B Components","https:\u002F\u002Fdocs.shopware.com\u002Fen\u002Fshopware-6-en\u002Fcommercial-features\u002Fb2b-components",{"title":1194,"url":1195},"Shopware: quotes management entities and schema","https:\u002F\u002Fdeveloper.shopware.com\u002Fdocs\u002Fproducts\u002Fextensions\u002Fb2b-components\u002Fquotes-management\u002Fconcepts\u002Fentities-and-schema",{"title":1197,"url":1198},"Odoo 20 documentation: quotation deadline","https:\u002F\u002Fwww.odoo.com\u002Fdocumentation\u002F20.0\u002Fapplications\u002Fsales\u002Fsales\u002Fsales_quotations\u002Fdeadline.html",{"title":1200,"url":1201},"Pimcore: E-Commerce Framework bundle (GPL version end of life)","https:\u002F\u002Fgithub.com\u002Fpimcore\u002Fecommerce-framework-bundle","\u002Fimages\u002Fblog\u002Fb2b-rfq-quote-management\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fb2b-rfq-quote-management\u002Fog.jpg",[80,81,82],"RFQ and quote management in B2B: workflow, versioning and order conversion","How to design RFQ and quote management in B2B: states, versioned quotes, price overrides, expiry rules, order conversion and a build checklist.","RFQ and quote management in B2B: three document versions in a row with a clock above the last.",{"slug":1209,"published":1210,"updated":6,"minutes":1070,"category":8,"tags":1211,"tagPages":1215,"keywords":1216,"about":1226,"sources":1232,"cover":1265,"og":1266,"expertise":78,"locales":1267,"lang":80,"title":1268,"description":1269,"coverAlt":1270},"llm-product-data-enrichment","2026-10-06",[1212,684,1213,485,1214],"Product data enrichment","Structured outputs","Provenance",[690],[1217,1218,1219,1220,1221,1222,1223,1224,1225],"llm product data enrichment","ai product description generator pim","attribute extraction from datasheets llm","pimcore ai data enrichment","product data quality llm pipeline","structured outputs json schema extraction","human review queue product data","golden dataset field accuracy evaluation","cost per sku llm enrichment",[1227,1228,1229],{"name":704,"url":705},{"name":507,"url":508},{"name":1230,"url":1231},"Data provenance","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FData_provenance",[1233,1236,1239,1242,1245,1248,1251,1254,1256,1259,1262],{"title":1234,"url":1235},"Google LangExtract, GitHub README (v1.6.0)","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Flangextract",{"title":1237,"url":1238},"Anthropic: reduce hallucinations","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Ftest-and-evaluate\u002Fstrengthen-guardrails\u002Freduce-hallucinations",{"title":1240,"url":1241},"Microsoft Learn: Azure OpenAI structured outputs (updated Aug 2026)","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-services\u002Fopenai\u002Fhow-to\u002Fstructured-outputs",{"title":1243,"url":1244},"DocILE: document information localization and extraction (ICDAR 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2302.05658",{"title":1246,"url":1247},"Pimcore docs: Datahub","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FDatahub\u002F",{"title":1249,"url":1250},"Pimcore docs: Copilot","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FCopilot\u002F",{"title":1252,"url":1253},"Google Search Central: spam policies","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fessentials\u002Fspam-policies",{"title":1255,"url":133},"EU AI Act, Article 50 (artificialintelligenceact.eu)",{"title":1257,"url":1258},"EUR-Lex: Directive (EU) 2024\u002F825 amending the Unfair Commercial Practices Directive","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002F?uri=CELEX%3A32024L0825",{"title":1260,"url":1261},"Google AI for Developers: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":1263,"url":1264},"OpenRouter: models API (rates as listed, Oct 2026)","https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1\u002Fmodels","\u002Fimages\u002Fblog\u002Fllm-product-data-enrichment\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-product-data-enrichment\u002Fog.jpg",[80,81,82],"LLM product data enrichment: attributes, evidence and review","Grounded LLM enrichment for PIM attributes and copy: source spans, schema-checked output, confidence routing, provenance and cost per 1,000 SKUs.","LLM product data enrichment: a plain product card becomes a filled card with tags.",{"slug":1272,"published":1210,"updated":6,"minutes":7,"category":8,"tags":1273,"tagPages":1278,"keywords":1279,"about":1290,"sources":1298,"cover":1334,"og":1335,"expertise":78,"locales":1336,"lang":80,"title":1337,"description":1338,"coverAlt":1339},"shop-search-analytics",[1274,1275,1276,1277,558],"Search analytics","Zero-result search","Position bias","Search logs",[560],[1280,1281,1282,1283,1284,1285,1286,1287,1288,1289],"shop search analytics","zero result rate","zero result search queries","site search metrics","search click-through rate position bias","query intent classification LLM","search abandonment rate","synonyms from zero-result queries","interleaving vs A\u002FB testing search","search log retention GDPR",[1291,1294,1297],{"name":1292,"url":1293},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":1295,"url":1296},"Learning to rank","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLearning_to_rank",{"name":580,"url":581},[1299,1302,1305,1308,1311,1314,1317,1320,1323,1326,1329,1331],{"title":1300,"url":1301},"Algolia: search analytics concepts (metrics and definitions)","https:\u002F\u002Fwww.algolia.com\u002Fdoc\u002Fguides\u002Fsearch-analytics\u002Fconcepts\u002F",{"title":1303,"url":1304},"Algolia: query aggregation and userToken","https:\u002F\u002Fwww.algolia.com\u002Fdoc\u002Fguides\u002Fsearch-analytics\u002Fconcepts\u002Fquery-aggregation\u002F",{"title":1306,"url":1307},"User Behavior Insights (UBI) specification 1.3.0","https:\u002F\u002Fgithub.com\u002Fo19s\u002Fubi",{"title":1309,"url":1310},"Google Research: position bias estimation for unbiased learning to rank in personal search (WSDM 2018)","https:\u002F\u002Fresearch.google\u002Fpubs\u002Fposition-bias-estimation-for-unbiased-learning-to-rank-in-personal-search\u002F",{"title":1312,"url":1313},"eBay: click propensity estimation for e-commerce search (SPIRE 2019)","https:\u002F\u002Farxiv.org\u002Fabs\u002F1812.09338",{"title":1315,"url":1316},"Chapelle, Joachims, Radlinski, Yue: interleaved search evaluation (TOIS 2012)","https:\u002F\u002Fwww.cs.cornell.edu\u002Fpeople\u002Ftj\u002Fpublications\u002Fchapelle_etal_12a.pdf",{"title":1318,"url":1319},"Shopping Queries Dataset (ESCI), KDD Cup 2022","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":1321,"url":1322},"BERTopic: neural topic modeling with class-based TF-IDF","https:\u002F\u002Farxiv.org\u002Fabs\u002F2203.05794",{"title":1324,"url":1325},"Hello Retail: ecommerce search statistics (24 Feb 2026)","https:\u002F\u002Fhelloretail.com\u002Fen\u002Fblog\u002F2026-02-24-ecommerce-search-statistics\u002F",{"title":1327,"url":1328},"Algolia: adding synonyms","https:\u002F\u002Fwww.algolia.com\u002Fdoc\u002Fguides\u002Fmanaging-results\u002Foptimize-search-results\u002Fadding-synonyms\u002F",{"title":591,"url":1330},"https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj",{"title":1332,"url":1333},"Arbeitsverfassungsgesetz § 96, RIS (consolidated text)","https:\u002F\u002Fwww.ris.bka.gv.at\u002FNormDokument.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10008329&Paragraf=96","\u002Fimages\u002Fblog\u002Fshop-search-analytics\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fshop-search-analytics\u002Fog.jpg",[80,81,82],"Shop search analytics: what to log, and the zero-result fixes to ship first","Instrument on-site search with one event schema, five metrics with targets, position-bias-aware reading, a weekly zero-result review and GDPR limits.","Shop search analytics: a magnifying glass beside a bar chart with one empty bar.",{"slug":1341,"published":1342,"minutes":290,"category":8,"tags":1343,"tagPages":1349,"keywords":1350,"about":1358,"sources":1367,"cover":1374,"og":1375,"expertise":213,"locales":1376,"lang":80,"title":1377,"description":1378,"coverAlt":1379},"multiplayer-sailing-game-threejs","2026-10-05",[1344,1345,1346,1347,1348],"three.js","WebGL","GLSL","WebSockets","Game development",[],[1351,1352,1353,1354,1355,1356,1357,1346],"three.js game","three.js multiplayer","Gerstner waves","WebGL ocean shader","day night cycle three.js","WebSocket relay","browser game development",[1359,1362,1364],{"name":1360,"url":1361},"Three.js","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FThree.js",{"name":1345,"url":1363},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebGL",{"name":1365,"url":1366},"WebSocket","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[1368,1371],{"title":1369,"url":1370},"GPU Gems, Chapter 1: Effective Water Simulation from Physical Models","https:\u002F\u002Fdeveloper.nvidia.com\u002Fgpugems\u002Fgpugems\u002Fpart-i-natural-effects\u002Fchapter-1-effective-water-simulation-physical-models",{"title":1372,"url":1373},"RFC 6455: The WebSocket Protocol","https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc6455","\u002Fimages\u002Fblog\u002Fmultiplayer-sailing-game-threejs\u002Fdusk.webp","\u002Fimages\u002Fblog\u002Fmultiplayer-sailing-game-threejs\u002Fog.jpg",[80,81,82],"Building a multiplayer 3D sailing game with plain three.js","Multiplayer 3D sailing in plain three.js: Gerstner waves shared by GPU and CPU, one sky function for sky, water and fog, and a tiny WebSocket relay.","Multiplayer sailing game in three.js: two matching wavy rails parallel across the frame, a half-divided circle above them.",{"slug":1381,"published":1342,"updated":6,"minutes":145,"category":8,"tags":1382,"tagPages":1388,"keywords":1390,"about":1401,"sources":1408,"cover":1445,"og":1446,"expertise":78,"locales":1447,"lang":80,"title":1448,"description":1449,"coverAlt":1450},"visual-search-shop",[1383,1384,1385,1386,1387],"Visual search","Image embeddings","OCR","Part numbers","Hybrid search",[1389],"hybrid-search",[1391,1392,1393,1394,1395,1396,1397,1398,1399,1400],"visual search for B2B e-commerce","image search product catalog","CLIP SigLIP image embeddings","photo to part number","visual search shop implementation","multimodal embeddings shop","spare part identification AI","OCR part number from photo","image similarity search pgvector","visual add to cart",[1402,1404,1405],{"name":1383,"url":1403},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVisual_search",{"name":504,"url":505},{"name":1406,"url":1407},"Contrastive learning","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContrastive_learning",[1409,1412,1415,1418,1421,1424,1427,1430,1433,1436,1439,1442],{"title":1410,"url":1411},"CLIP: Learning Transferable Visual Models From Natural Language Supervision (2021)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2103.00020",{"title":1413,"url":1414},"Hugging Face: SigLIP 2 release (2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Fsiglip2",{"title":1416,"url":1417},"MIEB: Massive Image Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.10471",{"title":1419,"url":1420},"jina-clip-v2 model card (CC-BY-NC-4.0)","https:\u002F\u002Fhuggingface.co\u002Fjinaai\u002Fjina-clip-v2",{"title":1422,"url":1423},"pgvector: README","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":1425,"url":1426},"Spryker docs: Search by Image","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fpbc\u002Fall\u002Fai-commerce\u002Flatest\u002Fsearch-by-image",{"title":1428,"url":1429},"Spryker docs: Visual Add to Cart","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fdg\u002Fdev\u002Fai\u002Fai-commerce\u002Fvisual-add-to-cart\u002Fvisual-add-to-cart",{"title":1431,"url":1432},"Google Cloud: Vision API pricing","https:\u002F\u002Fcloud.google.com\u002Fvision\u002Fpricing",{"title":1434,"url":1435},"Voyage AI: pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":1437,"url":1438},"python-stdnum: EAN, UPC and GTIN module","https:\u002F\u002Farthurdejong.org\u002Fpython-stdnum\u002Fdoc\u002F1.20\u002Fstdnum.ean.html",{"title":1440,"url":1441},"Elasticsearch: fuzzy query","https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Freference\u002Fquery-languages\u002Fquery-dsl\u002Fquery-dsl-fuzzy-query",{"title":1443,"url":1444},"SymSpell (GitHub)","https:\u002F\u002Fgithub.com\u002Fwolfgarbe\u002FSymSpell","\u002Fimages\u002Fblog\u002Fvisual-search-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fvisual-search-shop\u002Fog.jpg",[80,81,82],"Visual search for B2B shops: image embeddings, part numbers and honest limits","Visual search for a B2B shop: image embeddings, OCR of part numbers, image-to-text lookups, hybrid filters, cost and evaluation on your own photos.","Visual search for B2B shops: a camera photographs a part and finds the matching tile in a grid.",{"slug":1452,"published":1342,"updated":289,"minutes":145,"category":8,"tags":1453,"tagPages":1456,"keywords":1457,"about":1468,"sources":1478,"cover":1513,"og":1514,"expertise":213,"locales":1515,"lang":80,"title":1516,"description":1517,"coverAlt":1518},"nuxt-caching-isr-commerce",[14,614,1454,1455,1093],"ISR","Headless commerce",[17],[1458,1459,1460,1461,1462,1463,1464,1465,1466,1467],"nuxt route rules caching","nuxt isr","nitro cache swr","cache invalidation purge by cache tag","nuxt isr cloudflare","stale while revalidate commerce","headless commerce caching","vercel isr pricing","cdn cache key vary","personalized prices cached pages",[1469,1472,1475],{"name":1470,"url":1471},"Content delivery network","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContent_delivery_network",{"name":1473,"url":1474},"Cache (computing)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCache_(computing)",{"name":1476,"url":1477},"Static site generator","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStatic_site_generator",[1479,1482,1485,1488,1491,1494,1497,1500,1503,1506,1509,1512],{"title":1480,"url":1481},"Nuxt docs: rendering modes and route rules (v4)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":1483,"url":1484},"Nuxt blog: Nuxt 4.3 release (ISR and SWR payload extraction)","https:\u002F\u002Fnuxt.com\u002Fblog\u002Fv4-3",{"title":1486,"url":1487},"Nitro docs: caching","https:\u002F\u002Fnitro.build\u002Fguide\u002Fcache",{"title":1489,"url":1490},"Cloudflare docs: default cache behavior","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcache\u002Fconcepts\u002Fdefault-cache-behavior\u002F",{"title":1492,"url":1493},"Cloudflare docs: purge by tags","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcache\u002Fhow-to\u002Fpurge-cache\u002Fpurge-by-tags\u002F",{"title":1495,"url":1496},"Cloudflare docs: Workers Cache","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers\u002Fcache\u002F",{"title":1498,"url":1499},"Cloudflare docs: cache responses (CF-Cache-Status)","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcache\u002Fconcepts\u002Fcache-responses\u002F",{"title":1501,"url":1502},"Vercel docs: incremental static regeneration","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fincremental-static-regeneration",{"title":1504,"url":1505},"Vercel docs: response headers (x-vercel-cache)","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fheaders\u002Fresponse-headers",{"title":1507,"url":1508},"Shopify docs: Hydrogen caching strategies","https:\u002F\u002Fshopify.dev\u002Fdocs\u002Fstorefronts\u002Fheadless\u002Fhydrogen\u002Fcaching",{"title":1510,"url":1511},"RFC 5861: HTTP Cache-Control extensions for stale content","https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc5861",{"title":591,"url":1330},"\u002Fimages\u002Fblog\u002Fnuxt-caching-isr-commerce\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-caching-isr-commerce\u002Fog.jpg",[80,81,82],"Caching a headless commerce front end in Nuxt: route rules, ISR and purge","Caching a headless commerce front end in Nuxt: route rules, Nitro and CDN keys, ISR limits, tag purge, and keeping customer prices out of shared caches.","Nuxt caching for headless commerce: a page slides out of stacked cache trays, with a clock at the side.",{"slug":1520,"published":1521,"updated":289,"minutes":145,"category":8,"tags":1522,"tagPages":1526,"keywords":1527,"about":1538,"sources":1547,"cover":1584,"og":1585,"expertise":213,"locales":1586,"lang":80,"title":1587,"description":1588,"coverAlt":1589},"nuxt-security-module","2026-10-02",[14,1523,1524,341,1525],"Content Security Policy","HTTP security headers","Nitro",[17],[1528,1529,1530,1531,1532,1533,1534,1535,1536,1537],"nuxt security module","nuxt content security policy nonce","nuxt security headers","nitro route rules security","nuxt rate limiter","nuxt cors server routes","csp report-uri nuxt","nuxt csrf protection","secure nuxt app checklist","nuxt csp strict-dynamic breakage",[1539,1541,1544],{"name":1523,"url":1540},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContent_Security_Policy",{"name":1542,"url":1543},"Cross-site scripting","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCross-site_scripting",{"name":1545,"url":1546},"Cross-origin resource sharing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCross-origin_resource_sharing",[1548,1551,1554,1557,1560,1563,1566,1569,1572,1575,1578,1581],{"title":1549,"url":1550},"Nuxt Security README (main branch)","https:\u002F\u002Fgithub.com\u002FBaroshem\u002Fnuxt-security\u002Fblob\u002Fmain\u002FREADME.md",{"title":1552,"url":1553},"Nuxt Security default configuration (src\u002FdefaultConfig.ts)","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fsrc\u002FdefaultConfig.ts",{"title":1555,"url":1556},"Nuxt Security docs: Content Security Policy","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F2.headers\u002F1.csp.md",{"title":1558,"url":1559},"Nuxt Security docs: rate limiter","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F3.middleware\u002F1.rate-limiter.md",{"title":1561,"url":1562},"Nuxt Security docs: CORS handler","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F3.middleware\u002F4.cors-handler.md",{"title":1564,"url":1565},"Nuxt Security docs: CSRF","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F3.middleware\u002F7.csrf.md",{"title":1567,"url":1568},"Nuxt Security docs: hooks","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F5.advanced\u002F4.hooks.md",{"title":1570,"url":1571},"Nuxt Security docs: security headers","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F5.advanced\u002F5.security-headers.md",{"title":1573,"url":1574},"Nuxt Security docs: improving security","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F5.advanced\u002F7.improve-security.md",{"title":1576,"url":1577},"Nuxt Security release v2.6.0 (12 May 2026)","https:\u002F\u002Fgithub.com\u002FBaroshem\u002Fnuxt-security\u002Freleases\u002Ftag\u002Fv2.6.0",{"title":1579,"url":1580},"MDN: HTTP Observatory","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fobservatory",{"title":1582,"url":1583},"Playwright: Response class","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fapi\u002Fclass-response","\u002Fimages\u002Fblog\u002Fnuxt-security-module\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-security-module\u002Fog.jpg",[80,81,82],"Locking down a Nuxt app: CSP, headers and rate limits with Nuxt Security","How the Nuxt Security module behaves in practice: safe defaults, strict mode trade-offs, nonce CSP in SSR and SSG, route rules and limits.","Nuxt Security module: a shield with three locks guards a browser window.",{"slug":1591,"published":1521,"updated":6,"minutes":1070,"category":8,"tags":1592,"tagPages":1598,"keywords":1599,"about":1610,"sources":1620,"cover":1657,"og":1658,"expertise":213,"locales":1659,"lang":80,"title":1660,"description":1661,"coverAlt":1662},"vue-accessible-components",[1593,1594,1595,1596,1597],"Vue accessibility","WCAG 2.2","Focus management","Live regions","Component testing",[],[1600,1601,1602,1603,1604,1605,1606,1607,1608,1609],"accessible vue components","vue accessibility wcag 2.2","vue focus management modal","aria-live vue async","reka ui accessibility","eslint-plugin-vuejs-accessibility","axe-core playwright vue","vue combobox accessibility","wcag target size 24px","spa route change announcement accessibility",[1611,1614,1617],{"name":1612,"url":1613},"Web Content Accessibility Guidelines","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_Content_Accessibility_Guidelines",{"name":1615,"url":1616},"Screen reader","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FScreen_reader",{"name":1618,"url":1619},"Single-page application","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSingle-page_application",[1621,1624,1627,1630,1633,1636,1639,1642,1645,1648,1651,1654],{"title":1622,"url":1623},"W3C: Web Content Accessibility Guidelines (WCAG) 2.2","https:\u002F\u002Fwww.w3.org\u002FTR\u002FWCAG22\u002F",{"title":1625,"url":1626},"axe-core README (Deque)","https:\u002F\u002Fgithub.com\u002Fdequelabs\u002Faxe-core",{"title":1628,"url":1629},"axe-core rule descriptions","https:\u002F\u002Fgithub.com\u002Fdequelabs\u002Faxe-core\u002Fblob\u002Fdevelop\u002Fdoc\u002Frule-descriptions.md",{"title":1631,"url":1632},"WebAIM: The WebAIM Million 2026","https:\u002F\u002Fwebaim.org\u002Fprojects\u002Fmillion\u002F",{"title":1634,"url":1635},"WebAIM: Screen Reader User Survey #11","https:\u002F\u002Fwebaim.org\u002Fprojects\u002Fscreenreadersurvey11\u002F",{"title":1637,"url":1638},"Vue: accessibility guide","https:\u002F\u002Fvuejs.org\u002Fguide\u002Fbest-practices\u002Faccessibility.html",{"title":1640,"url":1641},"WAI-ARIA Authoring Practices Guide","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FARIA\u002Fapg\u002Fpractices\u002F",{"title":1643,"url":1644},"MDN: ARIA live regions","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAccessibility\u002FARIA\u002FGuides\u002FLive_regions",{"title":1646,"url":1647},"Playwright: accessibility testing","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Faccessibility-testing",{"title":1649,"url":1650},"Playwright: locator assertions (toMatchAriaSnapshot)","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fapi\u002Fclass-locatorassertions",{"title":1652,"url":1653},"nuxt\u002Fa11y on GitHub","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fa11y",{"title":1655,"url":1656},"Reka UI: introduction","https:\u002F\u002Freka-ui.com\u002Fdocs\u002Foverview\u002Fintroduction","\u002Fimages\u002Fblog\u002Fvue-accessible-components\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fvue-accessible-components\u002Fog.jpg",[80,81,82],"Accessible Vue components: the WCAG 2.2 patterns automated tests miss","Component-level WCAG 2.2 patterns for Vue and Nuxt: focus in modals and Teleport, live regions, comboboxes, what axe-core misses, and a test ladder.","Accessible Vue components: a dialog with a focus ring on one button, a tab key and a speaker beside it.",{"slug":1664,"published":1665,"minutes":7,"category":8,"tags":1666,"tagPages":1672,"keywords":1674,"about":1682,"sources":1686,"cover":1716,"og":1717,"expertise":1063,"locales":1718,"lang":80,"title":1719,"description":1720,"coverAlt":1721},"browserbase-stagehand","2026-09-30",[1667,1668,1669,1670,1671],"Browser automation","Web agents","Headless browsers","Playwright","MCP",[1673],"mcp",[1675,1676,1677,1678,1679,1680,1681],"browserbase","stagehand","stagehand vs playwright","browserbase pricing","ai web agent framework","headless browser api","browserbase alternatives",[1683],{"name":1684,"url":1685},"Browserbase","https:\u002F\u002Fwww.browserbase.com",[1687,1690,1693,1696,1699,1702,1705,1708,1711,1714],{"title":1688,"url":1689},"Browserbase pricing","https:\u002F\u002Fwww.browserbase.com\u002Fpricing",{"title":1691,"url":1692},"Browserbase plans and pricing docs","https:\u002F\u002Fdocs.browserbase.com\u002Fguides\u002Fplans-and-pricing",{"title":1694,"url":1695},"Stagehand documentation","https:\u002F\u002Fdocs.stagehand.dev\u002F",{"title":1697,"url":1698},"Stagehand quickstart","https:\u002F\u002Fdocs.stagehand.dev\u002Fv4\u002Ffirst-steps\u002Fquickstart",{"title":1700,"url":1701},"Stagehand v4 announcement","https:\u002F\u002Fwww.browserbase.com\u002Fblog\u002Fstagehand-v4",{"title":1703,"url":1704},"Stagehand repository","https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fstagehand",{"title":1706,"url":1707},"Browser Use comparison of the two vendors","https:\u002F\u002Fbrowser-use.com\u002Fposts\u002Fbrowser-use-vs-browserbase",{"title":1709,"url":1710},"Browser Use pricing","https:\u002F\u002Fwww.browser-use.com\u002Fpricing",{"title":1712,"url":1713},"Skyvern pricing","https:\u002F\u002Fskyvern.com\u002Fpricing",{"title":1670,"url":1715},"https:\u002F\u002Fplaywright.dev\u002F","\u002Fimages\u002Fblog\u002Fbrowserbase-stagehand\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fbrowserbase-stagehand\u002Fog.jpg",[80,81,82],"Browserbase and Stagehand reviewed: rented Chrome for AI agents","Browserbase rents managed Chrome per minute and Stagehand adds natural-language steps. What it costs, where the meters run and when plain Playwright wins.","Browserbase and Stagehand: a robot holding a key tag stands on a theatre stage in front of a browser window.",{"slug":1723,"published":1665,"minutes":145,"category":8,"tags":1724,"tagPages":1729,"keywords":1730,"about":1737,"sources":1745,"cover":1769,"og":1770,"expertise":1063,"locales":1771,"lang":80,"title":1772,"description":1773,"coverAlt":1774},"webmcp",[1725,1726,1727,1728,1671],"WebMCP","Agent tools","JSON Schema","Chrome",[1673],[1723,1731,1732,1733,1734,1735,1736],"webmcp vs mcp","document.modelContext registerTool","webmcp declarative api","browser agent tools","webmcp origin trial","webmcp chrome 149",[1738,1740,1743],{"name":1725,"url":1739},"https:\u002F\u002Fgithub.com\u002Fwebmachinelearning\u002Fwebmcp",{"name":1741,"url":1742},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",{"name":1727,"url":1744},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Schema",[1746,1749,1752,1755,1758,1761,1764,1766],{"title":1747,"url":1748},"Chrome for Developers: WebMCP (get started)","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp",{"title":1750,"url":1751},"Chrome for Developers: Imperative API","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fimperative-api",{"title":1753,"url":1754},"Chrome for Developers: Declarative API","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fdeclarative-api",{"title":1756,"url":1757},"Chrome for Developers: WebMCP versus MCP","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fcompare-mcp",{"title":1759,"url":1760},"Chrome for Developers: WebMCP tool security","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fsecure-tools",{"title":1762,"url":1763},"Chrome for Developers: Build effective tools","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fbuild-tools",{"title":1765,"url":1739},"WebMCP explainer and specification draft",{"title":1767,"url":1768},"WebMCP implementation status","https:\u002F\u002Fgithub.com\u002Fwebmachinelearning\u002Fwebmcp\u002Fblob\u002Fmain\u002Fimplementation-status.md","\u002Fimages\u002Fblog\u002Fwebmcp\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fwebmcp\u002Fog.jpg",[80,81,82],"WebMCP: publishing tools instead of pixels","WebMCP lets a page publish typed, callable tools to an in-browser agent. What the standard does, how much ships today, and when a plain MCP server wins.","WebMCP: a hand passes a toolbox out of a browser window to a waiting robot.",{"slug":1776,"published":1777,"minutes":88,"category":8,"tags":1778,"tagPages":1784,"keywords":1785,"about":1794,"sources":1803,"cover":1816,"og":1817,"expertise":213,"locales":1818,"lang":80,"title":1819,"description":1820,"coverAlt":1821},"home-assistant-ev-charging-energy-manager","2026-09-29",[1779,1780,1781,1782,1783],"Home Assistant","EPEX Spot","Energy prices","Tesla","Energy management",[],[1786,1787,1788,1789,1790,1791,1792,1793],"EPEX Austria prices","spot tariff Austria EV charging","Home Assistant EV charging","cheapest hours charging","day-ahead price Austria","negative electricity prices Austria","Tesla charging spot prices","load management 3 phase",[1795,1798,1800],{"name":1796,"url":1797},"EPEX SPOT","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEPEX_SPOT",{"name":1779,"url":1799},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHome_Assistant",{"name":1801,"url":1802},"Load management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLoad_management",[1804,1807,1810,1813],{"title":1805,"url":1806},"aWATTar Austria: market data API","https:\u002F\u002Fwww.awattar.at\u002Fservices\u002Fapi",{"title":1808,"url":1809},"EPEX SPOT: market results","https:\u002F\u002Fwww.epexspot.com\u002Fen\u002Fmarket-results",{"title":1811,"url":1812},"Home Assistant developer docs: apps","https:\u002F\u002Fdevelopers.home-assistant.io\u002Fdocs\u002Fapps\u002F",{"title":1814,"url":1815},"Home Assistant: Tesla Fleet integration","https:\u002F\u002Fwww.home-assistant.io\u002Fintegrations\u002Ftesla_fleet\u002F","\u002Fimages\u002Fblog\u002Fhome-assistant-ev-charging-energy-manager\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fhome-assistant-ev-charging-energy-manager\u002Fog.jpg",[80,81,82],"Charging on EPEX Austria prices: what my Home Assistant app saves","Home Assistant on EPEX Austria prices, replayed hourly for a Tesla and a boiler: cheapest-hour charging at 6.5 vs 18.9 ct\u002FkWh, saving about €590 a year.","Home Assistant EV charging on EPEX: an electric car charges at night in a carport, a piggy bank beside the charger.",{"slug":1823,"published":1824,"minutes":1070,"category":8,"tags":1825,"tagPages":1827,"keywords":1828,"about":1839,"sources":1846,"cover":1872,"og":1873,"expertise":78,"locales":1874,"lang":80,"title":1875,"description":1876,"coverAlt":1877},"headless-product-configurator-b2b","2026-09-14",[1826,12,14,1455],"Product configurator",[16,17],[1829,1830,1831,1832,1833,1834,1835,1836,1837,1838],"B2B product configurator","Produktkonfigurator","Produktkonfigurator TYPO3","B2B Konfigurator","headless product configurator","CPQ configure price quote","rule engine vs constraint solver","Nuxt Spryker Glue API","product configurator 100000 variants","accessible product configurator",[1840,1842,1844],{"name":1826,"url":1841},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_configurator",{"name":1455,"url":1843},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_commerce",{"name":14,"url":1845},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNuxt",[1847,1849,1852,1855,1858,1861,1864,1866,1869],{"title":1848,"url":1841},"Wikipedia: Knowledge-based configuration (product configurator)",{"title":1850,"url":1851},"Google OR-Tools: The CP-SAT solver","https:\u002F\u002Fdevelopers.google.com\u002Foptimization\u002Fcp\u002Fcp_solver",{"title":1853,"url":1854},"Spryker documentation: Glue API, Product Configuration feature integration","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fscos\u002Fdev\u002Ffeature-integration-guides\u002F202108.0\u002Fglue-api\u002Fglue-api-product-configuration-feature-integration.html",{"title":1856,"url":1857},"OWASP: Input Validation Cheat Sheet","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FInput_Validation_Cheat_Sheet.html",{"title":1859,"url":1860},"web.dev: Virtualize large lists","https:\u002F\u002Fweb.dev\u002Farticles\u002Fvirtualize-long-lists-react-window",{"title":1862,"url":1863},"W3C: Understanding SC 3.3.1 Error Identification (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Ferror-identification.html",{"title":1865,"url":192},"W3C: Understanding SC 4.1.3 Status Messages (WCAG 2.2)",{"title":1867,"url":1868},"W3C: Understanding SC 2.5.8 Target Size (Minimum) (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Ftarget-size-minimum.html",{"title":1870,"url":1871},"W3C WAI-ARIA Authoring Practices: Combobox pattern","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FARIA\u002Fapg\u002Fpatterns\u002Fcombobox\u002F","\u002Fimages\u002Fblog\u002Fheadless-product-configurator-b2b\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fheadless-product-configurator-b2b\u002Fog.jpg",[80,81,82],"Headless B2B product configurator: rules, pricing and Nuxt on a commerce API","Headless B2B product configurator: rule engine or solver, where rules live, server-side pricing, Nuxt on a commerce API, TYPO3 and 100k+ variants.","Headless B2B product configurator: a hand fits a knob onto a machine, interchangeable parts and a price tag beside it.",{"slug":1879,"published":1880,"minutes":1881,"category":8,"tags":1882,"tagPages":1886,"keywords":1887,"about":1898,"sources":1903,"cover":1960,"og":1961,"expertise":213,"locales":1962,"lang":80,"title":1963,"description":1964,"coverAlt":1965},"nuxt-core-web-vitals-performance","2026-07-21",13,[1883,14,1884,1885],"Core Web Vitals","Performance","E-commerce",[17],[1888,1889,1890,1891,1892,1893,1894,1895,1896,1897],"Core Web Vitals Nuxt","Nuxt performance optimization","improve LCP Nuxt","INP Nuxt hydration","fix CLS Vue","Nuxt lazy hydration","Nuxt Image LCP","Nuxt Scripts third-party scripts","Nuxt prerender vs SSR vs ISR","Core Web Vitals e-commerce",[1899,1901,1902],{"name":1883,"url":1900},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCore_Web_Vitals",{"name":14,"url":1845},{"name":172,"url":173},[1904,1907,1910,1913,1916,1919,1922,1925,1928,1931,1933,1936,1939,1942,1945,1948,1951,1954,1957],{"title":1905,"url":1906},"web.dev: Web Vitals","https:\u002F\u002Fweb.dev\u002Farticles\u002Fvitals",{"title":1908,"url":1909},"web.dev: Largest Contentful Paint (LCP)","https:\u002F\u002Fweb.dev\u002Farticles\u002Flcp",{"title":1911,"url":1912},"web.dev: Optimize Largest Contentful Paint","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-lcp",{"title":1914,"url":1915},"web.dev: Interaction to Next Paint (INP)","https:\u002F\u002Fweb.dev\u002Farticles\u002Finp",{"title":1917,"url":1918},"web.dev: Optimize Cumulative Layout Shift","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-cls",{"title":1920,"url":1921},"web.dev: Optimize long tasks","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-long-tasks",{"title":1923,"url":1924},"Chrome for Developers: Chrome UX Report (CrUX)","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux",{"title":1926,"url":1927},"Chrome for Developers: CrUX methodology","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fmethodology",{"title":1929,"url":1930},"GitHub: GoogleChrome\u002Fweb-vitals","https:\u002F\u002Fgithub.com\u002FGoogleChrome\u002Fweb-vitals",{"title":1932,"url":1481},"Nuxt docs: Rendering modes",{"title":1934,"url":1935},"Nuxt docs: Components (Lazy prefix, delayed hydration, client components)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fdirectory-structure\u002Fapp\u002Fcomponents",{"title":1937,"url":1938},"Nuxt docs: Experimental features (lazyHydration, payloadExtraction)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features",{"title":1940,"url":1941},"Nuxt docs: Data fetching (pick, transform, lazy)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdata-fetching",{"title":1943,"url":1944},"Nuxt blog: Nuxt 4.5","https:\u002F\u002Fnuxt.com\u002Fblog\u002Fv4-5",{"title":1946,"url":1947},"GitHub: Nuxt releases","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Freleases",{"title":1949,"url":1950},"Nuxt Image: NuxtImg","https:\u002F\u002Fimage.nuxt.com\u002Fusage\u002Fnuxt-img",{"title":1952,"url":1953},"Nuxt Fonts module","https:\u002F\u002Fnuxt.com\u002Fmodules\u002Ffonts",{"title":1955,"url":1956},"Nuxt Scripts: Getting started","https:\u002F\u002Fscripts.nuxt.com\u002Fdocs\u002Fgetting-started",{"title":1958,"url":1959},"Nuxt Scripts: Script triggers","https:\u002F\u002Fscripts.nuxt.com\u002Fdocs\u002Fguides\u002Fscript-triggers","\u002Fimages\u002Fblog\u002Fnuxt-core-web-vitals-performance\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-core-web-vitals-performance\u002Fog.jpg",[80,81,82],"Core Web Vitals for Nuxt sites and shops: fixing LCP, INP and CLS","How to fix LCP, INP and CLS in Nuxt 4 sites and shops: images, hydration, fonts, third-party scripts, prerender vs SSR vs ISR, and measuring real users.","Core Web Vitals for Nuxt sites: three dashboard gauges with needles in the calm zone behind a steering wheel.",{"slug":1967,"published":1968,"updated":1777,"minutes":1070,"category":8,"tags":1969,"tagPages":1974,"keywords":1975,"about":1986,"sources":1993,"cover":2026,"og":2027,"expertise":78,"locales":2028,"lang":80,"title":2029,"description":2030,"coverAlt":2031},"pimcore-erp-delta-sync","2026-07-01",[1970,1971,1972,1973],"Pimcore","SAP integration","PIM ERP sync","Symfony Messenger",[],[1976,1977,1978,1979,1980,1981,1982,1983,1984,1985],"Pimcore ERP delta sync","Pimcore developer","Pimcore SAP integration","PIM ERP Schnittstelle","Pimcore SAP Schnittstelle","PIM ERP sync best practices","Pimcore Symfony Messenger","delta sync vs full sync","idempotent import Pimcore","Pimcore Infor integration",[1987,1989,1992],{"name":1970,"url":1988},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPimcore",{"name":1990,"url":1991},"SAP ERP","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSAP_ERP",{"name":704,"url":705},[1994,1997,2000,2003,2005,2008,2011,2014,2017,2020,2023],{"title":1995,"url":1996},"Pimcore docs: Symfony Messenger","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FGetting_Started\u002FInstallation\u002FAdvanced_Installation_Topics\u002FSymfony_Messenger\u002F",{"title":1998,"url":1999},"Pimcore docs: Platform Versions","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore_Platform\u002FPlatform_Versions\u002F",{"title":2001,"url":2002},"Pimcore docs: Pimcore Editions","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore_Platform\u002FPimcore_Editions\u002F",{"title":2004,"url":794},"Pimcore docs: Data Importer",{"title":2006,"url":2007},"Pimcore on GitHub: Release 2026.3.0","https:\u002F\u002Fgithub.com\u002Fpimcore\u002Fpimcore\u002Freleases\u002Ftag\u002Fv2026.3.0",{"title":2009,"url":2010},"Symfony docs: Messenger, Sync & Queued Message Handling","https:\u002F\u002Fsymfony.com\u002Fdoc\u002Fcurrent\u002Fmessenger.html",{"title":2012,"url":2013},"SAP Library: Change Pointer (Master Data Distribution)","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsaphelp_nw73ehp1\u002F7.31.19\u002Fen-us\u002F4a\u002Fbb1e253536478be10000000a421937\u002Fcontent.htm?no_cache=true",{"title":2015,"url":2016},"SAP Library: Change Pointer (IDoc Interface\u002FALE)","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsaphelp_em700_ehp01\u002F7.0.1\u002Fen-US\u002F12\u002F83e03c19758e71e10000000a114084\u002Fcontent.htm?no_cache=true",{"title":2018,"url":2019},"Infor docs: Infor ION and M3 BODs","https:\u002F\u002Fdocs.infor.com\u002Fm3cs\u002F10.2.3\u002Fen-us\u002Fm3csbom\u002Ffabsog\u002Fgoi1495809108914.html",{"title":2021,"url":2022},"Infor Developer Portal: Integration with ION","https:\u002F\u002Fdeveloper.infor.com\u002Ftutorials\u002Fintegration-with-ion",{"title":2024,"url":2025},"Debezium: open source distributed platform for change data capture","https:\u002F\u002Fdebezium.io\u002F","\u002Fimages\u002Fblog\u002Fpimcore-erp-delta-sync\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpimcore-erp-delta-sync\u002Fog.jpg",[80,81,82],"Pimcore ERP delta sync: syncing product data between SAP or Infor, PIM and shop","Syncing product data between SAP or Infor, Pimcore and a shop: delta vs full sync, change detection, idempotent imports, Messenger queues, replays.","Pimcore ERP delta sync: three meshing gears carry boxes from a factory gear to a shop awning.",{"slug":2033,"published":2034,"updated":2035,"minutes":1881,"category":8,"tags":2036,"tagPages":2039,"keywords":2040,"about":2051,"sources":2057,"cover":2107,"og":2108,"expertise":78,"locales":2109,"lang":80,"title":2110,"description":2111,"coverAlt":2112},"european-accessibility-act-b2b-shop","2026-06-23","2026-10-01",[2037,2038,1594,12],"European Accessibility Act","BFSG",[16],[2041,2042,2043,2044,2045,2046,2047,2048,2049,2050],"European Accessibility Act B2B shop","BFSG B2B Onlineshop","Barrierefreiheit Onlineshop","Spryker barrierefrei","barrierefrei Webshop","BaFG Österreich Webshop","EN 301 549 WCAG 2.2","BFSG Kleinstunternehmen Ausnahme","Pimcore TYPO3 Barrierefreiheit","EAA e-commerce checklist",[2052,2054,2055],{"name":2037,"url":2053},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEuropean_Accessibility_Act",{"name":1612,"url":1613},{"name":1885,"url":2056},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FE-commerce",[2058,2061,2064,2067,2070,2073,2076,2079,2082,2085,2086,2089,2092,2095,2098,2101,2104],{"title":2059,"url":2060},"BFSG section 1: purpose and scope (gesetze-im-internet.de)","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__1.html",{"title":2062,"url":2063},"BFSG section 2: definitions, consumer, microenterprise, e-commerce services","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__2.html",{"title":2065,"url":2066},"BFSG section 3: accessibility and the microenterprise exemption","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__3.html",{"title":2068,"url":2069},"BFSG section 14: duties of the service provider","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__14.html",{"title":2071,"url":2072},"BFSG section 32: rights of consumers and associations in the administrative procedure","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__32.html",{"title":2074,"url":2075},"BFSG section 37: fines","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__37.html",{"title":2077,"url":2078},"BFSG section 38: transitional provisions","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__38.html",{"title":2080,"url":2081},"Bundesfachstelle Barrierefreiheit: FAQ on the BFSG (B2B, microenterprises, EN 301 549)","https:\u002F\u002Fwww.bundesfachstelle-barrierefreiheit.de\u002FDE\u002FFachwissen\u002FProdukte-und-Dienstleistungen\u002FBarrierefreiheitsstaerkungsgesetz\u002FFAQ\u002Ffaq_node.html",{"title":2083,"url":2084},"AccessibleEU: The European accessibility standard EN 301 549 has been updated (7 September 2026)","https:\u002F\u002Faccessible-eu-centre.ec.europa.eu\u002Fcontent-corner\u002Fnews\u002Feuropean-accessibility-standard-en-301-549-has-been-updated-2026-09-07_en",{"title":1622,"url":1623},{"title":2087,"url":2088},"Deque: Automated testing identifies 57 percent of digital accessibility issues","https:\u002F\u002Fwww.deque.com\u002Fblog\u002Fautomated-testing-study-identifies-57-percent-of-digital-accessibility-issues\u002F",{"title":2090,"url":2091},"sitebrunch: What is the market surveillance authority for accessibility (MLBF)?","https:\u002F\u002Fwww.sitebrunch.com\u002Fnews\u002Fmlbf-marktueberwachungsstelle-barrierefreiheit",{"title":2093,"url":2094},"Marcus Herrmann: June 2026, how the MLBF intends to check","https:\u002F\u002Fmarcus-herrmann.com\u002Fblog\u002Fmlbf-verraet-wie-sie-pruefen-will",{"title":2096,"url":2097},"axes4: BFSG in practice, what has happened since the deadline (2026)","https:\u002F\u002Fwww.axes4.com\u002Fde\u002Fblog\u002Fpost\u002F2026\u002Fbfsg-in-der-praxis-was-sich-seit-dem-stichtag-getan-hat",{"title":2099,"url":2100},"ODC Legal: BFSG for websites, what companies must check in 2026","https:\u002F\u002Fwww.odclegal.de\u002Fblog\u002Fbfsg-website-pflicht",{"title":2102,"url":2103},"WKO: Information on the Austrian Barrierefreiheitsgesetz","https:\u002F\u002Fwww.wko.at\u002Fce-kennzeichnung-normen\u002Finformationen-zum-barrierefreiheitsgesetz",{"title":2105,"url":2106},"Web Crossing: One year of the Barrierefreiheitsgesetz, where online shops must improve","https:\u002F\u002Fwww.web-crossing.com\u002Fnews\u002Fdetail\u002Fein-jahr-barrierefreiheitsgesetz-wo-onlineshops-und-websites-jetzt-nachbessern-muessen\u002F","\u002Fimages\u002Fblog\u002Feuropean-accessibility-act-b2b-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Feuropean-accessibility-act-b2b-shop\u002Fog.jpg",[80,81,82],"European Accessibility Act for B2B shops: what Spryker, Pimcore and TYPO3 teams must fix","Does the European Accessibility Act cover a B2B shop? Scope under BFSG and BaFG, the microenterprise exemption, 2026 enforcement and a WCAG 2.2 fix plan.","European Accessibility Act: a shop entrance with a ramp beside the steps and a wheelchair at its foot.",{"slug":2114,"published":2115,"updated":1019,"minutes":88,"category":8,"tags":2116,"tagPages":2119,"keywords":2120,"about":2130,"sources":2139,"cover":2153,"og":2154,"expertise":78,"locales":2155,"lang":80,"title":2156,"description":2157,"coverAlt":2158},"agentic-commerce-protocols-ucp-acp-guide","2026-06-12",[410,414,2117,2118,12],"AP2","ACP",[16],[2121,2122,2123,2124,2125,2126,2127,2128,2129],"agentic commerce","Universal Commerce Protocol","Agent Payments Protocol","Agentic Commerce Protocol","agentic checkout","AI shopping agents","AP2 payment mandate","UCP catalog cart checkout","shared payment token",[2131,2133,2136],{"name":410,"url":2132},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgentic_commerce",{"name":2134,"url":2135},"Payment","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment",{"name":2137,"url":2138},"OAuth","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[2140,2143,2145,2147,2150],{"title":2141,"url":2142},"Universal Commerce Protocol: capabilities, core concepts and specification","https:\u002F\u002Fucp.dev",{"title":2144,"url":442},"Google Developers Blog: Under the hood of the Universal Commerce Protocol (Jan 2026)",{"title":2146,"url":451},"AP2: Agent Payments Protocol documentation, mandates and verifiable credentials",{"title":2148,"url":2149},"Stripe and OpenAI: Instant Checkout and the Agentic Commerce Protocol (29 Sep 2025)","https:\u002F\u002Fstripe.com\u002Fnewsroom\u002Fnews\u002Fstripe-openai-instant-checkout",{"title":2151,"url":2152},"Digital Commerce 360: OpenAI shifts its checkout plans for agentic commerce (6 Mar 2026)","https:\u002F\u002Fwww.digitalcommerce360.com\u002F2026\u002F03\u002F06\u002Fopenai-shifts-checkout-plans-agentic-commerce-strategy\u002F","\u002Fimages\u002Fblog\u002Fagentic-commerce-protocols-ucp-acp-guide\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fagentic-commerce-protocols-ucp-acp-guide\u002Fog.jpg",[80,81,82],"Agentic commerce for shop developers: UCP, ACP and AP2 compared","Agentic commerce protocols compared: what UCP covers, how AP2 proves a payment was authorized, where ACP fits, and what a shop should build now.","UCP and ACP agentic commerce: a small robot pushes a shopping cart toward a shop counter with a payment terminal.",{"slug":2160,"published":2161,"updated":1019,"minutes":1070,"category":8,"tags":2162,"tagPages":2166,"keywords":2167,"about":2176,"sources":2183,"cover":2206,"og":2207,"expertise":1063,"locales":2208,"lang":80,"title":2209,"description":2210,"coverAlt":2211},"generative-engine-optimization-audit","2026-06-09",[2163,2164,11,2165],"GEO","AI search","nginx",[],[1028,2168,2169,2170,2171,2172,2173,2174,2175],"GEO audit","GEO checklist","AI search optimization","AI Overviews optimization","ChatGPT search citations","llms.txt describedby","AI crawler logs nginx","Bing AI Performance report",[2177,2180],{"name":2178,"url":2179},"Generative engine optimization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGenerative_engine_optimization",{"name":2181,"url":2182},"Search engine optimization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSearch_engine_optimization",[2184,2187,2190,2193,2196,2199,2202,2205],{"title":2185,"url":2186},"Aggarwal et al.: GEO: Generative Engine Optimization (KDD 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.09735",{"title":2188,"url":2189},"Martinez: Optimizing Visibility in Generative Engines, a critical survey of GEO 2023–2026 (July 2026)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2607.14035",{"title":2191,"url":2192},"Tian et al.: Diagnosing and Repairing Citation Failures in Generative Engine Optimization (March 2026)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2603.09296",{"title":2194,"url":2195},"Google Search Central: AI features and your website","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fai-features",{"title":2197,"url":2198},"Google Search Central: Build and submit a sitemap","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fsitemaps\u002Fbuild-sitemap",{"title":2200,"url":2201},"OpenAI: Overview of OpenAI crawlers","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fbots",{"title":2203,"url":2204},"Bing Webmaster Blog: Introducing AI Performance in Bing Webmaster Tools (10 February 2026)","https:\u002F\u002Fblogs.bing.com\u002Fwebmaster\u002FFebruary-2026\u002FIntroducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview",{"title":1044,"url":1045},"\u002Fimages\u002Fblog\u002Fgenerative-engine-optimization-audit\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fgenerative-engine-optimization-audit\u002Fog.jpg",[80,81,82],"Generative engine optimization in practice: a full GEO audit of my own site","What generative engine optimization is, what the research really supports, and the GEO audit I ran on this site: 12 checks, 7 fixes, code included.","Generative engine optimization: a person inspects a web-page-shaped house through a magnifying glass, a chat bubble above.",{"slug":2213,"published":2214,"updated":1019,"minutes":7,"category":8,"tags":2215,"tagPages":2218,"keywords":2219,"about":2228,"sources":2233,"cover":2250,"og":2251,"expertise":1063,"locales":2252,"lang":80,"title":2253,"description":2254,"coverAlt":2255},"webmcp-agent-ready-website-guide","2026-05-28",[1725,1728,615,2216,2217,1727],"Origin trial","Permissions Policy",[617],[1725,2220,2221,1031,2222,2223,2224,2225,2226,2227],"document.modelContext","registerTool","WebMCP declarative API","WebMCP origin trial","WebMCP tools","tools Permissions Policy","how to expose website actions to AI agents","Chrome 149 WebMCP",[2229,2230,2231],{"name":1725,"url":1739},{"name":1727,"url":1744},{"name":2217,"url":2232},"https:\u002F\u002Fwww.w3.org\u002FTR\u002Fpermissions-policy-1\u002F",[2234,2235,2237,2239,2242,2245,2247],{"title":1747,"url":1748},{"title":2236,"url":1751},"Chrome for Developers: WebMCP Imperative API",{"title":2238,"url":1754},"Chrome for Developers: WebMCP Declarative API",{"title":2240,"url":2241},"Chrome for Developers: Join the WebMCP origin trial (9 Jun 2026)","https:\u002F\u002Fdeveloper.chrome.com\u002Fblog\u002Fai-webmcp-origin-trial",{"title":2243,"url":2244},"Chrome for Developers: 15 updates from Google I\u002FO 2026 (19 May 2026)","https:\u002F\u002Fdeveloper.chrome.com\u002Fblog\u002Fchrome-at-io26",{"title":2246,"url":1739},"WebMCP explainer: webmachinelearning\u002Fwebmcp",{"title":2248,"url":2249},"ChromeStatus: WebMCP feature entry","https:\u002F\u002Fchromestatus.com\u002Ffeature\u002F5117755740913664","\u002Fimages\u002Fblog\u002Fwebmcp-agent-ready-website-guide\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fwebmcp-agent-ready-website-guide\u002Fog.jpg",[80,81,82],"WebMCP in practice: making a website agent-ready with declared tools","WebMCP in practice: declarative form attributes, document.modelContext.registerTool, tool annotations, security gates, local testing and a checklist.","WebMCP for agent-ready websites: a robot reads a clear menu board in front of an open shop door.",{"slug":2257,"published":2258,"updated":2259,"minutes":7,"category":8,"tags":2260,"tagPages":2263,"keywords":2264,"about":2272,"sources":2276,"cover":2298,"og":2299,"expertise":1063,"locales":2300,"lang":80,"title":2301,"description":2302,"coverAlt":2303},"playwright","2026-05-27","2026-09-01",[2261,1667,1671,2262],"End-to-end testing","Cross-browser",[1673],[2257,2265,2266,2267,2268,2269,2270,2271],"playwright vs selenium","playwright mcp","browser automation testing","playwright test runner","playwright for ai agents","playwright vs cypress","playwright cloud pricing",[2273,2275],{"name":1670,"url":2274},"https:\u002F\u002Fplaywright.dev",{"name":1741,"url":1742},[2277,2280,2283,2286,2289,2292,2295],{"title":2278,"url":2279},"Playwright documentation: installation","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fintro",{"title":2281,"url":2282},"Playwright MCP introduction","https:\u002F\u002Fplaywright.dev\u002Fmcp\u002Fintroduction",{"title":2284,"url":2285},"Playwright CLI introduction","https:\u002F\u002Fplaywright.dev\u002Fagent-cli\u002Fintroduction",{"title":2287,"url":2288},"Playwright Test agents","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Ftest-agents",{"title":2290,"url":2291},"npm package metadata for @playwright\u002Ftest","https:\u002F\u002Fregistry.npmjs.org\u002F@playwright\u002Ftest\u002Flatest",{"title":2293,"url":2294},"Microsoft Learn: Playwright Workspaces free trial","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fapp-testing\u002Fplaywright-workspaces\u002Fhow-to-try-playwright-workspaces-free",{"title":2296,"url":2297},"Azure App Testing pricing","https:\u002F\u002Fazure.microsoft.com\u002Fen-us\u002Fpricing\u002Fdetails\u002Fapp-testing\u002F","\u002Fimages\u002Fblog\u002Fplaywright\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fplaywright\u002Fog.jpg",[80,81,82],"Playwright: one browser API for tests, scripts and agents","Playwright: one Apache-2.0 API for Chromium, Firefox and WebKit, with a test runner, agent CLI and MCP server. What it costs and where it falls short.","Playwright: three browser windows stand on a theatre stage in front of a director's chair.",{"slug":2305,"published":2258,"updated":682,"minutes":7,"category":8,"tags":2306,"tagPages":2311,"keywords":2312,"about":2319,"sources":2326,"cover":2350,"og":2351,"expertise":1063,"locales":2352,"lang":80,"title":2353,"description":2354,"coverAlt":2355},"elevenlabs",[2307,2308,2309,2310],"Text-to-speech","Voice API","Speech to text","Voice cloning",[],[2305,2313,2314,2315,2316,2317,2318],"elevenlabs api pricing","elevenlabs vs openai tts","text to speech api comparison","elevenlabs flash latency","voice cloning api","eleven v4 model",[2320,2323],{"name":2321,"url":2322},"ElevenLabs","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElevenLabs",{"name":2324,"url":2325},"Speech synthesis","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSpeech_synthesis",[2327,2330,2333,2336,2339,2341,2344,2347],{"title":2328,"url":2329},"ElevenLabs pricing: plans and credits","https:\u002F\u002Felevenlabs.io\u002Fpricing",{"title":2331,"url":2332},"ElevenAPI pricing: per-product rates","https:\u002F\u002Felevenlabs.io\u002Fpricing\u002Fapi",{"title":2334,"url":2335},"ElevenLabs documentation: models","https:\u002F\u002Felevenlabs.io\u002Fdocs\u002Fmodels",{"title":2337,"url":2338},"API reference: create speech","https:\u002F\u002Felevenlabs.io\u002Fdocs\u002Fapi-reference\u002Ftext-to-speech\u002Fconvert",{"title":2340,"url":2322},"Wikipedia: ElevenLabs",{"title":2342,"url":2343},"Amazon Polly pricing","https:\u002F\u002Faws.amazon.com\u002Fpolly\u002Fpricing\u002F",{"title":2345,"url":2346},"OpenAI API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":2348,"url":2349},"SILMA AI: text to speech price comparison, August 2026","https:\u002F\u002Fsilma.ai\u002Fblog\u002Ftext-to-speech-price-comparison-august-2026","\u002Fimages\u002Fblog\u002Felevenlabs\u002Fcover.webp","\u002Fimages\u002Fblog\u002Felevenlabs\u002Fog.jpg",[80,81,82],"ElevenLabs: speech synthesis as an API","ElevenLabs audio API review: model lineup, latency, credit and per-character pricing, tier-gated formats, and where OpenAI and Amazon Polly win.","ElevenLabs speech API: a sheet of text feeds into a microphone whose sound waves flow into a speaker.",{"slug":2357,"published":2358,"minutes":7,"category":8,"tags":2359,"tagPages":2365,"keywords":2366,"about":2375,"sources":2382,"cover":2413,"og":2414,"expertise":1063,"locales":2415,"lang":80,"title":2416,"description":2417,"coverAlt":2418},"replicate","2026-05-22",[2360,2361,2362,2363,2364],"Model hosting","Serverless GPU","Diffusion","Async jobs","Webhooks",[],[2367,2368,2369,2370,2371,2372,2373,2374],"replicate api","replicate vs fal.ai","serverless gpu inference pricing","replicate webhooks","replicate cold start","replicate vs baseten","how to run an open source model in production","replicate prediction api",[2376,2379],{"name":2377,"url":2378},"Replicate","https:\u002F\u002Freplicate.com\u002Fdocs",{"name":2380,"url":2381},"Serverless computing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServerless_computing",[2383,2386,2389,2392,2395,2398,2401,2404,2407,2410],{"title":2384,"url":2385},"Replicate pricing","https:\u002F\u002Freplicate.com\u002Fpricing",{"title":2387,"url":2388},"Replicate docs: About predictions","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions",{"title":2390,"url":2391},"Replicate docs: Create a prediction","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Fcreate-a-prediction",{"title":2393,"url":2394},"Replicate docs: Prediction lifecycle","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Flifecycle",{"title":2396,"url":2397},"Replicate docs: Rate limits","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Frate-limits",{"title":2399,"url":2400},"Replicate docs: Data retention","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Fdata-retention",{"title":2402,"url":2403},"Replicate docs: Verify webhooks","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fwebhooks\u002Fverify-webhook",{"title":2405,"url":2406},"Replicate docs: Official models","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fmodels\u002Fofficial-models",{"title":2408,"url":2409},"fal.ai pricing","https:\u002F\u002Ffal.ai\u002Fpricing",{"title":2411,"url":2412},"Baseten pricing","https:\u002F\u002Fwww.baseten.co\u002Fpricing\u002F","\u002Fimages\u002Fblog\u002Freplicate\u002Fcover.webp","\u002Fimages\u002Fblog\u002Freplicate\u002Fog.jpg",[80,81,82],"Replicate, reviewed: a model API priced per second, with the sharp edges named","Replicate: thousands of open models behind one prediction API, billed per second. Cold boots, version churn and the one-hour data deletion.","Replicate review: a copier prints copies of a robot figure, a stopwatch on top and a knife beside it.",{"slug":2420,"published":2421,"updated":1019,"minutes":88,"category":8,"tags":2422,"tagPages":2426,"keywords":2427,"about":2438,"sources":2445,"cover":2465,"og":2466,"expertise":213,"locales":2467,"lang":80,"title":2468,"description":2469,"coverAlt":2470},"nuxt-llm-features-ai-sdk-streaming","2026-05-14",[14,2423,149,2424,2425,1525],"AI SDK","Structured output","Tool approval",[17],[2428,2429,2430,2431,2432,2433,2434,2435,2436,2437],"Nuxt AI","AI SDK Vue","Nuxt server route LLM","streaming chat Nuxt","useChat @ai-sdk\u002Fvue","structured output JSON Schema limits","human in the loop tool approval","Nitro API route model key","AI Act Article 50 chatbot","stopWhen isStepCount",[2439,2440,2442],{"name":14,"url":1845},{"name":2423,"url":2441},"https:\u002F\u002Fai-sdk.dev",{"name":2443,"url":2444},"Zod","https:\u002F\u002Fzod.dev",[2446,2449,2452,2455,2458,2461,2462],{"title":2447,"url":2448},"AI SDK docs: Vue.js (Nuxt) quickstart","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fgetting-started\u002Fnuxt",{"title":2450,"url":2451},"AI SDK docs: Generating structured data","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Fgenerating-structured-data",{"title":2453,"url":2454},"AI SDK docs: Tool approvals","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fagents\u002Ftool-approvals",{"title":2456,"url":2457},"Claude API docs: Structured outputs","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fstructured-outputs",{"title":2459,"url":2460},"AI SDK docs: Telemetry","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftelemetry",{"title":132,"url":133},{"title":2463,"url":2464},"Faegre Drinker: Commission confirms the Transparency Code of Practice (Jul 2026)","https:\u002F\u002Fwww.faegredrinker.com\u002Fen\u002Finsights\u002Fpublications\u002F2026\u002F7\u002Feu-ai-act-commission-confirms-transparency-code-of-practice-as-adequate-and-publishes-final-version-of-its-guidelines-on-transparency-obligations","\u002Fimages\u002Fblog\u002Fnuxt-llm-features-ai-sdk-streaming\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-llm-features-ai-sdk-streaming\u002Fog.jpg",[80,81,82],"Shipping LLM features in Nuxt: streaming, structured output, tool approval","Nuxt AI end to end: a server route that holds the API key, streaming parts, strict structured output, tools needing approval, errors and Article 50.","Streaming LLM features in Nuxt: a tap fills a glass in a steady stream next to a hand over an approve button.",1793451238982]