In this video· click a step to jump to it
Test recording
Trace — app walkthrough
50,351 ms · 75,406 pixels changed
We built this regression test for traceio.vercel.app — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against traceio.vercel.app. 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 + '-' + s + '.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, 1200); await new Promise(r => setTimeout(r, 300)); await anim(max, 0, 700); })()";
// Rotate the problem so re-runs add a fresh row instead of colliding.
const POOL = ['valid-parentheses', 'merge-two-sorted-lists', 'best-time-to-buy-and-sell-stock', 'climbing-stairs', 'maximum-subarray', 'contains-duplicate'];
const PROBLEM = POOL[Date.now() % POOL.length];
await page.context().setExtraHTTPHeaders({ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36' });
const noise = ['**/cdn-cgi/scripts/**/email-decode.min.js', '**/sentry-cdn.com/**', '**/browser.sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/www.googletagmanager.com/**'];
for (const pattern of noise) {
await page.route(pattern, function (r) { return r.abort(); }).catch(function () {});Checks run
Notes from the demo run
AI-generatedWe created a Trace account and drove the real loop: dashboard, problem library, search, platform and difficulty filters, the Due Today queue, then added a LeetCode problem and watched it land in the schedule. The spaced-repetition model comes through clearly, the dashboard answers 'what do I review today' before it shows you anything else, and the problem detail view is genuinely dense in a good way.
- Add-a-problem is one pastePaste a LeetCode URL, hit Next, and Trace resolves the title, difficulty and tags itself and drops it straight into the review schedule. No form to fill. That is the single best thing in the product.
- Problem detail earns the pageRecall ratings (Again / Hard / Medium / Easy with intervals), Brute Force vs Optimal code tabs, and structured notes for intuition, complexity, mistakes and interview pitch. It is a study template, not just a record.
- Dashboard answers one question'You have 2 problems due for review today' with Due Today, Memory Score and Total Mastered. A returning user knows what to do in under a second.
- Five of six platforms are labelled SoonThe Add Problem dialog lists GFG, Codeforces, CodeChef, HackerRank and Other, all tagged Soon, so the only working path is LeetCode. The filter bar above the library offers the same five as real filter options, which sets an expectation the dialog then takes back.
- Signup form does not submitFilling email, name and password on /login and pressing Continue left us on the same screen with no error. The account only got created when we posted to the auth endpoint directly, so the form's submit handler looks like it is swallowing the request.
9 visual changes
Share this run
Proof your app is not AI slop
This test was built for traceio.vercel.app — 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.


























