In this video· click a step to jump to it
Test recording
amail — app walkthrough
52,669 ms · 2,589 pixels changed
We built this regression test for amail.page.gd — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against amail.page.gd. 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":"/dashboard/","publicMaxNav":0,"fullPage":true,"steps":[{"goto":"/dashboard/","dismiss":true,"waitMs":1800,"label":"dashboard-overview"},{"goto":"/dashboard/api-keys.php","waitMs":1800,"label":"api-keys"},{"clickText":"Generate API Key","waitMs":2200,"label":"generate-api-key"},{"goto":"/dashboard/logs.php","waitMs":1500,"label":"email-logs"},{"goto":"/dashboard/analytics.php","waitMs":1500,"label":"analytics"},{"goto":"/dashboard/smtp.php","waitMs":1500,"label":"smtp-settings"},{"goto":"/dashboard/templates.php","waitMs":1500,"label":"templates"},{"goto":"/dashboard/billing.php","waitMs":1500,"label":"billing"},{"goto":"/dashboard/profile.php","waitMs":1500,"label":"profile"}]};
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-generatedaMail is a transactional Email API (send emails, OTPs and notifications via a simple API call, test in a sandbox SMTP then go live). After an email-verify, the dashboard is a tidy operator console: Overview (emails sent, success rate, API calls), API Keys, Email Logs, Analytics, SMTP Settings, Templates, Billing and Profile — a complete mental model for a developer evaluating a Resend/Postmark-style service.
- Complete email-API IA on day oneOverview / API Keys / Email Logs / Analytics / SMTP / Templates / Billing covers the whole lifecycle a developer expects from a transactional-email provider — it reads like a real product, not an MVP stub.
- Sandbox-to-live SMTP framingThe landing leads with "Test in sandbox with our SMTP, go live with your own" and a copy-paste curl example, which is exactly how a developer wants to evaluate an email API — try it without commitment.
- Clean, single-purpose dashboardThe authenticated console is uncluttered and metric-led (Emails Sent / Success Rate / API Calls), so an evaluator immediately knows where deliverability data will live.
- Hosted on free InfinityFree (page.gd)The app runs on a free InfinityFree subdomain; for a developer choosing where to route production email, a custom domain and a clearer hosting story would build more trust.
- Typo in the landing curl snippetThe hero's curl example posts to "amial.page.gd" (transposed) rather than amail.page.gd — a copy-paste developer would hit a dead host on their first try.
- Empty new-account stateA fresh account shows 0 emails / 0 API calls everywhere; a seeded sample send would let an evaluator feel the logs and analytics working before integrating.
Visual change
Share this run
Proof your app is not AI slop
This test was built for amail.page.gd — 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.


