app
Adom Shotlog
Public Made by Adomby adom
See the shots your AI never showed you, and know it actually SAW them. adom-shotlog streams every screenshot the AI gathers into a live gallery (webview/pup/browser/phone), reports whether a human is
#!/usr/bin/env node
// Ralph layout audit for the shotlog viewer (see skills/adom-shotlog-dev).
// Usage: CHROME=<chrome> node tools/ralph-check.cjs <viewer-url> [width] [dpr]
// PASS = outerHScroll:false AND outerVScroll:false AND off:[]
const puppeteer = require('/home/adom/project/node_modules/puppeteer-core');
(async()=>{
const url = process.argv[2], W = +(process.argv[3]||360), DPR = +(process.argv[4]||1.5);
const b = await puppeteer.launch({executablePath: process.env.CHROME, headless:'new',
args:['--no-sandbox','--disable-gpu','--disable-dev-shm-usage']});
const p = await b.newPage();
await p.setViewport({width:W, height:701, deviceScaleFactor:DPR});
await p.goto(url, {waitUntil:'networkidle2', timeout:25000}).catch(()=>{});
await new Promise(r=>setTimeout(r,1800));
const res = await p.evaluate(()=>{
const de=document.documentElement, vw=de.clientWidth;
const off=[...document.querySelectorAll('*')].map(el=>{const r=el.getBoundingClientRect();
return {t:el.tagName+'.'+((''+el.className).split(' ')[0]||''), right:Math.round(r.right)};})
.filter(x=>x.right>vw+1).sort((a,b)=>b.right-a.right).slice(0,10);
return {vw, dpr:devicePixelRatio, outerHScroll: de.scrollWidth>de.clientWidth,
outerVScroll: de.scrollHeight>de.clientHeight, off};
});
console.log(JSON.stringify(res));
await b.close();
process.exit((res.outerHScroll||res.outerVScroll||res.off.length)?1:0);
})().catch(e=>{console.error(String(e).slice(0,200));process.exit(2)});