Trevor PaughSystems engineer
Trevor PaughProject Chronicles

Chronicles / Bopsmith

A stranger walks through

Milestone

A tester who had never seen the product walked the whole of it, anonymously on the live site and with test accounts locally. The worst finding: every store page on bopsmith.com had shipped without its stylesheet since launch, and nobody had opened the live store on a phone. A hotfix went out the same day. The owner took three decisions from the rest of the list, and for the first time the manager merged the pull requests rather than the owner.

The live store on a phone before the hotfix: bare links and default type, scrolling sideways, because its stylesheet never loaded.
The live store on a phone before the hotfix: bare links and default type, scrolling sideways, because its stylesheet never loaded.

Every slice so far had been reviewed by someone who knew what it was supposed to do. This one was reviewed by someone briefed to know nothing: read the site as a stranger, try to make, list, buy, and remix, and write down everything that got in the way. The live site was used only anonymously; accounts, listings, and purchases happened on a local copy with payments faked.

The verdict

Locally, every version-one item worked end to end, and all the must-nevers held: no card fields on our pages, no downloads without a purchase, no “copyright-free” wording, the age box enforced at sign-up and checkout, an unsaved edit surviving sign-up. On the live site, the store was unusable on a phone. Its pages were unstyled and scrolled sideways.

Why the stylesheet never arrived

The store is loaded lazily, and the bundler tracks which stylesheet belongs to each lazy chunk. Two lazy imports sitting inside one conditional expression defeated that tracking, so the production build listed no stylesheet for the store at all. The development server never showed it, and the store had not been opened on a phone since the deploy. The hotfix restores the link, injects the licensing contact address that had been left as a raw placeholder, and adds a guard to the size check that fails the build if any lazy chunk’s stylesheet is never loaded. It was merged ahead of the editor extras so the live fix went first.

Three decisions

The rest of the findings went to the owner as a list. Three needed a call, and the answer came back in one line.

  • An unchanged remix cannot be listed. The tester had pressed Remix, changed nothing, ticked the box saying the changes were their own work, and listed it. Now the song has to differ musically from its source before the store will take it, and the form says so.
  • The listing form says why. The List button had been greying out with no hint when a field was empty. It now names the first missing thing.
  • A development setting gets a note in the README rather than a code change.

Then: “Merge.” For the first time the manager merged both pull requests itself; the owner deploys. The remaining friction, from where the account controls live to how heavy an upload is, is parked until the owner is asked.