// Inspect only YCode's already-built, isolated homepage fixture. No WorkBuddy connection. const fs = require('node:fs') const path = require('node:path') const { app, BrowserWindow } = require('electron') app.disableHardwareAcceleration() const root = path.resolve(__dirname, '..') const output = path.join(root, '.tmp', 'home-visual-audit-20261016') fs.mkdirSync(output, { recursive: true }) app.setPath('userData', path.join(output, 'user-data')) const selectors = [ '.wb-home-header', '.wb-home-header__title', '.wb-scene-tabs', '.wb-segmented', '.wb-segmented-item', '.wb-home-composer__chips', '.quick-actions__item', '.wb-home-composer__input-slot', '.cr-input-container', '.composer__toolbar', '.composer__toolbar-left', '.composer__toolbar-right', '.wb-home-route__growth-buddy', '.source-home-robot img', '.wb-home-composer__below-input', ] const properties = ['font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing', 'color', 'background-color', 'border-radius', 'border-top-width', 'border-top-color', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left', 'gap', 'box-shadow', 'text-rendering', '-webkit-font-smoothing', 'transform', 'opacity'] app.whenReady().then(async () => { const win = new BrowserWindow({ width: 1336, height: 901, useContentSize: true, frame: false, show: false, webPreferences: { contextIsolation: true, nodeIntegration: false } }) const errors = [] win.webContents.on('console-message', (_event, level, message) => { if (level === 3) errors.push(message) }) const fixture = path.join(root, '.tmp', 'home-native-ui', 'index.html') await win.loadFile(fixture) await new Promise(resolve => setTimeout(resolve, 1350)) const nodes = await win.webContents.executeJavaScript(`(${function (selectors, properties) { return selectors.flatMap(selector => Array.from(document.querySelectorAll(selector), (el, index) => { const r = el.getBoundingClientRect(), style = getComputedStyle(el) return { selector, index, text: el.textContent, bounds: [r.x, r.y, r.width, r.height], styles: Object.fromEntries(properties.map(key => [key, style.getPropertyValue(key)])) } })) }.toString()})(${JSON.stringify(selectors)},${JSON.stringify(properties)})`) fs.writeFileSync(path.join(output, 'native-layout.json'), JSON.stringify({ capturedAt: new Date().toISOString(), fixture, viewport: { width: 1336, height: 901 }, nodes, errors, scope: 'Frozen YCode fixture bundle, not the production app and not the original WorkBuddy runtime', }, null, 2)) fs.writeFileSync(path.join(output, 'native.png'), (await win.webContents.capturePage()).toPNG()) win.destroy() console.log(JSON.stringify({ output, nodes: nodes.length, errors })) app.quit() }).catch(error => { console.error(error); app.exit(1) })