In this video· click a step to jump to it
Test recording
Spanora — app walkthrough
67,557 ms · 1,734 pixels changed
We built this regression test for spanora.ai — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against spanora.ai. Claim it into your own workspace and re-run it on every deploy — free.
export async function test(page, baseUrl, screenshotPath, stepLogger) {
const shot=(n,s)=>screenshotPath.replace('.png','-'+n+'-'+(String(s).replace(/[^a-z0-9]+/gi,'-').replace(/^-|-$/g,'').toLowerCase().slice(0,22)||'view')+'.png');
const ORIGIN=new URL("https://spanora.ai/dashboard").origin; const MINPOST=9;
await page.context().setExtraHTTPHeaders({ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" }).catch(function(){});
let idx=1, post=0;
const cap=async(s,full)=>{ stepLogger.log('Scenario '+idx+': '+s); await page.screenshot({ path: shot(idx,s), fullPage: full!==false }); idx++; };
const accept=async()=>{ await page.getByRole('button',{name:/accept all|got it|^accept$|dismiss|^close$|skip|maybe later|not now|^ok$|let me start|show me|continue/i}).first().click({timeout:1500}).catch(function(){}); await page.keyboard.press('Escape').catch(function(){}); };
const is404=async()=>{ const b=await page.locator('body').innerText().catch(function(){return '';}); return /\b404\b|page not found|page you.{0,6}looking for|doesn.t exist|couldn.t find|lost in the/i.test(b); };
// 1. Public home
await page.goto("https://spanora.ai",{waitUntil:'domcontentloaded'}).catch(function(){}); await page.waitForLoadState('networkidle',{timeout:6000}).catch(function(){}); await page.waitForTimeout(1500); await accept(); await cap('home');
// 2. Post-login dashboard (authed via replayed storage_state)
await page.goto(APPENTRY="https://spanora.ai/dashboard",{waitUntil:'domcontentloaded'}).catch(function(){}); await page.waitForLoadState('networkidle',{timeout:8000}).catch(function(){}); await page.waitForTimeout(2600); await accept(); await page.waitForTimeout(600); await cap('dashboard'); post++;Checks run
Notes from the demo run
AI-generatedSpanora is LLM/agent observability — 'see what your AI agents do, why, and what it costs.' After a passwordless sign-in it opens on a polished dark dashboard: Total Traces, Total Cost, Avg Duration, Success Rate, Input/Output Tokens, a Cost-Over-Time chart, an Outcomes (success/partial/failure) breakdown, an Agent Leaderboard by cost, Token Efficiency and Tool Reliability. Left rail: Dashboard, Traces, API Keys, Settings, Docs, on a Free plan with 1,000 spans. The IA maps cleanly to instrument → trace → watch-cost.
- Complete observability IA out of the boxTraces, cost-over-time, outcome breakdown, agent leaderboard, token efficiency and tool reliability cover the whole 'is my agent working and what's it costing me' question — it reads like a serious platform, not an MVP.
- Time-range control + 1,000 free spansA 1h/24h/7d/30d toggle and a clear 0/1,000 free-span meter mean an evaluator knows exactly what they can try before paying.
- Cost is a first-class metric, not an afterthoughtTotal Cost sits next to Total Traces in the headline row — the product leads with the thing AI teams actually worry about.
- Every panel is empty until the first traceDashboard, leaderboard and charts all show 'No data for this period' on a fresh account; a sample trace would showcase the product far better on first run.
- 'Complete your setup' competes with the dashboardA 'Send your first trace…/Resume setup' banner sits above the metrics — useful, but it pulls focus from the (empty) dashboard it's overlaying.
4 visual changes
Share this run
Proof your app is not AI slop
This test was built for spanora.ai — claim it free
One click copies the test and baseline screenshots into your own Lastest workspace. Re-run on every deploy and catch regressions before your users do — free, no card required.











