In this video· click a step to jump to it
Test recording
FIDMAP — app walkthrough
28,158 ms · 2,541,037 pixels changed
We built this regression test for app.fidmap.co — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against app.fidmap.co. 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 LIB = "const sleep=ms=>new Promise(r=>setTimeout(r,ms));const poll=async(fn,ms)=>{const t0=Date.now();while(Date.now()-t0<(ms||15000)){const v=fn();if(v)return v;await sleep(250);}return null;};const byText=(sel,re)=>[...document.querySelectorAll(sel)].find(e=>re.test(e.textContent||''));const setVal=(el,v)=>{const d=Object.getOwnPropertyDescriptor(el.__proto__,'value');d.set.call(el,v);el.dispatchEvent(new Event('input',{bubbles:true}));};";
await page.goto('https://app.fidmap.co/dashboard', { waitUntil: 'domcontentloaded' });
await page.evaluate("(async()=>{" + LIB + "await poll(()=>byText('button',/Sign out/i),25000);await sleep(1200);})()");
await page.getByRole('button', { name: /sign out/i }).waitFor({ state: 'visible', timeout: 20000 });
await page.screenshot({ path: shot(1, 'workspace-dashboard'), fullPage: true });
await page.evaluate("(async()=>{" + LIB + "document.querySelector('a[href=\"/boards\"]').click();await poll(()=>byText('div,p,span',/Tell us what to build next/i),15000);await sleep(900);})()");
await page.screenshot({ path: shot(2, 'boards-list'), fullPage: true });
Checks run
Notes from the demo run
AI-generatedWe ran FIDMAP the way one of your customers would: created a workspace, opened a board, searched it, opened a request, voted, commented, moved it to Planned, filed a new one and watched it land on the roadmap. Registration to a working workspace took two screens and no verification email, which is the single best decision in the product. The one thing we could not do is the thing a feedback tool exists for: send someone a link to one request.
- Two screens from nothing to a workspaceName, email, password, then workspace name. No verify-email gate, no plan picker. We were triaging feedback inside a minute.
- Triage happens without leaving the boardVote, comment and the status dropdown all live in the request panel, so moving three requests never costs a page load.
- The roadmap is fed, not maintainedA request moved to Planned shows up in the roadmap column, so the public roadmap is a by-product of triage rather than a second thing to keep updated.
- A request has no URL of its ownOpening a request opens a modal and the address bar never changes, so there is no link to send a customer, paste in Slack, or reopen later. A /board/:id/request/:id route would make every request shareable, which is most of why a feedback board exists.
- The workspace owner is asked who to creditFiling a request as the signed-in admin still shows One quick thing, name and email, before the idea form. Prefilling it from the session would remove a step for the person using the board most.
3 visual changes
Share this run
Proof your app is not AI slop
This test was built for app.fidmap.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.








