Live transparency surface for Powerloom data markets — one catalog entry per market, not a pile of PUBLIC_DATAMARKETS_BDS_* env vars.
Site shell (.env, 3 vars): docs, GitHub, marketing links for the header/footer.
Per-market (src/lib/datamarkets/catalog/markets.json, gitignored): copy from committed markets.example.json on the build host and edit. Includes DSV mainnet contracts, resolverAnchor (mainnet alpha for full-node aggregates), core API, metering, MCP, DSV watcher URLs, etc. Add a second market by appending a JSON object with the right kind (bds_uniswap_v3 vs dsv_subjective for inference-style markets).
On-chain reads use anchorRpcUrl in each live BDS market entry (default in markets.example.json: https://rpc-v2.powerloom.network) — public https only, never keyed RPC URLs.
npm install
cp .env.example .env
cp src/lib/datamarkets/catalog/markets.example.json src/lib/datamarkets/catalog/markets.json
# edit markets.json for your deployment
npm run devnpx svelte-kit sync
npm run build # validates .env + markets.json, syncs endpoint catalogs per live marketcatalog/prerender/{slug}-endpoints.json is generated by npm run sync:catalog from each live market's endpointsCatalogUrl in markets.json.
Watcher snapshot (gitignored, like markets.json):
cp src/lib/datamarkets/catalog/prerender/bds-uniswapv3-ethereum-watcher.example.json \
src/lib/datamarkets/catalog/prerender/bds-uniswapv3-ethereum-watcher.json
npm run sync:watcher # only on deploy prebuild — refreshes live tally datapredev / precheck do not run sync:watcher (avoids noisy git diffs). npm run build runs it on the deploy host.
On-chain epoch reads use the public anchor RPC from the browser. Watcher (watcherApiBase, e.g. dsv-monitor.powerloom.io/api) serves dashboard JSON and GET /public/mesh-health (tally-derived participation). Mesh-health is not served from DSV validator monitor-api. See daily_notes_work_plan/2026-06-02/nginx-dsv-monitor.conf for nginx OPTIONS on /api/.
| Variable | Purpose |
|---|---|
PUBLIC_DATAMARKETS_SITE_DOCS_URL |
Docs link |
PUBLIC_DATAMARKETS_SITE_GITHUB_ORG |
GitHub org link |
PUBLIC_POWERLOOM_MARKETING_URL |
Main marketing site |
Deployer copies catalog/markets.example.json → catalog/markets.json (not in git). Market card art: thumbnailUrl → files in static/markets/ (committed with the site).
- Add an object to
catalog/markets.json(kind:bds_uniswap_v3ordsv_subjective). - Run
npm run validate:markets. - For live BDS markets, set
endpointsCatalogUrland runnpm run sync:catalog. - Prerender picks up new slugs via
markets/[slug]/+page.jsentries().
Planned subjective markets (e.g. inference capacity index) get PlannedMarketPage until they have live APIs and a bds_uniswap_v3-style block.
Planned subjective markets (e.g. inference capacity index) do not link to internal coordination repos — use publicDocsUrl in markets.json only when a public docs page exists.
Docker: pass the three PUBLIC_* site vars as build args (see docker-compose.yml). Before build, cp catalog/markets.example.json catalog/markets.json and edit on the build host (or mount/copy in CI).