In this video· click a step to jump to it
Test recording
Glintly - app walkthrough
85,462 ms · 21,937 pixels changed
We built this regression test for www.glintly.co — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against www.glintly.co. 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, 1300); await new Promise(r => setTimeout(r, 300)); await anim(max, 0, 650); })()";
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 ['**/cdn-cgi/scripts/**/email-decode.min.js', '**/sentry-cdn.com/**', '**/browser.sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/*.posthog.com/**', '**/googletagmanager.com/**']) {
await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
}
// ─── Scenario 1: public home (context) ────────────────────────────────────
stepLogger.log('Scenario 1: Glintly home');Checks run
Notes from the demo run
AI-generatedWe signed into Glintly with Google and drove the whole back-office. The onboarding is the best part: four taps (trade, speciality, solo-or-business, name) and you generated a complete storefront, copy and a four-service price list included, then offered to refine it in plain English with 'Make it warmer' and 'Lower the prices'. From there the sidebar is a real business system, not a demo shell: Storefront, Share, Services, Calendar, Bookings, Transactions, Payouts, Clients, Analytics, Activity all render their own working surface with correct empty states.
- Four taps to a finished storefrontPicking a trade and a name produced live copy, an about section and four priced services with sensible durations. Most booking tools hand you a blank form here; you hand over a draft worth editing.
- Refine the draft in plain English'Make it warmer', 'Lower the prices', 'Add a package' plus a free-text 'Describe a change' box sit right on the draft. That is the thing competitors make you do in a settings panel.
- Empty states that tell you what to do nextBookings says 'New bookings from your storefront appear here', Payouts shows a zeroed schedule rather than a blank panel, and the dashboard keeps a 3-step path visible. Nothing felt broken just because the account was new.
- The name field seeds itself from the Google profile's last nameSigning in with Google pre-filled the name step with 'Last' (our surname field), which then propagated into the slug and headline as 'Last Hair' and 'your-name-hair'. Seeding from the Google given name, or leaving it empty with a placeholder, would avoid a storefront named after half a surname.
- Create Service opens a type chooser with no way back to the list'Create Service' opens a 'What would you like to create?' dialog with Session and Session Package. Picking one swaps straight into the editor, so changing your mind means closing the dialog entirely and starting again. A Back control in the editor header would close the loop.
- Stripe payment setup·Connecting a real payout account is out of scope for a demo run.
4 visual changes
Share this run
Proof your app is not AI slop
This test was built for www.glintly.co — 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.











