Problem
public/competitions/*.png (added in b39cc89, "logo banners on competition grid cards") has 100 logo files, but most are far too small for how they're actually displayed:
40 files are 32x32
19 files are 16x16
11 files are 48x48
That's 70 of 100 logos at favicon resolution. competition-card.tsx's grid variant renders them at aspect-[2/1] (a banner spanning the full card width, easily 300px+ wide) via next/image fill, so a 16x16 or 32x32 source gets stretched roughly 10-20x past its native resolution. That's the pixelation.
Likely cause
These look like they were pulled from a favicon service (e.g. Google's s2/favicons endpoint, or each site's own favicon.ico/small touch-icon) rather than each organizer's actual logo mark. A handful of files (coca-cola-scholars.png at 360x360, a couple of others in the 100-256px range) look like real logos and render fine at this size — the fix is to bring the other ~70 up to that same bar, not to redo the ones that already work.
Fix
For each competition whose logo is under ~128px:
- Find the organizer's actual logo (their site's header/press-kit, or a larger touch-icon like
apple-touch-icon.png which is usually 180x180+, not the tiny favicon.ico)
- Replace the file at
public/competitions/<id>.png, matching the existing filename-to-id convention
- Keep it reasonably sized (a few hundred px on the long edge is enough for a card banner — no need for multi-MB source files)
There's no committed script that generated these, so there's nothing to fix upstream - it's a per-file replacement job. If you do write a fetch script while you're in there, commit it under scripts/ so this doesn't have to be a manual one-off again next time new competitions get logos.
Acceptance criteria
Problem
public/competitions/*.png(added in b39cc89, "logo banners on competition grid cards") has 100 logo files, but most are far too small for how they're actually displayed:That's 70 of 100 logos at favicon resolution.
competition-card.tsx's grid variant renders them ataspect-[2/1](a banner spanning the full card width, easily 300px+ wide) vianext/image fill, so a 16x16 or 32x32 source gets stretched roughly 10-20x past its native resolution. That's the pixelation.Likely cause
These look like they were pulled from a favicon service (e.g. Google's
s2/faviconsendpoint, or each site's ownfavicon.ico/small touch-icon) rather than each organizer's actual logo mark. A handful of files (coca-cola-scholars.pngat 360x360, a couple of others in the 100-256px range) look like real logos and render fine at this size — the fix is to bring the other ~70 up to that same bar, not to redo the ones that already work.Fix
For each competition whose logo is under ~128px:
apple-touch-icon.pngwhich is usually 180x180+, not the tinyfavicon.ico)public/competitions/<id>.png, matching the existing filename-to-idconventionThere's no committed script that generated these, so there's nothing to fix upstream - it's a per-file replacement job. If you do write a fetch script while you're in there, commit it under
scripts/so this doesn't have to be a manual one-off again next time new competitions get logos.Acceptance criteria
public/competitions/is under ~128px on its long edge