In this video· click a step to jump to it
Test recording
DrumToScore — app walkthrough
60,156 ms · 554 pixels changed
We built this regression test for drumtoscore.com — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against drumtoscore.com. 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 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' });
await page.route('**/cdn-cgi/scripts/**', function (r) { r.abort(); }).catch(function () {});
// ─── Scenario 1: public home (context) ────────────────────────────────────
stepLogger.log('Scenario 1: Public home');
await page.goto(baseUrl + '/', { waitUntil: 'domcontentloaded' });
await page.waitForLoadState('networkidle', { timeout: 4000 }).catch(function () {});
await page.waitForTimeout(2500);Checks run
Notes from the demo run
AI-generatedWe created a DrumToScore account with email + password, verified it from the inbox, and drove the signed-in product: the private project workspace and its search, the new-transcription upload flow, the notation editor on a real chart, the review queue, the timing view, export, practice mode and account settings. The editor is the part that earns the product - 112 BPM 4/4 notation rendered over a waveform with instrument lanes and 163 hits, a review panel that says "9 notes to review - jump through the least certain parts of this chart", and a practice mode with speed, loop, count-in and a song-vs-drums mixer. Surfacing the model's own uncertainty instead of pretending the transcription is perfect is the most trust-building thing in the whole flow.
- The review queue admits what it is unsure about"9 notes to review - jump through the least certain parts of this chart" with a Review next button. An AI transcription tool that ranks its own confidence and walks you through the weak spots is far more usable than one that hands over a flat chart. It also matches the product principle in your own sign-in copy.
- Practice mode is a real second productSpeed (1x), Loop, Click, Count-in (1 bar) and a two-fader mix between Song and Drums, with a measure strip 1-12 under the score. This is what a drummer actually wants after the chart exists, and it is one click from the editor.
- Privacy commitments are stated where they matterAccount settings spells out audio retention and that customer audio is never used for model training, next to "Your projects are private". Stating it on the settings page rather than only in the policy is the right place.
- The verification email links to a raw Neon Auth hostnameThe Verify Email button in your signup mail points at ep-winter-heart-a5ndzuz2.neonauth.us-east-2.aws.neon.tech/neondb/auth/verify-email?token=... - not a drumtoscore.com URL. A drummer who hovers that link sees an AWS database hostname and reasonably reads it as phishing, and some mail clients score it that way too. Proxying verification through drumtoscore.com/auth/verify (then redirecting) keeps the whole signup on your own domain.
- A brand-new workspace says "No matching projects"With zero projects and an empty search box, /projects renders "No matching projects - try a different search". It reads as though a filter is hiding something. A distinct first-run state ("No transcriptions yet - upload a song") pointing at /upload would convert better.
- Credit pack purchase·Demo runs never reach a paid checkout
- Delete account·Destructive - captured the section, never clicked
Visual change
Share this run
Proof your app is not AI slop
This test was built for drumtoscore.com — 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.


