Category

Screenshots & Assets

Capture, masking, visual QA, and asset production notes for many small shipped apps.

All posts

17
Left: a post with placeholders and pending links. Right: the same post with diagrams in place and the empty video section gone.
Screenshots & Assets3 min read

My articles were shipping empty frames

Several posts had placeholders where concept diagrams belonged, and posts with no video still rendered a video section. One commit added 17 diagrams and hid the empty video sections. One post still couldn't be fixed the cheap way.

#placeholders#svg#nextjs#frontmatter
Concept diagram: hash indexing can collide while rank indexing cannot collide within one screen
Screenshots & Assets3 min read

The UK and Germany got the same green

Porting a web dashboard into an app, I matched every number byte for byte. The visible defect was not a number — it was a color, and the original had already avoided it.

#screenshots#gotchas#debugging#reality-check
Concept diagram: solid square, nearly empty circle, and correct pattern — all three carrying the same lint pass mark
Screenshots & Assets6 min read

The themed icon was a solid square. Lint passed

The monochrome layer uses alpha only, not color. If the foreground has an opaque background square, the cells and pattern disappear into a solid block — and the presence of the tag guarantees nothing. A 17-app sweep.

#android#screenshots#verification#methodology
The same word written three times, stacked. The top two (normal / Bold) are intact; the bottom one (spacing -0.6) has its last letter pushed half past the right boundary and clipped.
Screenshots & Assets4 min read

Negative Letter-Spacing Ate the Last Letter of an Arabic Word

Shooting store screenshots per locale, the screen title was clipped only in the Arabic cut. It looked like a width problem, and there was evidence for it. Widening didn't fix it, and drawing the same string three times changing one variable showed the culprit wasn't the font, the weight, or the width — it was a negative letterSpacing. An improvement for Latin density was erasing letters in another script.

#screenshots#localization#android#gotchas
Diagram: inside the app a rule requires the price to be shown, while the same screen becomes a violation as a store screenshot
Screenshots & Assets8 min read

The Free Trial Was a Price — What Got Rejected Was the Part I Didn't Change

One of five screenshot-caption A/B experiments came back rejected under 2.3.7. The images Apple attached were not the captioned shots I had made — they were paywall screenshots that had been live for months. Apple counts 'free trial' and 'save 41%' as price references. Here is the OCR audit of 267 live screenshots that found the same violation in 8 apps.

#screenshots#app-store#app-store-connect#ios
Concept diagram: a locale-by-tab grid with paywall-contaminated cells scattered with no pattern, and below it 'size gate: all pass'. A paywall is a normal-sized app screen, so the gate can't filter it out.
Screenshots & Assets4 min read

A paywall got captured in the screenshots

A paywall crept into screenshots from a 16-locale auto-capture pipeline. Which tab got contaminated differed per locale, so I couldn't pin the repro. Four causes overlapped, but the most important finding was in verification — the size gate checks 'is there a screen', not 'is it the right screen'.

#screenshots#ios#simulator#gotchas
Concept diagram: images inside the ja/de/fr folders are all English text. The command succeeds, the file is created, the size is normal, so the folder-name/contents mismatch is only visible if you open them.
Screenshots & Assets3 min read

The simulator ignored the language flag

Auto-capturing 16-locale screenshots via a launch argument quietly broke on iOS 26. The command succeeds and files appear, but the folder is named 'ja' and the contents are English. A pipeline that ran fine for years started producing wrong results one day — and the size gate can't even detect it.

#screenshots#ios#simulator#gotchas