In this video· click a step to jump to it
Test recording
Masterys — Pokemon collection app walkthrough
65,663 ms · 15 pixels changed
We built this regression test for www.masterys.org — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against www.masterys.org. 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, slug) => screenshotPath.replace('.png', `-${n}-${slug}.png`);
const SCROLL_THROUGH = "(async () => { const ease = t => 1 - Math.pow(1 - t, 3); const max = Math.max(0, document.body.scrollHeight - window.innerHeight); if (max < 40) return; const anim = (a, b, ms) => new Promise(res => { const t0 = performance.now(); const step = now => { const p = Math.min(1, (now - t0) / ms); window.scrollTo(0, a + (b - a) * ease(p)); p < 1 ? requestAnimationFrame(step) : res(); }; requestAnimationFrame(step); }); await anim(0, max, 1100); await new Promise(r => setTimeout(r, 250)); await anim(max, 0, 650); })()";
const TAB = "(t => { const b = [...document.querySelectorAll('button[aria-label]')].find(x => x.getAttribute('aria-label') === t); if (b) b.click(); return !!b; })";
await page.route(/googletagmanager|google-analytics|posthog|hotjar|clarity\.ms|segment\.io/, function (r) { r.abort().catch(function () {}); });
stepLogger.log('Scenario 1: Masterys marketing home');
await page.goto(baseUrl + '/', { waitUntil: 'domcontentloaded' });
await page.waitForTimeout(3000);
await page.evaluate(SCROLL_THROUGH).catch(function () {});
await page.waitForTimeout(500);Checks run
Notes from the demo run
AI-generatedWe signed into Masterys with Google through your Auth0 tenant and drove eleven authenticated surfaces: the app home, all of Collection (cards, sets, binders, portfolio), the card catalogue, two live searches, Masterys AI and the profile. The catalogue is the standout, 20,474 English printings across 174 sets with market prices attached to every result, and it answers in well under a second.
- Catalogue depth with prices attachedSearching Charizard returned 108 matches with card art, set name, collector number and a market price on every tile, from $3.15 for the Pokemon GO printing to $501.38 for Base #4. That price-on-the-tile decision is what makes the search actually useful rather than just a lookup.
- Collection is segmented the way collectors thinkCards, Sets, Mastery, Binders, Trade, Wishlist and Portfolio as separate views, rather than one flat list with filters. Mastery and Portfolio in particular are the reason someone picks this over a spreadsheet.
- Legal consent handled once, plainlyThe Terms and Privacy acceptance gate is versioned (2026-09-09 and 2026-09-14) and states it will only reappear on a material change. That is a more honest pattern than a silent re-accept.
- Empty states teach the next actionThe homepage walks Find the card, Check the card and finish, Add it and track its value as three numbered steps rather than dropping a new account into a blank grid.
- The first-binder modal blocks the whole Collection tabOpening Collection on a fresh account throws a Name your first binder modal with no dismiss, no escape and copy that says this step isn't optional. Our first recorded run captured that modal on four consecutive screenshots because there is no way past it. Letting people browse an empty collection, and offering the binder prompt when they add their first card, would remove a wall at the exact moment someone is deciding whether to stay.
- Search result tiles did not open a card detailClicking a result tile in the Charizard list did not navigate to a card page in our run, even though the page copy says Open a card to inspect its details and decide what to do next. Worth a check, since inspect-then-add is the core loop.
Visual change
Share this run
Proof your app is not AI slop
This test was built for www.masterys.org — 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.


