{"slug": "show-hn-deterministic-ui-testing-that-checks-backend-logs-not-just-the-ui", "title": "Show HN: Deterministic UI testing that checks backend logs, not just the UI", "summary": "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.", "body_md": "# Record a flow once.\n\nReplay it on every change.\n\nSee what the backend actually did.\n\nVerirun 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.\n\n```\nverirun record checkout --url http://localhost:3000\n  perform the flow, then close the browser\n  saved 9 steps  ->  .verirun/workflows/checkout.json\n\nverirun run checkout\n  ✓ replayed 9 steps\n  supabase  4 entries     vercel  2 entries\n  ->  .verirun/runs/checkout-2026-09-03T18:04:11Z/logs.json\n\njq '.entries[3]' .verirun/runs/checkout-*/logs.json\n  {\n    \"source\": \"vercel\",\n    \"level\": \"error\",\n    \"message\": \"POST /api/checkout 200 -- orders.insert:\n                duplicate key value\"\n  }\n```\n\n7 day trial, no card. Then $9/month for one machine. Runs from your terminal or from your AI coding agent.\n\n## What it does\n\n- Deterministic replay\n- 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.\n- Backend log capture\n- 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.\n- Reads your app statically\n- `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.\n- Self-hosted\n- 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.\n- Works with agents\n- 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.\n- Plain output\n- 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.\n\n## Record once, replay forever\n\nOpen 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.\n\nFrom 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.\n\n```\nverirun record onboarding --url http://localhost:3000\n# click through the flow, then close the browser\n\nverirun run onboarding\n```\n\nSame recording, same run, same answer. Nothing is guessing what **broken** means.\n\nFull command reference and setup docs are in the [README on npm](https://www.npmjs.com/package/@verirun/cli).\n\n## It reads your app before it ever opens a browser\n\n`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.\n\n```\nverirun map\n\n6 pages · 6 backend effects · 31 edges (40 files)\n\n  /          — 0 element(s), 10 nav, 0 effect\n  /login     — 2 element(s),  2 nav, 3 effect\n  /account   — 5 element(s),  1 nav, 4 effect\n```\n\nAsk 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:\n\n```\nverirun map --bfs /account --depth 2\n\npage:/account\n  └─ nav \"verirun\" → page:/\n  └─ effect \"Cancel subscription\" → effect:POST /api/billing/cancel\n    └─ nav \"Log in\" → page:/login\n```\n\nRoutes come from a react-router `<Routes>` declaration or a Next.js `app/**/page.tsx` tree, and components a page renders from another file are followed — so a page whose real UI lives in a client component is not reported empty.\n\nIt is static analysis, so it is honest about its limits: a target computed at runtime shows as **unresolved**, and `verirun map --reach` tells you how much of each page it actually captured.\n\n## It checks the backend, not just the browser\n\nBrowser-only testing watches the UI. The button clicked, a success toast showed up, the test goes green. Meanwhile the write to the database silently failed, or a background job threw a minute later, after the screen already said done.\n\nVerirun captures the logs your backend produced during the replay, scoped to the exact time window the run covered, and lays them next to the steps that ran. You see what your server actually did.\n\n- A form that submits cleanly but never persists a row.\n- A 200 response that was really a swallowed exception.\n- A job that fails downstream of a screen that already claimed success.\n- An auth flow that redirects like it worked but sets no session.\n\nLog sources today: Vercel runtime logs, Supabase Postgres/edge/auth logs, and Railway deployment logs. Every run writes a structured `logs.json` you can read, diff, or hand to something else.\n\n## It runs on your machine and stays there\n\nThe browser, the recorded workflows, the logs it pulls, the credentials it uses — all of it stays local. There is no Verirun cloud sitting between you and your app.\n\nPoint it at localhost, a staging box, or production. Your logs, your data, and your secrets do not leave the machine you ran it on.\n\n## Built for your AI coding agent too\n\nIf you run Claude Code or a similar agent, you know the loop. It makes a change, then spends tokens taking screenshots, clicking around, and talking itself into believing the change works.\n\nGive it Verirun instead. The agent runs one command, gets back a clean pass or fail with the backend logs attached, and moves on.\n\n``` php\n# your agent, after making a change\nverirun run checkout\n# -> exit 0 or 1, plus .verirun/runs/checkout-<timestamp>/logs.json\n```\n\nOne command teaches it the tool. `verirun agent --skill --install` writes a Claude Code skill into your repo, and Claude picks Verirun up on its own from then on — no prompt engineering, nothing to paste into a config file.\n\n``` php\nverirun agent --skill --install\n# -> .claude/skills/verirun/SKILL.md\n```\n\nAn agent can also write its own tests. `verirun map --json` gives it a selector for every element, so it can author a workflow file directly and check it with `verirun workflow check` before spending a browser run on it. Recordings stay the ground truth; generated ones are a starting point that `run` either confirms or does not.\n\n## Pricing\n\nOne tool, per machine. Start with a 7 day free trial, no card. Yearly is two months cheaper than monthly. Switch plans any time from your account.\n\n| Plan | Machine seats | Monthly | Yearly |  | \n|---|---|---|---|---|\n| Solo | 1 | $9 | $89 | [Start trial](https://get-verirun.duely.in/signup) | \n| Crew | 5 | $39 | $389 | [Start trial](https://get-verirun.duely.in/signup) | \n| Fleet | 25 | $149 | $1,489 | [Start trial](https://get-verirun.duely.in/signup) | \n\nEvery plan: unlimited workflows and replays, all three log sources, runs on your own machine, and per-seat release from your account. Crew and Fleet share one license key across the team and add priority support.\n\nNo usage metering, no per-run charges, no sales call. After the trial you pick a plan to keep running workflows.\n\n## Installing it\n\n### Install the CLI\n\n```\nnpm install -g @verirun/cli\n```\n\nThis also downloads the Chromium build Playwright drives. Set `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1` first to skip that if you already have Playwright browsers.\n\n### Connect the machine\n\n```\nverirun login\n```\n\nPrints a short code, opens this site, and you approve it. A 7 day trial starts automatically and needs no card.\n\n### See what Verirun makes of your app\n\n```\ncd your-project\nverirun map\n```\n\nStatic, instant, and needs no recording — the quickest way to check it understands your routes and components.\n\n### Record a workflow from inside your project\n\n```\ncd your-project\nverirun record signup --url http://localhost:3000\n# perform the signup flow, then close the browser\n```\n\n### Replay it whenever you want\n\n```\nverirun run signup\n```\n\nRecorded workflows and run logs live in `.verirun/` at your project root. Verirun adds that folder to your `.gitignore` the first time it runs, since run logs can contain real request data.\n\n### Connect your logs (optional)\n\n```\nverirun log supabase\nverirun log vercel\nverirun log railway\n```\n\nEach is the same one-time flow: paste an API token, pick the project, done. Without a log source, `run` still replays — it just has no backend logs to show.\n\n### Point your coding agent at it (optional)\n\n```\nverirun agent --skill --install\n```\n\nWrites a Claude Code skill into the repo. Any other agent can read `verirun agent` instead.\n\n## Try it on your own app\n\nSign up with an email, install the CLI, record one real flow, and run it. If it does not catch something browser-only testing would have missed, do not pay for it.", "url": "https://wpnews.pro/news/show-hn-deterministic-ui-testing-that-checks-backend-logs-not-just-the-ui", "canonical_source": "https://get-verirun.duely.in", "published_at": "2026-09-21 08:12:19+00:00", "updated_at": "2026-09-21 08:23:24.354248+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-tools"], "entities": ["Verirun", "Vercel", "Supabase", "Railway", "Claude Code", "React", "TypeScript", "npm"], "alternates": {"html": "https://wpnews.pro/news/show-hn-deterministic-ui-testing-that-checks-backend-logs-not-just-the-ui", "markdown": "https://wpnews.pro/news/show-hn-deterministic-ui-testing-that-checks-backend-logs-not-just-the-ui.md", "text": "https://wpnews.pro/news/show-hn-deterministic-ui-testing-that-checks-backend-logs-not-just-the-ui.txt", "jsonld": "https://wpnews.pro/news/show-hn-deterministic-ui-testing-that-checks-backend-logs-not-just-the-ui.jsonld"}}