import QRCode from 'qrcode'; import './style.css'; const initial = 'https://huggingface.co/datasets/evalstate/mcp-clients'; const themes = [ {id:'phosphor',name:'Green phosphor',code:'P1',accent:'#a7f878',ink:'#123822',paper:'#edfadf',description:'Late nights. Green screens. Pure signal.'}, {id:'amber',name:'Amber console',code:'P2',accent:'#ffbd69',ink:'#492b0d',paper:'#fff0d4',description:'A warm glow from a different era.'}, {id:'ice',name:'Arctic terminal',code:'P3',accent:'#91d9ff',ink:'#12304a',paper:'#e9f6ff',description:'Cold pixels. A very clear connection.'} ]; let current=themes[0], svg='', revision=0; let logoData=''; const logo = new Image(); const response = await fetch('/hf-logo-pirate.png'); const blob = await response.blob(); logoData = await new Promise(resolve=>{const reader=new FileReader();reader.onload=()=>resolve(reader.result);reader.readAsDataURL(blob)}); logo.src=logoData; await logo.decode(); document.querySelector('#app').innerHTML=`
▥ SIGNAL/QR STUDIO LOCAL ENCODING · NO TRACKING
UTILITY_001 / LINKS → PIXELS

Your link.
A little more signal.

QR codes with an old-school soul. Pick a frequency,
drop in a link, and send it out into the world.

01 / INPUTHTTP(S)
›

Static by design. Your URL, directly encoded.

02 / FREQUENCY
${themes.map((t,i)=>``).join('')}

Hugging Face logo, front and center.

Larger logos cover more data. Test with your phone before printing.

Shown in the preview and both downloads.

↳

Built for the real world.
High error correction. A clean quiet zone.
No redirects, accounts, or expiration.

LIVE PREVIEWP1 / PHOSPHOR
${current.description}ECC / H
● SIGNAL READY

Take your pixels with you.

`; const input=document.querySelector('#url'); function validURL(value){try {const u=new URL(value);return ['http:','https:'].includes(u.protocol)&&!!u.hostname;}catch{return false}} function update(){ revision++; const includeHeader=document.querySelector("#include-header").checked; document.querySelector(".card-top").hidden=!includeHeader; document.querySelector("#header-preview").textContent=document.querySelector("#header-text").value; document.querySelector("#header-text").disabled=!includeHeader; document.querySelector("#size-value").textContent=document.querySelector("#logo-size").value+"%"; document.querySelector("#logo-size").disabled=!document.querySelector("#logo").checked; const value=input.value.trim(); const valid=validURL(value); document.querySelector('#error').textContent=valid?'Static by design. Your URL, directly encoded.':'Enter a complete URL starting with https:// or http://.'; input.setAttribute('aria-invalid',String(!valid)); document.querySelectorAll('.actions button').forEach(b=>b.disabled=!valid); if(!valid){svg='';document.querySelector('#qr').innerHTML='

AWAITING VALID URL

';document.querySelector('#status').textContent='○ AWAITING INPUT';return} try { const qr=QRCode.create(value,{errorCorrectionLevel:'H'});const n=qr.modules.size, size=n+8; // A modest centered logo; all finder/timing patterns and the 4-module quiet zone remain intact. const logoSize=Math.floor(n*Number(document.querySelector("#logo-size").value)/100),start=(size-logoSize)/2; let path='';for(let y=0;y${withLogo?``:''}`; document.querySelector('#qr').innerHTML=svg;document.querySelector('#status').textContent='● SIGNAL READY'; }catch{svg='';document.querySelector('#qr').innerHTML='

URL TOO LONG

';document.querySelector('#error').textContent='This URL exceeds QR capacity. Try a shorter URL.';document.querySelector('#status').textContent='○ INPUT TOO LONG';document.querySelectorAll('.actions button').forEach(b=>b.disabled=true)} } function save(blob,ext){const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=`signal-${current.id}.${ext}`;a.click();setTimeout(()=>URL.revokeObjectURL(a.href),1000)} function exportSVG(){ if(!document.querySelector('#include-header').checked)return svg; const text=document.querySelector('#header-text').value.replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); const nested=svg.replace('width="1024" height="1024"','x="0" y="112" width="1024" height="1024"'); return `${text}${nested}`; } document.querySelector('#svg').onclick=()=>{if(svg)save(new Blob([exportSVG()],{type:'image/svg+xml'}),'svg')}; document.querySelector('#png').onclick=async()=>{if(!svg)return;const version=revision;const image=new Image();image.src=URL.createObjectURL(new Blob([exportSVG()],{type:'image/svg+xml'}));try{await image.decode();if(version!==revision)return;const canvas=document.createElement('canvas');canvas.width=1024;canvas.height=image.naturalHeight;canvas.getContext('2d').drawImage(image,0,0);canvas.toBlob(blob=>{if(blob)save(blob,'png')},'image/png')}finally{URL.revokeObjectURL(image.src)}}; for(const id of ['logo-size','include-header','header-text'])document.getElementById(id).addEventListener('input',update); input.addEventListener('input',update);document.querySelector('#logo').onchange=update; document.querySelectorAll('.theme').forEach(button=>button.onclick=()=>{current=themes.find(t=>t.id===button.dataset.theme);document.documentElement.style.setProperty('--accent',current.accent);document.documentElement.style.setProperty('--paper',current.paper);document.documentElement.style.setProperty('--ink',current.ink);document.querySelectorAll('.theme').forEach(b=>{b.classList.toggle('selected',b===button);b.setAttribute('aria-pressed',String(b===button))});document.querySelector('#preview-code').textContent=`${current.code} / ${current.id.toUpperCase()}`;document.querySelector('#description').textContent=current.description;update()});update();