Skip to content

Chainstack sent their own mark, so use it - #2910

Merged
Flotapponnier merged 1 commit into
devfrom
worktree-chainstack-logo
Oct 9, 2026
Merged

Flotapponnier merged 1 commit into
devfrom
worktree-chainstack-logo

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

The old chainstack.svg was a transparent outline glyph that floated inside the round chip with the page background showing through. The file Chainstack supplied is a square: white glyph on their blue, so it fills the chip edge to edge the way the other brand marks do.

- chainstack: "/logos/chainstack.svg"
+ chainstack: "/logos/chainstack.jpg"

The old file is removed rather than left beside the new one. Nothing else referenced it: one entry in the logo manifest, plus the chainstack-cold alias that points at that entry and follows it automatically.

Chainstack is in neither NEEDS_LIGHT_CHIP nor NEEDS_DARK_CHIP, and still needs neither — those sets exist for marks that disappear against one of the two page backgrounds, and this one carries its own.

28 KB, well inside what this directory already holds (invo.png is 301 KB), so it goes in at the size supplied rather than resized.

tsc --noEmit, pnpm validate 246 specs, bun test src/ 444 pass. The build runs in CI: Turbopack rejects the symlinked node_modules this worktree uses, so it was not run locally.

🤖 Generated with Claude Code

The old SVG was a transparent outline glyph that floated inside the round
chip with the page showing through. The one they supplied is a square: white
glyph on their blue, so it fills the chip edge to edge the way the other
brand marks do.

The old file is removed rather than left beside the new one. Nothing else
referenced it: one entry in the logo manifest, and the chainstack-cold alias
that points at that entry and follows it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Flotapponnier
Flotapponnier merged commit 86edc2a into dev Oct 9, 2026
2 checks passed
@Flotapponnier
Flotapponnier deleted the worktree-chainstack-logo branch October 9, 2026 01:10
Flotapponnier added a commit that referenced this pull request Oct 9, 2026
The old SVG was a transparent outline glyph that floated inside the round
chip with the page showing through. The one they supplied is a square: white
glyph on their blue, so it fills the chip edge to edge the way the other
brand marks do.

The old file is removed rather than left beside the new one. Nothing else
referenced it: one entry in the logo manifest, and the chainstack-cold alias
that points at that entry and follows it.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Flotapponnier added a commit that referenced this pull request Oct 9, 2026
… them (#2934)

every logo is revalidated on every page view, and /capital has 158 of them

Provider marks are plain files under `public/`, and Next serves those as
`cache-control: public, max-age=0, must-revalidate` unless the config says
otherwise. The config did not: the only Cache-Control rule in next.config.ts
was for /api/citable.

must-revalidate means a browser holding the whole set in its disk cache still
has to ask the server about each file before it is allowed to paint it. On
/capital that is 158 conditional requests per visit. Measured against prod
from a machine sitting next to the cdg1 edge, each 304 costs about 95 ms and
carries no bytes. The marks render as empty circles until they land, which is
what a reader sees.

Why it turned slow recently rather than gradually: the page's logo set has
been growing, and most of the growth is new. Counting the files /capital
actually references by the month each was added to the repo:

  2026-05   28 files    476 KB     running  28 /  476 KB
  2026-06   16          89 KB               44 /  564 KB
  2026-07   19         663 KB               63 / 1227 KB
  2026-08   18         326 KB               81 / 1553 KB
  2026-09   72        1785 KB              153 / 3338 KB

September alone doubled the file count and added more weight than the four
months before it put together. A missing cache header is harmless at eighty
images and is not at a hundred and sixty.

So /logos/* gets a day of silence and then a month of serving the cached copy
while a fresh one is fetched behind it. Deliberately not `immutable`: these
filenames are stable and their CONTENTS get replaced — Chainstack sent a new
mark in #2910 — so a year-long immutable cache would pin an old logo on every
returning reader. A day is short enough that a swapped mark turns up on its
own.

Verified rather than assumed, because a config header does not always win:
the same block carries a comment about /api/citable, where this layer loses
to the Cache-Control the route handler sets. Static files have no handler, so
the rule applies. Checked on a dev server:

  $ curl -sI /logos/ronin.png
  Cache-Control: public, max-age=86400, stale-while-revalidate=2592000

and /favicon.ico still answers `no-cache, must-revalidate`, so the scope is
the one intended.

This does not touch the other half of the problem, which is a separate job:
3.5 MB of marks on one page, for circles rendered at 22 pixels. 32 files are
over 30 KB and carry 69 % of the weight, ronin.png alone is 227 KB. Re-encoded
at 64 px those 158 files would be roughly 630 KB, an 82 % cut on first load.
That one rewrites binaries and wants its own PR.
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