In this video· click a step to jump to it
Test recording
senja — app walkthrough
58,265 ms · 3,907 pixels changed
We built this regression test for app.senja.io — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against app.senja.io. Claim it into your own workspace and re-run it on every deploy — free.
export async function test(page, baseUrl, screenshotPath, stepLogger) {
const CFG = {"appEntry":"/","publicMaxNav":0,"fullPage":true,"steps":[{"goto":"/","dismiss":true,"waitMs":2200,"label":"proof-wall-8-testimonials"},{"fill":[{"sel":"input[placeholder*=\"Search for your proof\" i]","value":"revenue","seq":true}],"waitMs":2500,"label":"search-proof"},{"goto":"/forms","waitMs":1800,"label":"collection-forms"},{"goto":"/import","waitMs":1600,"label":"import"},{"goto":"/studio","waitMs":2000,"label":"studio-shareables"},{"goto":"/studio/brand","waitMs":1800,"label":"brand-kit"},{"goto":"/feedback","waitMs":1600,"label":"feedback"},{"goto":"/tags","waitMs":1500,"label":"tags"},{"goto":"/analyze","waitMs":1800,"label":"analyze"},{"goto":"/integrations","waitMs":1600,"label":"integrations"}]};
const shot = function(i, s){ return screenshotPath.replace('.png', '-' + i + '-' + s + '.png'); };
page.setDefaultTimeout(6000);
// single combined noise-abort route (1 action instead of ~10)
await page.route(function(u){ return /sentry|segment\.com|googletagmanager|google-analytics|hotjar|posthog|connect\.facebook|cdn-cgi\/scripts/.test(u.toString()); }, function(r){ r.abort().catch(function(){}); }).catch(function(){});
let n = 1;
const FP = CFG.fullPage !== false;
const GOTO = 11000;
const wait = function(ms){ return page.waitForTimeout(ms||500); };
const dismiss = async function(){ const d = page.getByRole('button', { name: /skip|dismiss|maybe later|not now|got it|close|no thanks|continue|get started/i }).first(); if (await d.isVisible().catch(function(){return false;})) { await d.click({ timeout:2000 }).catch(function(){}); await wait(400); } };
const clickByText = function(src){ return page.evaluate(function(s){Checks run
Notes from the demo run
AI-generatedSenja helps you collect, manage and share customer testimonials — collection forms, a proof wall, a Studio that turns testimonials into social images and website widgets, plus feedback, tags, analytics and integrations. Onboarding is unusually good: it scraped our seed URL and pre-populated the account with 8 real testimonials, so the authenticated app opens on a populated Proof wall rather than a blank slate. The IA maps cleanly to collect → manage → turn-into-assets → embed.
- Onboarding seeds real contentInstead of an empty first run, Senja imported 8 testimonials from the URL we gave it during onboarding — the Proof wall, Studio and widgets all render with real data on first paint, which is the single best onboarding move in this batch.
- Natural-language proof searchThe proof wall's search bar accepts natural-language queries ("revenue") rather than exact-match filters — a small, on-brand touch that fits a product about surfacing the right social proof.
- Studio turns testimonials into assetsThe Studio auto-generated social images and website widgets from the imported testimonials — the "collect → publish everywhere" promise is legible in the product, not just the marketing.
- Email-verify gate before onboardingAccount activation requires clicking a Firebase verification link before the onboarding wizard is reachable — an inbox hop on the way to first value.
- Multi-step onboarding wizard is longThe wizard runs first-name → sell-what → project-URL → scrape-and-select → shareables → upgrade before landing in the app; each step is nice but the cumulative click-count delays the aha of the populated proof wall.
5 visual changes
Share this run
Proof your app is not AI slop
This test was built for app.senja.io — 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.














