Integration logos

The logo tiles on /app-store and /app-store/<slug>. An entry in src/_data/integrations.snapshot.json names its file in logo; anything without one falls back to a monogram tile, which is why a missing logo is a downgrade rather than a broken image.

Vendored rather than hotlinked, for the same reason as the app logos in external-apps/public/logos: a page must not depend on a third party's CDN. scripts/refresh-app-store.js drops the logo back to null (with a warning) if the file named here has gone missing.

Files Source
providers/*.png Each provider's icon from api.tryfinch.com/providers, resized to 96px and re-encoded. Refresh them with node scripts/refresh-app-store.js --logos.
adyen.svg, hibob.svg, remote.svg, rippling.svg, salary-dk.svg, xero.svg, zenegy.svg Copied from external-apps/public/logos/, which documents where each one came from. Keep the two in sync — they are the same vendors.
aib.svg, bank-of-america.svg, barclays.svg, caixabank.svg, commerzbank.svg, deutsche-bank.svg, hsbc.svg, sparkasse.svg, wells-fargo.svg, stripe.svg, hubspot.svg, revolut.svg Simple Icons (CC0): the brand's mark as a single path, filled with the brand's own hex from the same record. Regenerate by name if a brand updates its mark.
salesforce.png, airwallex.png Each vendor's own site icon (salesforce.com/c2/public/app/favicon.ico, grw-landing.airwallex.com/favicon.ico), largest frame extracted. Small, because that is the largest artwork either publishes.
banks/*.png Each bank's own site icon, taken from the official domain recorded for it in scripts/app-store-bank-sites.json and resized to 96px. That list is reviewed by hand because bank names are too generic to resolve automatically — a wrong domain would put another company's mark on the page. Banks with no entry keep a monogram.
apps/*.svg Regenerated from the Light app store's own artwork: the 10x10 pixel glyph the store draws for that app's manifest icon, in the brand orange, with its country flag on the corner. Both come from the external-apps checkout, so the icon here is the same one a customer sees in the store.
chargebee.png Chargebee's own site icon (chargebee.com/static/resources/brand/favicon.png, 512px), resized to 96px like the provider set.

These are the vendors' trademarks, not ours. They identify the product each integration connects to (nominative use) and are never restyled or used as Light's own marks. Replace a file when a vendor rebrands; drop it when the integration goes away, since a stale logo misidentifies a product.