cd /news/developer-tools/show-hn-deterministic-ui-testing-tha… Β· home β€Ί topics β€Ί developer-tools β€Ί article
[ARTICLE Β· art-135687] src=get-verirun.duely.in β†— pub= topic=developer-tools verified=true sentiment=↑ positive

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.

read8 min views1 publishedSep 21, 2026
Show HN: Deterministic UI testing that checks backend logs, not just the UI
Image: source

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

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.

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 <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.

It 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.

It checks the backend, not just the browser #

Browser-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.

Verirun 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.

  • A form that submits cleanly but never persists a row.
  • A 200 response that was really a swallowed exception.
  • A job that fails downstream of a screen that already claimed success.
  • An auth flow that redirects like it worked but sets no session.

Log 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.

It runs on your machine and stays there #

The 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.

Point it at localhost, a staging box, or production. Your logs, your data, and your secrets do not leave the machine you ran it on.

Built for your AI coding agent too #

If 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.

Give it Verirun instead. The agent runs one command, gets back a clean pass or fail with the backend logs attached, and moves on.

verirun run checkout

One 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.

verirun agent --skill --install

An 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.

Pricing #

One 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.

Plan Machine seats Monthly Yearly
Solo 1 $9 $89 Start trial
Crew 5 $39 $389 Start trial
Fleet 25 $149 $1,489 Start trial

Every 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.

No usage metering, no per-run charges, no sales call. After the trial you pick a plan to keep running workflows.

Installing it #

Install the CLI

npm install -g @verirun/cli

This also downloads the Chromium build Playwright drives. Set PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 first to skip that if you already have Playwright browsers.

Connect the machine

verirun login

Prints a short code, opens this site, and you approve it. A 7 day trial starts automatically and needs no card.

See what Verirun makes of your app

cd your-project
verirun map

Static, instant, and needs no recording β€” the quickest way to check it understands your routes and components.

Record a workflow from inside your project

cd your-project
verirun record signup --url http://localhost:3000

Replay it whenever you want

verirun run signup

Recorded 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.

Connect your logs (optional)

verirun log supabase
verirun log vercel
verirun log railway

Each 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.

Point your coding agent at it (optional)

verirun agent --skill --install

Writes a Claude Code skill into the repo. Any other agent can read verirun agent instead.

Try it on your own app #

Sign 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.

── more in #developer-tools 4 stories Β· sorted by recency
── more on @verirun 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/show-hn-deterministi…] indexed:0 read:8min 2026-09-21 Β· β€”