Skip to content

chore(web): store each competitor screenshot once in the blog library - #8134

Merged
ComputelessComputer merged 1 commit into
mainfrom
chore/dedupe-blog-product-screenshots
Oct 21, 2026
Merged

ComputelessComputer merged 1 commit into
mainfrom
chore/dedupe-blog-product-screenshots

Conversation

@ComputelessComputer

@ComputelessComputer ComputelessComputer commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Intent: The same competitor screenshots were uploaded again for every article that used them: MeetGeek 6 times; Granola and Otter 5; Tactiq 4; Fireflies, Jamie, Sonnet, Notta and Sembly 3 each. Many copies were PNG re-encodes about 10× heavier than the webp. Each screenshot now lives once in the shared blog/library/products/<product>/<feature>/ folder, and every article points there.

  • 21 new library objects, each a byte-for-byte copy of the lightest full-size existing version. Two groups reuse objects already in the library (Fathom recap, Fireflies recap audience).
  • 64 article references repointed. Distinct blog images referenced dropped from 283 to 240.
  • The static.anarlog.so Worker returns a 301 from each old article path to its library path. Search engines and external links keep working once the old objects are deleted. The old objects are still in R2 and are listed for deletion separately; deleting them is your call, after this Worker is deployed.

The duplicates were found by perceptual image hash and checked against each image's alt text and dimensions.

Demo

N/A: same images, new URLs. media:figures:check HEADs every referenced URL.

Verification

  • pnpm -F @anlg/web typecheck, pnpm -F @anlg/web test (378 pass, including a new Worker redirect test)
  • pnpm -F @anlg/web media:figures:check: all 240 referenced blog assets resolve
  • wrangler deploy --dry-run --config wrangler.static-assets.jsonc
  • dprint check on changed files

Summary by cubic

Deduplicates competitor product screenshots across blog articles so each screenshot is stored once in blog/library/products/ instead of re-uploaded per article, and keeps old URLs working through Worker redirects.

  • Creates 21 canonical library objects as byte-for-byte copies of the lightest existing versions and repoints 64 article references to them, dropping distinct blog image references from 283 to 240.
  • Adds a 301 redirect in the static.anarlog.so Worker from each old article path to its library path so search engines and external links keep working.
  • Leaves the old objects in R2 for separate deletion; delete them only after this Worker is deployed.

Written for commit 10e48ce. Summary will update on new commits.

View guided diff Turn on auto-fix

The same product screenshots (MeetGeek, Granola, Otter, Tactiq, Fireflies,
...) were uploaded separately for every article, up to six times each, often
as heavier PNG re-encodes. Each now lives once under
blog/library/products/<product>/<feature>/ and every article points there.

- Repoint 64 article image references to 23 canonical library objects
  (21 new copies of the lightest full-size version, 2 existing ones)
- static.anarlog.so Worker 301s the old article paths to their library
  path, so links from search engines and other sites keep working once
  the old objects are deleted

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 potential issues.

Devin Review

Comment thread apps/web/src/cloudflare/static-assets.ts
Comment thread apps/web/src/cloudflare/static-assets.ts
Comment thread apps/web/content/articles/ai-meeting-summary-tools.mdx
@ComputelessComputer
ComputelessComputer merged commit 2d9022a into main Oct 21, 2026
13 checks passed
@ComputelessComputer
ComputelessComputer deleted the chore/dedupe-blog-product-screenshots branch October 21, 2026 11:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant