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, where operators triage instead of chasing 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 and 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 and 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, with 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.