agentskills.codes

Build, launch, and drive HomeGlow locally to verify client/server changes end-to-end.

Install

mkdir -p .claude/skills/verify-jherforth && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16685" && unzip -o skill.zip -d .claude/skills/verify-jherforth && rm skill.zip

Installs to .claude/skills/verify-jherforth

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Build, launch, and drive HomeGlow locally to verify client/server changes end-to-end.
85 charsno explicit “when” trigger

About this skill

Verifying HomeGlow changes

Launch (demo mode gives instant sample data)

# API server — demo mode auto-seeds chores + calendar for each new device
cd server && PORT=5001 DEMO_MODE=true node index.js &

# Client dev server (client/ expects the API at localhost:5001 in dev mode)
cd client && npx vite --port 3012 --strictPort &

Gotchas:

  • Ports 3001/3005 are often already taken by the user's own dev servers on this machine — pick an unused port, never kill existing node processes.
  • Each browser profile is a fresh "device" (homeglow_device_name in localStorage). Demo seeding only happens for first-run devices: if you intercept GET /api/devices/*/settings and inject widgetSettings into an empty response, the app thinks it's configured and never seeds.

Drive (Playwright + system Edge, no browser download)

npm i playwright-core in the scratchpad, then chromium.launch({ channel: 'msedge', headless: true }).

Useful handles:

  • Widgets: .widget-wrapper; refresh ring: button[aria-label="Refresh widget now"].
  • Shrink widget refresh intervals by rewriting GET /api/devices/*/settings responses (only when widgetSettings already exists — see gotcha above).
  • Simulate tab hide/show: Object.defineProperty(document,'visibilityState',...) plus dispatching visibilitychange.
  • Screensaver: seed localStorage screensaverSettings ({enabled,mode:'photos'|'tabs',timeout(minutes, fractions ok),slideshowInterval}) before load; exit by clicking the overlay.
  • Track data churn with page.on('request') filtered to localhost:5001.

Worth driving

  • Widget auto-refresh cadence and the countdown ring (in-place, no remount: tag DOM nodes with a marker property and confirm they survive a refresh).
  • Hidden page / photos-mode screensaver must stop all widget fetches; on resume an overdue widget fetches exactly once (catch-up).
  • Client unit tests: cd client && npm test (vitest). Server: cd server && npm test.

Search skills

Search the agent skills registry