Bootstrap any exchange in minutes
The runner ships a one-shot page cataloger (ui_inspect_page) that walks your panel, extracts interactive elements, and seeds page_selectors automatically. Plug in a tenant, click Bootstrap, write scenarios.
One control plane for every tenant. Schedule and run end-to-end checks against your exchange — login, balance, orders, withdrawals — and catch regressions before your users do.
Trusted by exchange operators in production
Five primitives. One platform. Built specifically for the multi-tenant reality of running white-label crypto exchange software.
Compose end-to-end checks from a versioned action catalog: api_login, ui_navigate, api_place_order, assert_equals. Monaco-powered editor, schema validation, AI scaffolding from your page catalog. No bespoke test runner per tenant.
name: spot-trade-happy-path
prod_safe: false
steps:
- action: api_login
inputs:
email: ${test_user.email}
password: ${test_user.password}
expect_envelope_success: true
unwrap_data: true
save_as: auth
- action: api_place_order
inputs:
token: ${auth.token}
side: buy
type: limit
pair: BTC-USDT
amount: 0.001
price: 30000
save_as: order
- assert: equals
inputs:
actual: ${order.status}
expected: filled Define each tenant once — base URLs, credentials, env, kyc state — and run the same scenario across them all. Per-tenant overrides, per-env secrets, isolated captures. Onboard a new exchange in minutes with the bootstrap workflow.
binance-fork-tr
TR · qa
exchange.eu
EU · prod
vault.fi
FI · qa
broker.tr
TR · prod
Streamed via Supabase Realtime — steps, screenshots, network captures, HAR. No log diving, no SSH into runners. Keyboard-first console with command palette, status drawers, and capture previews inline.
Schedule any scenario or suite against any tenant. cron-parser-backed expressions with retries, backoff, and concurrency limits. Failures surface in the Failed Tests dashboard — operators triage, not chase logs.
smoke-check.tr
next: in 2m */5 * * * * → all TR tenants spot-trade-nightly
next: tonight 02:00 0 2 * * * → all qa tenants kyc-flow.eu
next: in 18m */30 * * * * → exchange.eu A dashboard for what broke. Failures grouped by scenario, tenant, and assertion. Screenshots, request bodies, and HAR captured automatically on failure — pulled on demand, expired on a clock. Twilio SMS inbox integration for OTP-gated flows.
assert_equals: order.status expected 'filled', got 'rejected'
api_initiate_withdraw: HTTP 503 (3 retries)
ui_wait_for: timeout 30000ms
Each primitive solves a problem we hit ourselves running QA on white-label exchange forks. Nothing is generic. Everything is operator-tested.
The runner ships a one-shot page cataloger (ui_inspect_page) that walks your panel, extracts interactive elements, and seeds page_selectors automatically. Plug in a tenant, click Bootstrap, write scenarios.
From a page catalog + a one-line intent, generate a draft YAML scenario. You stay in control — the AI pipes through Monaco for review, schema validation, and edit before save.
Bridge auth between API and UI with ui_set_auth. Skip the brittle login UI, run business logic against api_*, then jump into ui_* for the things only the browser can verify.
Screenshots, HAR, and network bodies land in private buckets — pulled on failure, expired on a schedule. Three buckets, three TTLs. Storage doesn't grow forever.
auth_wait_sms polls a Twilio inbox webhook for the OTP code your exchange just texted. Authenticator App? auth_solve_totp handles that too. 2FA-protected scenarios run unattended.
Steps, captures, and assertions stream over Supabase Realtime. Live console renders them as they happen — no polling, no refresh dance, no log tailing.
The runner ships a versioned catalog of test primitives — not a general-purpose Playwright wrapper. Each action is purpose-built for exchange flows: login, balance, orders, withdrawals, KYC, 2FA. Versioned. Documented. Schema-validated in the editor.
HTTP against your exchange backend
Browser interactions via Playwright
Verify your data is correct
TOTP + SMS 2FA helpers
Tenant-scoped RLS at the database. Three private capture buckets with enforced TTLs. Admin / QA / Viewer role separation. Audit log for every trigger. Production-mode scenarios refuse destructive actions unless explicitly whitelisted.
Tenant isolation
RLS-backed, per-org buckets
To first run
Bootstrap → scenario → trigger
Lines of bespoke code
Per new white-label
Book a 20-minute demo. We'll bootstrap one of your tenants live and show you the first scheduled smoke check running against it.