In this video· click a step to jump to it
Test recording
Pinmark — app walkthrough
58,718 ms · 165 pixels changed
We built this regression test for www.pinmark.dev — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against www.pinmark.dev. 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 PROJECT = 'a6c4c413-f799-4313-ab48-27dfe9946a94';
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, 1400); await new Promise(r => setTimeout(r, 350)); await anim(max, 0, 800); })()";
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/**']) {
await page.route(pattern, r => r.abort()).catch(function(){});
}
const settle = async () => { await page.waitForLoadState('networkidle').catch(function(){}); await page.locator('h1, h2, main, [role="main"]').first().waitFor({ state: 'visible', timeout: 6000 }).catch(function(){}); await page.waitForTimeout(500); };
Checks run
Notes from the demo run
AI-generatedWe signed in with a magic link and drove Pinmark end-to-end. The product's promise, pin feedback to the exact UI with one script tag, comes through cleanly: your project page is the whole control surface, install snippet up top, then Threads (Open/Resolved with .md/.docx export), a two-mode access control (Open vs review-link-only), page-path scoping rules, allowed-domains, and a clearly-fenced danger zone. It reads like a tool built by someone who's felt the pain of screenshot-and-Slack feedback loops.
- One-tag install, no accounts for reviewersThe whole value prop, 'add one script, reviewers comment on the exact UI, no accounts or screenshots', is front and center on both the marketing home and the project page. The pk_live snippet with a one-click kill-switch (Regenerate key) is a genuinely thoughtful safety touch.
- Access + scope controls are unusually complete for a solo launchOpen vs review-link-only visibility, All-pages / only-these / except-these path rules, and wildcard allowed-domains give reviewers exactly as much or as little surface as you want, without a settings maze.
- Zero-state has no sample threadA brand-new project shows 'No open threads' with nothing to click. Seeding one example pin/thread (or a 'try it on this page' nudge) would show first-time users what a comment actually looks like before they install the snippet.
- Marketing home vs www redirectpinmark.dev resolves and then serves on www.pinmark.dev; a canonical redirect keeps share/social cards and the snippet origin consistent for people who type the bare domain.
Visual change
Share this run
Proof your app is not AI slop
This test was built for www.pinmark.dev — 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.


