Files
zeekayandHanzo Dev c893cbb54d Serve the marks from the Sites plane, and delete the app in front of them
The cdn is a directory of files. public/ is the whole of it, and the Next app
around it produced that directory copied verbatim plus one page reading
"LUX cdn - coming soon" -- output: 'export' made next build an expensive cp -r,
and @hanzo/ui, Tailwind, mobx, splinetool and firebaseui were carried to render
three lines of text. src/, next.config.js, tsconfig.json, package.json and a
446 KB lockfile go with it.

Two other serving paths go too. deploy.yml published the same bytes to GitHub
Pages, and docker.yml built ghcr.io/luxfi/cdn onto hanzoai/static so a pod could
hold a file. hanzoai/ingress reads s3://hanzo-sites/lux/lux-cdn directly, which
is how every other static host in the estate already reaches the edge.

site.yml is the lane: checkout, then hanzoai/ci's site action. Nothing is
re-checked in it -- bin/site refuses an empty directory, measures the completion
manifest against the edge limit before sending a byte, and downloads the root
back after the flip, and a copy of those checks here is a copy that drifts.

The slug is lux-cdn. `cdn` is on cloud's reserved-label list beside api, admin
and gateway, so that no site can be published at cdn.<apex> and shadow real
infrastructure; asking for it answers 400.

public/index.html is the one page written by hand, and it is not decoration:
bin/site downloads the site root after the flip and fails the publish if it does
not answer, so the root has to be a file. Its own mark is served by the host it
describes.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 10:34:30 -07:00

1.2 KiB

cdn

cdn

The Lux estate's mark library: exchange token icons, bridge currency and network marks, brand artwork, product media. public/ is the whole of it — 640 files — and every one is addressed by its path.

https://cdn.lux.cloud/exchange/icon-svg/leth.svg
https://cdn.lux.cloud/exchange/icon-png/lux.png
https://cdn.lux.cloud/bridge/networks/ethereum_mainnet.png

cdn.lux.network serves the same files under the older name. Shipped clients — the wallets, Safe's chain list, the ad server's VAST — dial it from machines we cannot edit, so it stays. New references use cdn.lux.cloud.

Adding a file

Commit it under public/ and merge to main. .github/workflows/site.yml publishes the tree to the Sites plane, and hanzoai/ingress serves it at both hosts within the minute.

A publish reconciles: the manifest is what the host then holds, so a file deleted here is deleted there. Nothing is versioned by URL — a path is a stable name whose bytes may be corrected. The edge caches a file for a day.

There is no listing and no upload. A path that names no file answers 404, which is what lets a caller tell a missing mark from a wrong one.