Mono-repo for FilOz web properties. Same architecture as foc-websites — each site is an Astro project under sites/, deployed to Filecoin Onchain Cloud by filecoin-nova.
Plan + rollout tracker: FilOzone/tpm-utils#2
Browser → *.filoz.org (prod) / *.filecoincloud.io (staging)
→ Cloudflare edge → Worker → KV[hostname] → current CID
→ edge cache, then R2 bucket foc-site-cache (both keyed by CID + path)
→ on a miss: FOC storage providers holding the CID (found via delegated-ipfs.dev,
fetched as a CAR, every block hash-verified, UnixFS decoded in the Worker)
→ last resort only: public IPFS gateways dweb.link → w3s.link → ipfs.io
Both the Worker and the deploy pipeline live in filecoin-nova. This repo only carries site content. The shared Worker is redeployed from foc-websites' Deploy Worker workflow; the public gateways rate-limit backend traffic since Aug 2026, so content is served from R2 and the edge cache, filled straight from the FOC storage providers with every block hash-verified; the public gateways are a last resort only.
ENS fallback: *.filnova.eth (staging) / *.filoz.eth (prod), resolvable via eth.limo.
filoz-websites/
.github/workflows/deploy.yml 10-line caller for nova's reusable workflow
sites/<name>/
deploy.json hostname + cf_zone_id + ens_name
package.json build scripts
src/, public/ site content
| Site | Production | Staging | ENS |
|---|---|---|---|
| filoz-home | filoz.org | filoz.filecoincloud.io | filoz.filnova.eth |
| dealbot | dealbot.filoz.org | dealbot.filecoincloud.io | dealbot.filnova.eth |
| dealbot-staging | staging.dealbot.filoz.org | dealbot-staging.filecoincloud.io | dealbot-staging.filnova.eth |
cd sites/<name>
npm install
npm run dev
npm run buildPush to main touching sites/**. CI calls filecoin-nova's reusable workflow which builds each changed site, pins to FOC, updates KV, DNSLink, and ENS.
.github/workflows/deploy.yml:
name: Deploy
on:
push: { branches: [main], paths: ['sites/**'] }
workflow_dispatch:
jobs:
deploy:
uses: FilOzone/filecoin-nova/.github/workflows/deploy-sites.yml@v0.7.6
secrets:
NOVA_PIN_KEY: ${{ secrets.NOVA_PIN_KEY }}
NOVA_WALLET_ADDRESS: ${{ secrets.NOVA_WALLET_ADDRESS }}
NOVA_ENS_KEY: ${{ secrets.NOVA_ENS_KEY }}
NOVA_RPC_URL: ${{ secrets.NOVA_RPC_URL }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}Repo variables (for reusing FOC's existing foc-gateway-proxy Worker rather than spinning up a new one per-repo):
NOVA_WORKER_NAME = foc-gateway-proxy
NOVA_KV_NAMESPACE_ID = 6f6e9038f48742e7b7e4a7de8733460a
NOVA_WORKER_UPLOAD = skip
Required GitHub secrets: NOVA_PIN_KEY, NOVA_WALLET_ADDRESS, NOVA_ENS_KEY, NOVA_RPC_URL, CLOUDFLARE_API_TOKEN.
{
"hostname": "dealbot.filecoincloud.io",
"cf_zone_id": "ec64112d49365c91cf3c8db1424b5632",
"ens_name": "dealbot.filnova.eth"
}Optional extras: "dist": "site" for pre-built sites, "apiProxy": { "/api": "https://dealbot.filoz.org" } for reverse-proxied API routes.
- dealbot frontend is a React SPA calling a backend API. The shared Worker proxies
/api/*to the NestJS backend atdealbot.filoz.org/staging.dealbot.filoz.org— same-origin from the browser's perspective, no CORS. - filoz-home rebuilds a Webflow site; Webflow IX2 animations depend on
data-wf-pageattributes — preserve them per page during the Hugo → Astro port.