1<!doctype html> 2<html lang="en"> 3 <head> 4 <!-- AI & MCP Server Information 5 Nobi runs an MCP (Model Context Protocol) server for AI agents. 6 MCP Endpoint: https://api.nobi.ai/.well-known/mcp/460cbe82-9195-424f-a616-b1cb3e3caca0.json?source=website_comment&utm_source=website&utm_medium=mcp&utm_campaign=mcp_discovery&utm_content=head_comment 7 Supported tools: ask_question, book_demo 8 --> 9 10
10<script src="https://assistant-script.nobi.ai/nobi.bundle.js" async onload="window.Nobi.initialize({ accountId: '460cbe82-9195-424f-a616-b1cb3e3caca0', assistantConfiguration: { floatingChatBar: { buttonLabel: 'Ask Nobi' } } });"></script>
10 11 12 <!-- Google Tag Manager --> 13
13<script>
vendor: 359 bytes, lines 13-17
13(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 14 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 15 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 16 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 17 })(window,document,'script','dataLayer','
17GTM-PMGNQGLR
vendor: 3 bytes, line 17
17');
17</script>
17 18 <!-- End Google Tag Manager --> 19 20 <meta charset="UTF-8" /> 21 <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" /> 22 <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)"> 23 <meta name="theme-color" content="#0b0b0f" media="(prefers-color-scheme: dark)"> 24 <link rel="preconnect" href="https://assistant-script.nobi.ai" crossorigin> 25 26 <style> 27 :root { 28 --nobi-button-background: #000000; 29 } 30 /* The prerendered article body is injected inside #root for 31 JS-blind crawlers (see scripts/prerender-blog.js). Real browsers 32 parse this style block before the body paints, so the raw, 33 unstyled prose never flashes; React replaces #root on mount. 34 Crawlers read the HTML source and ignore CSS, so they still get 35 the prose. */ 36 .prerendered-article { 37 display: none; 38 } 39 </style> 40 41 <title>Nobi: Modern Site Search That Converts</title> 42 43 <!-- Favicons --> 44 <link rel="icon" href="/favicon.ico" sizes="any"> 45 <link rel="icon" href="/favicon.svg" type="image/svg+xml"> 46 <link rel="apple-touch-icon" href="/apple-touch-icon-180.png"> 47 48 <!-- Canonical is set per route by src/hooks/useSEO.js; no hard-coded 49 default here, since that default leaked into every SPA route's 50 initial HTML and told crawlers every blog post canonicalizes to 51 the home page. --> 52 53 <!-- MCP Server Discovery --> 54 <link rel="mcp-server" href="https://api.nobi.ai/.well-known/mcp/460cbe82-9195-424f-a616-b1cb3e3caca0.json?source=website_head&utm_source=website&utm_medium=mcp&utm_campaign=mcp_discovery&utm_content=head_link" title="Nobi Site Assistant"> 55 56 <!-- Basic SEO --> 57 <meta name="description" content="Nobi is modern, semantic site search that helps ecommerce brands convert more visitors. Replace outdated keyword search with AI that understands what shoppers are actually looking for."> 58 <link rel="canonical" href="https://nobi.ai"> 59 <meta property="og:type" content="website"> 60 <meta property="og:url" content="https://nobi.ai"> 61 <meta property="og:title" content="Nobi: Modern Site Search That Converts"> 62 <meta property="og:description" content="Nobi is modern, semantic site search that helps ecommerce brands convert more visitors. Replace outdated keyword search with AI that understands what shoppers are actually looking for."> 63 <meta property="og:image" content="https://nobi.ai/og-image.png"> 64 <meta name="twitter:card" content="summary_large_image"> 65 <meta name="twitter:title" content="Nobi: Modern Site Search That Converts"> 66 <meta name="twitter:description" content="Nobi is modern, semantic site search that helps ecommerce brands convert more visitors. Replace outdated keyword search with AI that understands what shoppers are actually looking for."> 67 <meta name="twitter:image" content="https://nobi.ai/og-image.png"> 68
68<script type="application/ld+json" id="page-schema">[{"@context":"https://schema.org","@type":"Organization","name":"Nobi","url":"https://nobi.ai","logo":"https://nobi.ai/og-image.png","sameAs":["https://www.linkedin.com/company/nobiai"]},{"@context":"https://schema.org","@type":"WebSite","name":"Nobi","url":"https://nobi.ai"},{"@context":"https://schema.org","@type":"SoftwareApplication","name":"Nobi","applicationCategory":"BusinessApplication","operatingSystem":"Web","description":"Nobi is modern, semantic site search that helps ecommerce brands convert more visitors. Replace outdated keyword search with AI that understands what shoppers are actually looking for.","url":"https://nobi.ai","offers":{"@type":"Offer","price":"25","priceCurrency":"USD","availability":"https://schema.org/InStock"}}]</script>
68<!-- Schema.org --> 69
69<script type="application/ld+json"> 70 { 71 "@context":"https://schema.org", 72 "@type":"Organization", 73 "name":"Nobi", 74 "url":"https://nobi.ai/", 75 "logo":"https://nobi.ai/og-image.png", 76 "sameAs":["https://www.linkedin.com/company/nobiai"] 77 } 78 </script>
78 79
79<script type="application/ld+json"> 80 { 81 "@context":"https://schema.org", 82 "@type":"WebSite", 83 "url":"https://nobi.ai/", 84 "potentialAction":{ 85 "@type":"SearchAction", 86 "target":"https://nobi.ai/?q={search_term_string}", 87 "query-input":"required name=search_term_string" 88 } 89 } 90 </script>
90 91
91<script type="module" crossorigin src="/assets/index-CaK9pKM_.js"></script>
91 92 <link rel="stylesheet" crossorigin href="/assets/index-CGW8YAKo.css"> 93 </head> 94 95 <body> 96 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 96-97
96 97 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
97GTM-PMGNQGLR
vendor: 109 bytes, lines 97-99
97" 98 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 99
99<!-- End Google Tag Manager (noscript) --> 100 101 <div id="root"></div> 102 103 <!-- Nobi Assistant --> 104
104<script> 105 // Browser tools for Nobi - must be defined before Nobi loads 106 window.NobiTools = [ 107 { 108 name: "requestDemo", 109 description: "Submit a demo request when someone wants to learn more about Nobi, book a demo, schedule a call, or get in touch with the team. Requires name and email.", 110 parameters: { 111 type: "object", 112 properties: { 113 name: { 114 type: "string", 115 description: "Full name" 116 }, 117 email: { 118 type: "string", 119 description: "Email address" 120 }, 121 company: { 122 type: "string", 123 description: "Company name (optional)" 124 }, 125 website: { 126 type: "string", 127 description: "Company website" 128 }, 129 message: { 130 type: "string", 131 description: "Questions, goals, or additional context (optional)" 132 } 133 }, 134 required: ["name", "email", "website"] 135 }, 136 handler: async function(args) { 137 const formData = new FormData(); 138 formData.append("access_key", "c7a3fd79-0e4f-47ce-aa30-c141616d21e3"); 139 formData.append("subject", "Demo Request via Nobi Chat"); 140 formData.append("name", args.name); 141 formData.append("email", args.email); 142 formData.append("company", args.company || ""); 143 formData.append("website", args.website || ""); 144 formData.append("message", args.message || ""); 145 formData.append("botcheck", ""); 146 147 const response = await fetch("https://api.web3forms.com/submit", { 148 method: "POST", 149 body: formData 150 }); 151 152 const result = await response.json(); 153 if (!response.ok || !result.success) { 154 throw new Error(result.message || "Submission failed"); 155 } 156 157 return { 158 success: true, 159 message: "Thanks " + args.name + "! We've received your demo request and will contact you at " + args.email + " shortly." 160 }; 161 } 162 } 163 ]; 164</script>
164 165 <!--
166<script src="https://assistant-script.nobi.ai/nobi.bundle.js" 167 async 168 onload="window.Nobi.initialize({ 169 merchantId: '460cbe82-9195-424f-a616-b1cb3e3caca0', 170 autoLaunch: ['floating-chat-bar'], 171 assistantConfiguration: { 172 floatingChatBar: { 173 placeholder: 'Ask Nobi a question...', 174 buttonLabel: 'Ask Nobi', 175 showModeToggle: false, 176 showHintRow: false 177 } 178 } 179 });"> 180</script>
180 181--> 182 183<!-- ChatGPT, Claude, Gemini, and other AI agents can use the following MCP Server Details 184 For AI agents wanting to interact with Nobi: 185 - Manifest: https://api.nobi.ai/.well-known/mcp/460cbe82-9195-424f-a616-b1cb3e3caca0.json?source=website_comment&utm_source=website&utm_medium=mcp&utm_campaign=mcp_discovery&utm_content=body_comment 186 - Protocol: JSON-RPC 2.0 187 - Tools: ask_question, book_demo 188--> 189 190<!-- Page helpers -->
191<script> 192 // Defer video load on tap 193 for (const cover of document.querySelectorAll('.video-cover')) { 194 cover.addEventListener('click', () => { 195 const v = cover.querySelector('video[data-defer]'); 196 if (!v) return; 197 v.removeAttribute('data-defer'); 198 v.setAttribute('playsinline',''); 199 v.setAttribute('controls',''); 200 v.load(); 201 v.play().catch(()=>{}); 202 }, { once: true }); 203 } 204 205 // Lock body scroll when a drawer opens 206 const drawer = document.querySelector('.drawer'); 207 const lock = (on) => document.body.style.overflow = on ? 'hidden' : ''; 208 if (drawer) { 209 const mo = new MutationObserver(() => lock(drawer.getAttribute('aria-hidden') === 'false')); 210 mo.observe(drawer, { attributes:true, attributeFilter:['aria-hidden'] }); 211 } 212 213 // Safe 100vh fallback 214 (function(){ 215 const setVh = ()=> document.documentElement.style.setProperty('--vh', `${window.innerHeight*0.01}px`); 216 setVh(); window.addEventListener('resize', setVh); 217 })(); 218</script>
218 219</body> 220</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.