Recording of the visual regression run on drumtoscore.com · DrumToScore — app walkthrough.

In this video· click a step to jump to it

D
Passed

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);
+68 more lines claim the test to get the full code.

Checks run

Run
Visual
0.06%
Text
DOM
Network
+0 −10
Console
A11y
A
Perf
460 over
URL
Variables
Full report
Log in →
554
Diff px
1m 00s
Duration
A
Accessible
WCAG 2.2 · 94
Review
Fast
Web Vitals

Notes from the demo run

AI-generated

We 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.

Highlights
  • 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 product
    Speed (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 matter
    Account 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.
Friction points
  • The verification email links to a raw Neon Auth hostname
    The 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.
Couldn't reach
  • Credit pack purchase·Demo runs never reach a paid checkout
  • Delete account·Destructive - captured the section, never clicked

Visual change

Step 1554 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
tests
all passing
regressions
0
Badges stay live, ratchet upward, only downgrade on confirmed regression.
56,846 test runs recorded · 1,040 products tested with Lastest

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.