1<!DOCTYPE html> 2<html lang="en" translate="no"> 3 <head> 4 <meta charset="UTF-8" /> 5 <link rel="icon" type="image/png" href="/favicon.png"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <title>Blendification | Human and Business Intelligence Platform</title> 8 <meta name="description" data-rh="true" content="Blendification connects human intelligence with enterprise data through adaptive AI conversations, research-grade analytics, and interactive Live Slides."> 9 <meta name="author" content="Blendification" /> 10 <meta name="robots" data-rh="true" content="index,follow" /> 11 <!-- Canonical is emitted per route by <Seo /> so it always self-references. --> 12 <meta property="og:url" data-rh="true" content="https://blendification.com/" /> 13 <meta property="og:site_name" data-rh="true" content="Blendification" /> 14 <meta property="og:type" data-rh="true" content="website" /> 15 <meta property="og:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/attachments/og-images/65c0e1ab-2624-4143-bd00-2b2f74b18239"> 16 17 <meta name="twitter:card" data-rh="true" content="summary_large_image" /> 18 <meta name="twitter:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/attachments/og-images/65c0e1ab-2624-4143-bd00-2b2f74b18239"> 19 20 <link rel="preconnect" href="https://fonts.googleapis.com" /> 21 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 22 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Manrope:wght@600;700;800&family=Instrument+Serif:ital@0;1&display=swap" rel="stylesheet" /> 23 <meta property="og:title" data-rh="true" content="Blendification | Human and Business Intelligence Platform"> 24 <meta name="twitter:title" data-rh="true" content="Blendification | Human and Business Intelligence Platform"> 25 <meta property="og:description" data-rh="true" content="Blendification connects human intelligence with enterprise data through adaptive AI conversations, research-grade analytics, and interactive Live Slides."> 26 <meta name="twitter:description" data-rh="true" content="Blendification connects human intelligence with enterprise data through adaptive AI conversations, research-grade analytics, and interactive Live Slides."> 27
27<script type="module" crossorigin src="/assets/index-Cysi6ppR.js"></script>
27 28 <link rel="stylesheet" crossorigin href="/assets/index-BFXnpRES.css">
29<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
29</head> 30 31 <body> 32 <div id="root"></div> 33 34 <!-- Visitor Analytics --> 35
35<script> 36 (function(){ 37 var SITE_ID = "b82e312e-f167-4792-a383-d8e427f8ad14"; 38 var INGEST = "https://kcpagaezygnefzbgnjoo.supabase.co/functions/v1/ingest-event"; 39 var APIKEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImtjcGFnYWV6eWduZWZ6Ymduam9vIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Nzg3MjA5MzEsImV4cCI6MjA5NDI5NjkzMX0.1g-yOj5tjrVkpQ5ifmZN_EyEuThrc3_9uVuS6wALghw"; 40 var SK = '__va_sid'; 41 var VK = '__va_vid'; 42 var IK = '__va_ident'; 43 function uuid(){ 44 if (window.crypto && crypto.randomUUID) return crypto.randomUUID(); 45 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c){ 46 var r=Math.random()*16|0,v=c==='x'?r:(r&0x3|0x8);return v.toString(16); 47 }); 48 } 49 function sid(){ 50 try { 51 var s = sessionStorage.getItem(SK); 52 if (!s) { s = uuid(); sessionStorage.setItem(SK, s); } 53 return s; 54 } catch(e){ return uuid(); } 55 } 56 function vid(){ 57 try { 58 var v = localStorage.getItem(VK); 59 if (!v) { v = uuid(); localStorage.setItem(VK, v); } 60 return v; 61 } catch(e){ return uuid(); } 62 } 63 function getIdent(){ 64 try { return JSON.parse(localStorage.getItem(IK) || 'null'); } catch(e){ return null; } 65 } 66 function setIdent(obj){ 67 try { localStorage.setItem(IK, JSON.stringify(obj)); } catch(e){} 68 } 69 function normUrl(u){ 70 try { 71 var url = new URL(u, location.href); 72 var path = url.pathname || '/'; 73 if (path.length > 1 && path.charAt(path.length-1) === '/') path = path.slice(0,-1); 74 return url.protocol.toLowerCase() + '//' + url.hostname.toLowerCase() + path; 75 } catch(e){ return u; } 76 } 77 function device(){ 78 var w = window.innerWidth || 1024; 79 if (w < 640) return 'mobile'; 80 if (w < 1024) return 'tablet'; 81 return 'desktop'; 82 } 83 function utm(){ 84 var p = new URLSearchParams(location.search), o = {}; 85 ['source','medium','campaign','term','content'].forEach(function(k){ 86 var v = p.get('utm_'+k); if (v) o['utm_'+k] = v; 87 }); 88 return o; 89 } 90 function docDims(){ 91 var d = document.documentElement, b = document.body || {}; 92 return { 93 w: Math.max(d.scrollWidth||0, d.clientWidth||0, b.scrollWidth||0), 94 h: Math.max(d.scrollHeight||0, d.clientHeight||0, b.scrollHeight||0) 95 }; 96 } 97 function layoutSig(){ 98 try { 99 var dims = docDims(); 100 return [ 101 document.querySelectorAll('a').length, 102 document.querySelectorAll('button').length, 103 document.querySelectorAll('img').length, 104 document.querySelectorAll('form').length, 105 document.querySelectorAll('section,article,header,footer,nav').length, 106 Math.round(dims.h / 200) 107 ].join('.'); 108 } catch(e){ return null; } 109 } 110 var ctx = { 111 tracking_site_id: SITE_ID, 112 session_id: sid(), 113 visitor_id: vid(), 114 page_url: normUrl(location.href), 115 page_path: location.pathname, 116 referrer: document.referrer || null, 117 device_type: device(), 118 user_agent: navigator.userAgent 119 }; 120 Object.assign(ctx, utm()); 121 var DEBUG = false; 122 try { 123 if (/[?&]va_debug=1\b/.test(location.search)) { 124 sessionStorage.setItem('__va_debug', '1'); 125 } 126 if (sessionStorage.getItem('__va_debug') === '1') DEBUG = true; 127 if (localStorage.getItem('__va_debug') === '1') DEBUG = true; 128 } catch(e){} 129 if (window.va && window.va.debug === true) DEBUG = true; 130 function log(){ 131 if (!DEBUG || !window.console) return; 132 try { console.log.apply(console, ['[va]'].concat([].slice.call(arguments))); } catch(e){} 133 } 134 log('init', { site_id: SITE_ID, ingest: INGEST }); 135 function send(event_type, metadata){ 136 var ident = getIdent(); 137 var md = metadata || {}; 138 if (ident && ident.email && !md.email) md.email = ident.email; 139 if (ident && ident.name && !md.name) md.name = ident.name; 140 var body = JSON.stringify(Object.assign({}, ctx, { 141 event_type: event_type, 142 metadata: md 143 })); 144 log('send', event_type, md); 145 try { 146 if (navigator.sendBeacon) { 147 var blob = new Blob([body], { type: 'application/json' }); 148 if (navigator.sendBeacon(INGEST, blob)) { 149 log('beacon queued', event_type); 150 return; 151 } 152 log('beacon refused, falling back to fetch', event_type); 153 } 154 } catch(e){ log('beacon threw', e && e.message); } 155 fetch(INGEST, { 156 method: 'POST', 157 headers: { 'Content-Type': 'application/json', 'apikey': APIKEY }, 158 body: body, 159 keepalive: true 160 }).then(function(r){ log('fetch', event_type, r.status); }) 161 .catch(function(e){ log('fetch failed', event_type, e && e.message); }); 162 } 163 function identify(email, traits){ 164 if (!email) return; 165 var ident = { email: String(email).toLowerCase() }; 166 if (traits && typeof traits === 'object') { 167 if (traits.name) ident.name = String(traits.name);
168 if (traits.phone) ident.phone = String(traits.phone); 169 } 170 setIdent(ident); 171 send('identify', ident); 172 } 173 function sendPageView(){ 174 var dims = docDims(); 175 send('page_view', { doc_w: dims.w, doc_h: dims.h, layout_sig: layoutSig() }); 176 } 177 if (document.readyState === 'complete') sendPageView(); 178 else window.addEventListener('load', function(){ setTimeout(sendPageView, 250); }); 179 var pageStart = Date.now(); 180 function flushTime(){ 181 var secs = Math.round((Date.now() - pageStart) / 1000); 182 if (secs > 1) send('page_time', { seconds: secs }); 183 } 184 window.addEventListener('pagehide', flushTime); 185 window.addEventListener('beforeunload', flushTime); 186 var maxDepth = 0, scrollTimer = null; 187 window.addEventListener('scroll', function(){ 188 var h = document.documentElement; 189 var scrolled = (h.scrollTop || document.body.scrollTop); 190 var height = (h.scrollHeight || document.body.scrollHeight) - h.clientHeight; 191 var pct = height > 0 ? Math.round((scrolled / height) * 100) : 0; 192 if (pct > maxDepth) maxDepth = pct; 193 if (scrollTimer) clearTimeout(scrollTimer); 194 scrollTimer = setTimeout(function(){ send('scroll', { depth_pct: maxDepth }); }, 800); 195 }, { passive: true }); 196 document.addEventListener('click', function(e){ 197 var t = e.target; 198 while (t && t !== document.body) { 199 if (t.tagName === 'A' || t.tagName === 'BUTTON') { 200 var dims = docDims(); 201 var d = document.documentElement; 202 var px = e.pageX != null ? e.pageX : e.clientX + (d.scrollLeft || 0); 203 var py = e.pageY != null ? e.pageY : e.clientY + (d.scrollTop || 0); 204 send('click', { 205 tag: t.tagName.toLowerCase(), 206 text: (t.innerText || '').slice(0, 80), 207 href: t.href || null, 208 x_pct: Math.round((e.clientX / window.innerWidth) * 100), 209 y_pct: Math.round((e.clientY / window.innerHeight) * 100), 210 page_x_pct: dims.w > 0 ? Math.round((px / dims.w) * 1000) / 10 : null, 211 page_y_pct: dims.h > 0 ? Math.round((py / dims.h) * 1000) / 10 : null, 212 doc_w: dims.w, 213 doc_h: dims.h 214 }); 215 return; 216 } 217 t = t.parentNode; 218 } 219 }, true); 220 document.addEventListener('submit', function(e){ 221 var f = e.target; if (!f || !f.elements) return; 222 var data = {}, email = null, name = null, phone = null; 223 for (var i = 0; i < f.elements.length; i++) { 224 var el = f.elements[i]; 225 if (!el.name || el.type === 'password') continue; 226 var v = (el.value || '').toString().slice(0, 200); 227 if (!v) continue; 228 data[el.name] = v; 229 var lname = el.name.toLowerCase(); 230 if (!email && (el.type === 'email' || lname.indexOf('email') >= 0)) email = v; 231 if (!name && (lname === 'name' || lname.indexOf('full') >= 0 || lname.indexOf('first') >= 0)) name = v; 232 if (!phone && (el.type === 'tel' || lname.indexOf('phone') >= 0)) phone = v; 233 } 234 if (email) identify(email, { name: name, phone: phone }); 235 send('form_submit', { form_data: data, email: email, name: name, phone: phone }); 236 }, true); 237 window.va = { track: send, identify: identify, debug: DEBUG }; 238 window.__va = { track: send, identify: identify }; 239 })(); 240 </script>
240 241 </body> 242</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.