In this video· click a step to jump to it
Test recording
StockMarketScan — app walkthrough
56,541 ms · 6,005 pixels changed
We built this regression test for stockmarketscan.com — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against stockmarketscan.com. Claim it into your own workspace and re-run it on every deploy — free.
export async function test(page, baseUrl, screenshotPath, stepLogger) {
const O = 'https://stockmarketscan.com';
let idx = 1;
function shot(s) { return screenshotPath.replace('.png', '-' + idx + '-' + String(s).replace(/[^a-z0-9]+/gi, '-').toLowerCase().slice(0, 24) + '.png'); }
async function cap(s) { stepLogger.log('Scenario ' + idx + ': ' + s); await page.screenshot({ path: shot(s), fullPage: true }); idx++; }
async function settle(ms) { await page.waitForLoadState('networkidle', { timeout: 7000 }).catch(function(){}); await page.waitForTimeout(ms || 1500); }
async function dismiss() { await page.getByRole('button', { name: /^decline$|^accept$/i }).first().click({ timeout: 1500 }).catch(function(){}); }
async function clickRow(n, label) { const row = page.locator('tbody tr').nth(n); if (await row.isVisible().catch(function(){return false;})) { await row.click({ timeout: 3000 }).catch(function(){}); await page.waitForTimeout(2000); await cap(label); } }
// 1. public home
await page.goto(O + '/', { waitUntil: 'domcontentloaded' }).catch(function(){}); await settle(1500); await dismiss(); await cap('home');
// 2. screeners grid (authed)
await page.goto(O + '/stock-screeners', { waitUntil: 'domcontentloaded' }).catch(function(){}); await settle(1800); await dismiss(); await cap('screeners-grid');Checks run
Notes from the demo run
AI-generatedStockMarketScan is a clean, dark-themed stock screening platform that surfaces curated named setups (Momentum, Technical, Fundamental, Dividend) rather than raw data tables. The free tier provides 3 screeners plus a Watchlist and email alert. Post-login navigation is smooth: the Screeners page serves as the central hub, each screener loads a pre-filtered results grid, and the Alerts page provides a simple subscription UI. The dashboard doubles as the pricing/upgrade page.
- Curated screener grid24 named setups organised by category (Technical, Fundamental, Momentum, Dividend) with filter buttons that instantly re-sort the grid - very low friction for discovery.
- Individual screener resultsEach screener (Strong Volume Gains, Top Tech Stocks, Income & Growth) renders a live table of matching tickers with price, volume, and % change columns.
- Category filtersOne-click filter buttons (Technical 10, Fundamental 4, Momentum 6, Dividend 2) with live counts let users drill into their preferred style without a page reload.
- Stock Alerts pageDedicated /screener-alerts route lets free users set up 1 email alert per screener trigger - clear upgrade prompts for more.
- Watchlist integrationMy Watchlist panel slides in as an overlay from the nav bar, showing saved symbols and letting users track up to 10 tickers on the free plan.
- Pricing transparencyDashboard/pricing page shows $0 / $14.99 / $29.99 tiers side-by-side with clear feature differentiation - no hidden fees messaging.
- API & MCP access/docs page shows a clean REST API reference (GET /api/v1/screeners, GET /api/v1/patterns/:symbol) available from Basic plan, plus an MCP server for Claude/Cursor integration - strong developer appeal.
- ·
- ·
- ·
- ·
4 visual changes
Share this run
Proof your app is not AI slop
This test was built for stockmarketscan.com — 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.











