Recording of the visual regression run on frevoapp.com · frevoapp — freelance workspace walkthrough.

In this video· click a step to jump to it

F
Passed

Test recording

frevoapp — freelance workspace walkthrough

94,173 ms · 72,943 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against frevoapp.com. 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); })()";

  await page.route(/googletagmanager|google-analytics|posthog|hotjar|clarity\.ms|segment\.io/, function (r) { r.abort().catch(function () {}); });

  stepLogger.log('Scenario 1: frevoapp home');
  await page.goto(baseUrl + '/', { waitUntil: 'domcontentloaded' });
  await page.waitForTimeout(2500);
  await page.evaluate(SCROLL_THROUGH).catch(function () {});
  await page.waitForTimeout(400);
  await page.screenshot({ path: shot(1, 'home'), fullPage: true });
+84 more lines claim the test to get the full code.

Checks run

Run
Visual
7.99%
Text
DOM
Network
+78 −78
Console
A11y
B
Perf
143 over
URL
Variables
Full report
Log in →
72,943
Diff px
1m 34s
Duration
B
Accessible
WCAG 2.2 · 88
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

We signed into frevoapp with Google, finished the professional-profile onboarding, and drove twelve authenticated surfaces: dashboard, leads, clients, proposals, time tracking, tasks, reports, services, documents, team and settings. We also captured a real lead through your Add lead dialog so the pipeline numbers on the recording are live data, not a seeded demo. The sidebar holds its state cleanly across every route and the session survived the whole walk.

Highlights
  • One workspace, genuinely end to end
    Lead to client to proposal to time tracking to invoice all live under one sidebar. Most freelance tools in this space stop at invoicing; having bidding, AMC/recurring and a service catalogue in the same shell is a real differentiator.
  • Lead capture is one dialog, not a wizard
    Add lead takes name, company, email, phone, value, source, stage, follow-up date and notes in a single modal and writes straight into the pipeline totals. Open pipeline updated to $8,400 immediately.
  • Reports arrive with real structure
    Reports and Analytics opens on revenue, profitability, delivery, clients, rates and scope changes with a Last 6 months range and CSV export already wired, rather than an empty chart placeholder.
  • Onboarding collects the right things once
    The professional profile asks for category, subcategory, skills, rate band and location up front, which is what makes the rest of the workspace usable. It is long but it is asked once.
Friction points
  • Every in-app route shows Loading for 5 to 8 seconds
    Dashboard, leads, clients, proposals, tasks, services and settings each render the shell instantly then sit on a Loading placeholder for 5-8s before data arrives. Our first recorded run actually blew its time budget on this. Prefetching on sidebar hover, or skeleton rows instead of the word Loading, would make the app feel several times faster.
  • Email signup requires a phone number for WhatsApp OTP
    The /register form marks Phone Number (for WhatsApp OTP) as required, which is a hard stop for anyone without WhatsApp or unwilling to give a number to a tool they are still evaluating. Google signup skips it entirely, so the requirement is not load-bearing.

2 visual changes

Step 164,436 px changed
Before
Before
After
After
Diff
Diff
Step 28,507 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
tests
all passing
regressions
0
Badges stay live, ratchet upward, only downgrade on confirmed regression.
56,846 test runs recorded · 1,040 products tested with Lastest

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