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]>
1.2 KiB
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.