The site is built once into a single relative-path asset tree, then served from four independent origins. Every origin resolves the same paths, so any page can fall back to another origin's bytes when its primary is unreachable.
The default bun run build (hybrid mode) emits relative asset URLs and packages
everything — SPA shell, exhibit PDFs, and all narration/courtroom audio — into dist/.
Because links are relative, the same tree resolves whether it is served at a subpath
(/bf2c83f82c26/ on Vercel), under a CID (/ipfs/<cid>/), or at the root of a Worker.
services.atsignhandle.xyz/ipfs (→ spark-1 kubo), ipfs.io, dweb.link, inbrowser.link.cane.files.atsignhandle.xyz/files/<sha256>.--gateway build: SPA + 139 PDFs (371 MB). No audio (Vercel 100 MB/file + 1 GB deploy cap).kyleen-cane.xyz/bf2c83f82c26/ (apex → Vercel anycast).R2 is the system of record for every asset — the whole 3.5 GB tree, each object keyed by its served relpath (identical to the path the built SPA requests). The Worker serves the centralized site from R2, and because the same keys are relpaths, an R2 public custom domain turns R2 into a byte-host any other origin can borrow from. Workers Static Assets optionally fronts the small, hot files for free edge caching — but nothing depends on it: R2 alone can serve the entire site.
| Layer | Contents | Files | Size | Why |
|---|---|---|---|---|
| R2 — complete tree | Every asset, keyed by relpath (system of record + universal byte-host) | 2,634 | 3.5 GB | Single store; free tier; serves any origin |
| ↳ oversized (uploaded) | 15 mp3 + 7 pdf > 25 MiB | 21 / 22 | 1.84 GB | Exceed the 25 MiB static-asset cap |
| Workers Static Assets | SPA shell, data JSON, fonts, PDFs + audio ≤ 25 MiB | 2,612 | 1.66 GB | Free edge cache for hot paths (optional layer) |
Each resource declares its hosts; the client probes them in order and drops to the next when one fails. This is why a page served from IPFS can still pull a PDF or audio file from CF/R2 or the VPS — the bytes are content- or path-addressed and origin-independent.
service.atsignhandle.xyz (spark-1 kubo).cane.files.atsignhandle.xyz/files/<sha256> — survives IPFS/Pinata/Vercel all being down.| Hostname | Resolves to | Fronted by | Origin | Role |
|---|---|---|---|---|
| kyleen-cane.xyz | 64.29.17.1 | Vercel anycast | Vercel | Production site |
| services.atsignhandle.xyz | 104.21.50.212 | Cloudflare proxy | Tunnel → spark-1 kubo | IPFS gateway |
| service.atsignhandle.xyz | 104.21.50.212 | Cloudflare proxy | Tunnel → spark-1 kubo | IPFS gateway (alias) |
| cane.files.atsignhandle.xyz | 72.60.25.146 | direct A-record | VPS traefik → :3900 | Byte-host /files/<sha> |
| ipfs.kyleen-cane.xyz | 104.21.77.138 | Cloudflare proxy | not VPS — no traefik rule | Legacy · deprecated |
ipfs.kyleen-cane.xyz/ipfs does not route to the VPS. It sits on Cloudflare
proxy IPs, and the VPS has no traefik router for it. The VPS's only public HTTP host is the byte-host
cane.files.atsignhandle.xyz (direct to 72.60.25.146). The VPS kubo gateway
:8080 is functional but unrouted — exposing it (or repointing ipfs.kyleen-cane.xyz
at the VPS) would make the VPS a full IPFS HTTP gateway.