1const b=document.getElementById('menu'),n=document.getElementById('nav'); 2 3// Keep the main navigation compact while exposing Kanverse's community initiative. 4if(n&&!n.querySelector('a[href="/for-good.html"]')){ 5 const good=document.createElement('a'); 6 good.href='/for-good.html'; 7 good.textContent='For Good'; 8 const contact=n.querySelector('a[href="#contact"]'); 9 n.insertBefore(good,contact||null); 10} 11 12// Blink Bridge: direct navigation from the Kanverse homepage. 13if(n&&!n.querySelector('a[href="/blink-bridge/"]')){ 14 const bridge=document.createElement('a'); 15 bridge.href='/blink-bridge/'; 16 bridge.textContent='Blink Bridge'; 17 const contact=n.querySelector('a[href="#contact"]'); 18 n.insertBefore(bridge,contact||null); 19} 20 21b.onclick=()=>{const o=n.classList.toggle('open');b.textContent=o?'â':'â°';b.setAttribute('aria-expanded',o)}; 22n.querySelectorAll('a').forEach(a=>a.onclick=()=>{n.classList.remove('open');b.textContent='â°'}); 23document.getElementById('year').textContent=new Date().getFullYear(); 24if('serviceWorker'in navigator)addEventListener('load',()=>navigator.serviceWorker.register('/sw.js')); 25 26// Add Blink Bridge to the existing Blink Universe without changing the homepage markup. 27const blinkUniverse=document.querySelector('#blink-universe .kv-project-tiles, #blink-universe .cards, #blink-universe .grid, #blink-universe'); 28if(blinkUniverse&&!blinkUniverse.querySelector('.blink-bridge-home-card')){ 29 const card=document.createElement('article'); 30 card.className='blink-bridge-home-card'; 31 card.innerHTML='<span class="tag">BLINK ENGINE</span><h3>Blink Bridge</h3><p>Connect two browser endpoints and move explicitly approved page context between them â ready for remote inspection and AI reasoning.</p><div class="actions" style="margin-top:16px"><a class="btn primary" href="/blink-bridge/">Explore Blink Bridge â</a></div>'; 32 blinkUniverse.appendChild(card); 33} 34 35// Never Forget is now publicly available on Microsoft Store and as an installable Android PWA. 36const neverForgetTile=[...document.querySelectorAll('#more-projects .kv-project-tiles article')] 37 .find(card=>card.querySelector('h3')?.textContent.trim()==='Never Forget'); 38 39if(neverForgetTile){ 40 const status=neverForgetTile.querySelector('b'); 41 if(status) status.textContent='Available on Microsoft Store · Android PWA'; 42 43 if(!neverForgetTile.querySelector('.nf-store-actions')){ 44 const actions=document.createElement('div'); 45 actions.className='actions nf-store-actions'; 46 actions.style.marginTop='16px'; 47 48 const windowsLink=document.createElement('a'); 49 windowsLink.className='btn primary'; 50 windowsLink.href='https://apps.microsoft.com/detail/9pd36d0pkc9n?ocid=webpdpshare'; 51 windowsLink.target='_blank'; 52 windowsLink.rel='noopener noreferrer'; 53 windowsLink.textContent='Get on Microsoft Store'; 54 55 const androidLink=document.createElement('a'); 56 androidLink.className='btn'; 57 androidLink.href='https://neverforgetms.netlify.app/'; 58 androidLink.target='_blank'; 59 androidLink.rel='noopener noreferrer'; 60 androidLink.textContent='Install on Android'; 61 62 actions.append(windowsLink,androidLink); 63 neverForgetTile.appendChild(actions); 64 } 65} 66 67// Public Devpost / competitions section. 68const moreProjects=document.getElementById('more-projects'); 69if(moreProjects&&!document.getElementById('devpost-submissions')){ 70 const videoFrame=(id,title)=>`<div style="position:relative;width:100%;aspect-ratio:16/9;margin:16px 0 18px;border-radius:14px;overflow:hidden;background:#02060d"><iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/${id}" title="${title}" style="position:absolute;inset:0;width:100%;height:100%;border:0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>`; 71 const localVideo=(src,title)=>`<div style="position:relative;width:100%;aspect-ratio:16/9;margin:16px 0 18px;border-radius:14px;overflow:hidden;background:#02060d"><video controls playsinline preload="metadata" title="${title}" style="position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#02060d"><source src="${src}" type="video/mp4">Your browser does not support embedded video.</video></div>`; 72 const minecraftVideoFrame=(id,title)=>`<div style="position:relative;width:100%;aspect-ratio:16/9;margin:16px 0 18px;border-radius:14px;overflow:hidden;background:#02060d"><iframe id="minecraftDemoPlayer" loading="lazy" src="https://www.youtube-nocookie.com/embed/${id}?enablejsapi=1&playsinline=1&rel=0&origin=${encodeURIComponent(location.origin)}" title="${title}" style="position:absolute;inset:0;width:100%;height:100%;border:0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture;
72 web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe><div id="minecraftDemoTextFix" aria-hidden="true" style="display:none;position:absolute;left:62.5%;top:74.2%;width:29.5%;height:8.5%;z-index:4;pointer-events:none;background:#000;color:#fff;align-items:center;justify-content:center;flex-direction:column;text-align:center;font-family:Arial,sans-serif;line-height:1.15"><div style="font-size:clamp(7px,1.05vw,16px);font-weight:400;white-space:nowrap">LIGHT SENT TO MINECRAFT</div><div style="font-size:clamp(7px,1vw,15px);font-weight:400;white-space:nowrap">Cross-world capability transfer complete.</div></div></div>`; 73 74 const section=document.createElement('section'); 75 section.className='section kv-more-projects'; 76 section.id='devpost-submissions'; 77 section.innerHTML=` 78 <div class="heading"> 79 <div> 80 <p class="eyebrow">DEVPOST · COMPETITIONS</p> 81 <h2>Kanverse challenge submissions</h2> 82 </div> 83 <p>Working Kanverse experiments presented publicly through Devpost challenges.</p> 84 </div> 85 <div class="kv-project-tiles"> 86 <article> 87 <span>CALL-E SUBMISSION</span> 88 <h3>Kanverse Human API</h3> 89 <p>A human-controlled capability layer that explores how AI can request access to real-world human abilities without turning permission into permanent ownership.</p> 90 ${videoFrame('SNHIu6Fl5YA','Kanverse Human API demo')} 91 <div class="actions"><a class="btn primary" href="https://devpost.com/software/kanverse-human-api" target="_blank" rel="noopener noreferrer">View on Devpost â</a></div> 92 </article> 93 <article> 94 <span>WEBMCP CHALLENGE</span> 95 <h3>Blink Borrow</h3> 96 <p>Temporary, human-approved powers for AI agents: discover, request, approve, borrow and revoke capabilities across connected browsers.</p> 97 ${videoFrame('uWJmF9fTS7s','Blink Borrow WebMCP demo')} 98 <div class="actions"><a class="btn primary" href="https://devpost.com/software/blink-agent-relay" target="_blank" rel="noopener noreferrer">View Blink Borrow on Devpost â</a></div> 99 </article> 100 </div>`; 101 moreProjects.insertAdjacentElement('afterend',section); 102 103 const achievement=document.createElement('section'); 104 achievement.className='section kv-more-projects'; 105 achievement.id='achievements'; 106 achievement.innerHTML=` 107 <div class="heading"> 108 <div> 109 <p class="eyebrow">KANVERSE ACHIEVEMENTS</p> 110 <h2>Cross-world capability experiment</h2> 111 </div> 112 <p>Milestones that show Kanverse concepts working beyond a conventional webpage.</p> 113 </div> 114 <div class="kv-project-tiles"> 115 <article> 116 <span>ROBLOX · WEBMCP EXPERIMENT</span> 117 <h3>AI capability reaches a Roblox world</h3> 118 <p>Kanverse demonstrated a cross-world experiment in which an external WebMCP-facing capability could be exposed to an AI workflow and connected to a Roblox experience, including a temporary lighting capability under explicit control.</p> 119 ${videoFrame('G9xX-s4zbRg','Blink Borrow WebMCP Roblox cross-world demo')} 120 <b>Browser â AI tool â Roblox world</b> 121 </article> 122 <article> 123 <span>CHATGPT · WEBMCP · MINECRAFT</span> 124 <h3>ChatGPT controls Minecraft through WebMCP</h3> 125 <p>A live Kanverse interoperability prototype where ChatGPT discovers and invokes a WebMCP site tool that triggers a real action inside a running Minecraft world through the Kanverse bridge.</p> 126 ${minecraftVideoFrame('7knV3dhsJW4','ChatGPT WebMCP Minecraft live demo')} 127 <b>ChatGPT â WebMCP â Kanverse Bridge â Minecraft</b> 128 </article> 129 <article> 130 <span>BLINK BRIDGE · NVIDIA GPU CAPABILITY</span> 131 <h3>A phone borrows an RTX GPU capability</h3> 132 <p>A real Kanverse Blink Bridge demonstration: an Android phone requests a bounded <code>gpu.compute</code> capability, the workload executes on the connected PC's NVIDIA GeForce RTX 3050 Laptop GPU, and the result returns to the phone.</p> 133 ${localVideo('/assets/borrow-rtx-demo.mp4','Kanverse Blink Bridge NVIDIA GPU Borrow demo')} 134 <b>Phone â Blink Bridge â PC GPU â result returned</b> 135 <div class="kv-producthunt-launch" style="display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;align-items:center;margin-top:18px;padding:16px;border:1px solid rgba(255,97,84,.35);border-radius:18px;background:linear-gradient(145deg,rgba(255,97,84,.09),rgba(255,255,255,.025))"> 136 <img alt="Kanverse GPU Borrow" src="https://ph-files.imgix.net/06550802-6295-4e42-ae1f-788c40354745.jpeg?auto=compress,format&codec=mozjpeg&cs=strip&fit=crop&h=80&w=80" loading="lazy" width="64" height="64" style="width:64px;
136height:64px;border-radius:12px;object-fit:cover"> 137 <div style="min-width:0"> 138 <span style="display:block;margin-bottom:4px;font-size:.76rem;letter-spacing:.09em;color:#ff7569">NOW ON PRODUCT HUNT</span> 139 <strong style="display:block;font-size:1.05rem;color:#fff">Kanverse GPU Borrow</strong> 140 <small style="display:block;margin-top:4px;color:var(--muted,#9daec1);line-height:1.45">Borrow GPU compute from another device, with permission.</small> 141 </div> 142 <a href="https://www.producthunt.com/products/kanverse-gpu-borrow?embed=true&utm_source=kanverse&utm_medium=website" target="_blank" rel="noopener noreferrer" style="grid-column:1/-1;display:inline-flex;width:max-content;max-width:100%;align-items:center;justify-content:center;padding:9px 16px;border-radius:999px;background:#ff6154;color:#fff;text-decoration:none;font-weight:700">Check it out on Product Hunt â</a> 143 </div> 144 </article> 145 <article id="blink-ollama-borrow" style="scroll-margin-top:90px"> 146 <span>ANDROID · BLINK BRIDGE · OLLAMA · NVIDIA</span> 147 <h3>Android borrows local AI from an RTX GPU</h3> 148 <p>An Android phone sends a prompt through Cloudflare Tunnel and Blink Bridge to Ollama running on a Windows PC. The NVIDIA GeForce RTX 3050 performs the local inference, and the generated answer returns to Android.</p> 149 ${localVideo('/assets/blink-ollama-borrow-demo.mp4','Kanverse Blink Ollama Borrow Android to NVIDIA GPU demo')} 150 <b>Android â Cloudflare Tunnel â Blink Bridge â Ollama â NVIDIA GPU â Android</b> 151 </article> 152 </div>`; 153 section.insertAdjacentElement('afterend',achievement); 154 155 // The published YouTube demo contains a literal "\\n" in its final status line. 156 // Keep the original proof video and correct only that on-screen text from the 157 // moment it appears, preserving the demo timing and every other frame. 158 const initMinecraftVideoTextFix=()=>{ 159 const iframe=document.getElementById('minecraftDemoPlayer'); 160 const overlay=document.getElementById('minecraftDemoTextFix'); 161 if(!iframe||!overlay)return; 162 163 let attached=false; 164 const attach=()=>{ 165 if(attached||!window.YT?.Player)return false; 166 attached=true; 167 const player=new YT.Player(iframe,{ 168 events:{ 169 onReady:()=>{ 170 const sync=()=>{ 171 let time=0; 172 try{time=Number(player.getCurrentTime())||0}catch{} 173 overlay.style.display=time>=13.25?'flex':'none'; 174 }; 175 sync(); 176 setInterval(sync,150); 177 } 178 } 179 }); 180 return true; 181 }; 182 183 if(attach())return; 184 if(!document.querySelector('script[data-kanverse-youtube-api]')){ 185 const api=document.createElement('script'); 186 api.src='https://www.youtube.com/iframe_api'; 187 api.async=true; 188 api.dataset.kanverseYoutubeApi='1'; 189 document.head.appendChild(api); 190 } 191 const wait=setInterval(()=>{if(attach())clearInterval(wait)},100); 192 setTimeout(()=>clearInterval(wait),10000); 193 }; 194 initMinecraftVideoTextFix(); 195 196 if(location.hash==='#blink-ollama-borrow'){ 197 requestAnimationFrame(()=>document.getElementById('blink-ollama-borrow')?.scrollIntoView({block:'start'})); 198 } 199 200 if(n&&!n.querySelector('a[href="#devpost-submissions"]')){ 201 const devpostNav=document.createElement('a'); 202 devpostNav.href='#devpost-submissions'; 203 devpostNav.textContent='Devpost'; 204 const contact=n.querySelector('a[href="#contact"]'); 205 n.insertBefore(devpostNav,contact||null); 206 devpostNav.onclick=()=>{n.classList.remove('open');b.textContent='â°'}; 207 } 208} 209 210function loadKevinNaturalIntent(){ 211 if(window.KevinNaturalIntent||document.querySelector('script[data-kevin-natural-intent]'))return; 212 const natural=document.createElement('script'); 213 natural.src='/kevin-natural-intent.js?v=20260823-natural2'; 214 natural.dataset.kevinNaturalIntent='1'; 215 document.body.appendChild(natural); 216} 217 218function loadKevinAgentV2(){ 219 if(!document.getElementById('kevinCompanion'))return; 220 if(window.KevinAgentV2){loadKevinNaturalIntent();return;}
221 const existing=document.querySelector('script[data-kevin-agent-v2]'); 222 if(existing){ 223 const wait=()=>window.KevinAgentV2?loadKevinNaturalIntent():setTimeout(wait,50); 224 wait(); 225 return; 226 } 227 const agent=document.createElement('script'); 228 agent.src='/kevin-agent-v2.js?v=20260823-homefix4'; 229 agent.dataset.kevinAgentV2='1'; 230 agent.onload=loadKevinNaturalIntent; 231 document.body.appendChild(agent); 232} 233 234function waitForKevinAgentV2(timeout=3500){ 235 loadKevinAgentV2(); 236 return new Promise(resolve=>{ 237 const started=Date.now(); 238 const check=()=>{ 239 if(window.KevinAgentV2){resolve(window.KevinAgentV2);return;} 240 if(Date.now()-started>=timeout){resolve(null);return;} 241 setTimeout(check,40); 242 }; 243 check(); 244 }); 245} 246 247// Priority disambiguation: the legacy Kevin layer has a local homepage section 248// named "Blink". A request for the full product name "Blink Bridge" must never 249// be shortened to that section. Capture the explicit product request before the 250// legacy form handler and hand execution to Agent v2's permissioned action loop. 251document.addEventListener('submit',async event=>{ 252 const form=event.target; 253 if(form?.id!=='kcForm')return; 254 const field=document.getElementById('kcInput'); 255 const raw=field?.value||''; 256 const q=raw.toLowerCase().replace(/[â']/g,'').replace(/[^a-z0-9\s]/g,' ').replace(/\s+/g,' ').trim(); 257 const mentionsBridge=/\bblink bridge\b/.test(q); 258 const requestsOpen=/\b(open|launch|visit|bring up|pull up|take me to|bring me to|get me to|go to|head to|let me see|show me|have a look at|check out)\b/.test(q) 259 || /\b(can|could|would|will) you .*\b(open|launch|bring|pull|take|show|get)\b/.test(q) 260 || /\bi (want|would like|d like) to (open|visit|see|check|look at)\b/.test(q); 261 if(!mentionsBridge||!requestsOpen)return; 262 263 event.preventDefault(); 264 event.stopImmediatePropagation(); 265 if(field){field.value='';field.focus();} 266 267 const agent=await waitForKevinAgentV2(); 268 if(agent){ 269 agent.decide('open blink bridge'); 270 return; 271 } 272 const output=document.getElementById('kcAnswer'); 273 if(output)output.textContent='Kevin Agent v2 is still loading, so I stopped instead of routing you to the wrong Blink section. Please try again in a moment.'; 274},true); 275 276// Run immediately when this script is loaded late in the page, or wait only 277// when the DOM is genuinely still being constructed. This avoids missing the 278// DOMContentLoaded event on the homepage. 279if(document.readyState==='loading'){ 280 document.addEventListener('DOMContentLoaded',loadKevinAgentV2,{once:true}); 281}else{ 282 loadKevinAgentV2(); 283}
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.