Recording of the visual regression run on fromyourfridge.com · FromYourFridge - app walkthrough.

In this video· click a step to jump to it

F
Passed ✓

Test recording

FromYourFridge - app walkthrough

121,402 ms · 65,679 pixels changed

We built this regression test for fromyourfridge.com — it's yours to keep, free.

Take this test with you

This is a real Playwright test, recorded against fromyourfridge.com. Claim it into your own workspace and re-run it on every deploy — free.

export async function test(page, baseUrl, screenshotPath, stepLogger) {
  const SITE = baseUrl.replace(/\/+$/, '');
  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, 1200); await new Promise(r => setTimeout(r, 250)); await anim(max, 0, 600); })()";

  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' });
  for (const pattern of ['**/googletagmanager.com/**', '**/pagead2.googlesyndication.com/**', '**/googlesyndication.com/**', '**/doubleclick.net/**', '**/cdn.segment.com/**']) {
    await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
  }

  const settle = async function (ms) {
    await page.waitForLoadState('networkidle', { timeout: 2500 }).catch(function () {});
+115 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
54.43%
Text
—
DOM
✓
Network
+280 −280
Console
✓
A11y
A
Perf
252 over
URL
✓
Variables
—
Full report
Log in →
65,679
Diff px
2m 01s
Duration
A
Accessible
WCAG 2.2 · 94
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

We created an account, stocked the pantry with five items, and walked the whole signed-in kitchen: dashboard, pantry, grocery list, saved recipes, meal plans, profile, the recipe generator, the 7-day meal planner, the shelf-life assistant and ingredient trends. Signup is one screen and drops you straight into a dashboard that already knows what to ask for. Adding a pantry item is instant and the sidebar count updates live. The one thing we could not get to work was the button the whole product is named after.

Highlights
  • Signup to stocked pantry in under a minute
    Name, email, password, and we landed on 'Tonight's HQ' with three concrete next actions. No email verification, no tour, no plan picker. For a utility people reach for at 6pm, that is the right amount of friction.
  • The pantry model is the product
    Item, quantity, storage location (Fridge / Freezer / Pantry / Counter), bought date and expiry, plus a 'Use soon' shelf on the dashboard. Most recipe apps ask what you feel like eating; yours asks what is about to go off.
  • Empty states name the next action
    'Pantry is empty - add what's in the fridge so we can flag what to cook first' beats a blank pane, and the same pattern repeats on grocery list and meal plans.
  • Ingredient Trends is a genuine hook
    Aggregated, anonymised view of what other cooks have on hand. That is a content asset and a retention loop in one page, and it needs no account to be interesting.
Friction points
  • The Generate button on /generate does not fire
    With ingredient chips selected and the button enabled, clicking Generate produced no result and, more tellingly, no network request at all. We tried a normal click, a forced click, and a direct DOM .click() in the console; the page never issued a request to any generate endpoint and never changed state. Worth checking whether the form's submit handler is attached on the client build that is live right now, because this is the single action the landing page sells.
  • The Generate CTA sits below the fold at desktop height
    The button renders at roughly y=1145 on a 720px-tall viewport, so at a standard laptop window it is off-screen behind the full options panel. Even once the handler is fixed, a sticky or duplicated CTA would stop people scrolling to find it.

9 visual changes

Step 236 px changed
Before
Before
After
After
Diff
Diff
Step 310,176 px changed
Before
Before
After
After
Diff
Diff
Step 410,177 px changed
Before
Before
After
After
Diff
Diff
Step 544,860 px changed
Before
Before
After
After
Diff
Diff
Step 614 px changed
Before
Before
After
After
Diff
Diff
Step 714 px changed
Before
Before
After
After
Diff
Diff
Step 814 px changed
Before
Before
After
After
Diff
Diff
Step 914 px changed
Before
Before
After
After
Diff
Diff
Step 14374 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
regressions
0
Badges stay live, ratchet upward, only downgrade on confirmed regression.
57,300 test runs recorded · 1,174 products tested with Lastest

This test was built for fromyourfridge.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.