Show HN: Deterministic UI testing that checks backend logs, not just the UI Verirun launched a deterministic UI testing CLI that records a browser workflow once and replays those exact steps headless, then surfaces the backend logs the replay produced from Vercel, Supabase, and Railway scoped to the run's time window. The self-hosted tool, priced at a 7-day free trial with no card and then $9/month for one machine, also offers `verirun map` to statically parse React/TypeScript source into an interaction graph without opening a browser, and `verirun agent --skill --install` to teach an AI coding agent such as Claude Code to verify its own changes. Every run returns a pass or fail plus a structured logs.json file, with no model judging whether the page looks correct. Record a flow once. Replay it on every change. See what the backend actually did. Verirun watches you click through a workflow in a real browser, saves every step, and replays those exact steps headless whenever you ask. Then it shows you the backend logs the replay produced. Not just that the screen looked right. verirun record checkout --url http://localhost:3000 perform the flow, then close the browser saved 9 steps - .verirun/workflows/checkout.json verirun run checkout ✓ replayed 9 steps supabase 4 entries vercel 2 entries - .verirun/runs/checkout-2026-09-03T18:04:11Z/logs.json jq '.entries 3 ' .verirun/runs/checkout- /logs.json { "source": "vercel", "level": "error", "message": "POST /api/checkout 200 -- orders.insert: duplicate key value" } 7 day trial, no card. Then $9/month for one machine. Runs from your terminal or from your AI coding agent. What it does - Deterministic replay - You define the test by performing it once. From then on one command replays those exact steps in the same order. The same recording gives the same run and the same answer — there is no model deciding your page looks off today. - Backend log capture - Pulls the logs your backend wrote during the replay — Vercel runtime logs, Supabase Postgres/edge/auth logs, Railway deployment logs — scoped to the exact time window the run covered, and lays them next to the steps that ran. - Reads your app statically - verirun map parses your React/TypeScript source into an interaction graph — every page, the elements on it, and the backend calls each one makes — without opening a browser. Useful on its own, and the fastest way for an agent to learn what your app can do. - Self-hosted - The browser, the recorded workflows, the logs it pulls, and the credentials it uses stay on the machine you run it on. There is no Verirun service in the path and nothing about your app is uploaded. - Works with agents - A run is one command with an exit code and a logs.json . An agent like Claude Code can verify its own change without spending tokens taking screenshots and clicking around a browser — verirun agent --skill --install teaches it the tool in one step. - Plain output - Every run is a pass or a fail, plus a structured file you can read, diff, or pipe somewhere else. Nothing to interpret and no flaky judgment calls to babysit. Record once, replay forever Open your app, sign up, click through onboarding, trigger the feature you care about. Verirun watches through a real browser and saves every step with a stable selector. From then on, one command replays those exact steps in the same order, every run. You defined the steps, Verirun runs the steps, and it tells you plainly whether they passed. verirun record onboarding --url http://localhost:3000 click through the flow, then close the browser verirun run onboarding Same recording, same run, same answer. Nothing is guessing what broken means. Full command reference and setup docs are in the README on npm https://www.npmjs.com/package/@verirun/cli . It reads your app before it ever opens a browser verirun map parses your React/TypeScript source and builds an interaction graph: every page, the interactive elements on it, where each one navigates, and the backend calls it makes. Nothing runs — no browser, no server, no recording. verirun map 6 pages · 6 backend effects · 31 edges 40 files / — 0 element s , 10 nav, 0 effect /login — 2 element s , 2 nav, 3 effect /account — 5 element s , 1 nav, 4 effect Ask what is reachable from one page and it names the element that gets you there, so you can see a flow before you record it: verirun map --bfs /account --depth 2 page:/account └─ nav "verirun" → page:/ └─ effect "Cancel subscription" → effect:POST /api/billing/cancel └─ nav "Log in" → page:/login Routes come from a react-router