scripts/snapshot.mjs renders every public page (home, browse, publish, boundaries, 8 categories, every active listing) to <out>/<path>/index.html, plus /sitemap.xml, /robots.txt, and the two static assets. Writing to a directory next to the service AND uploading via `aws s3 sync` are two flags on the same command: --out to pick the directory, --upload to push. Live routes added for /sitemap.xml and /robots.txt so a crawler hitting the live service sees the same enumeration the snapshot bakes into the bucket. renderSitemap / renderRobots in service/seo.js are the single rendering path both call sites use. Scope deliberately limited to the browse surface — /submit and the API routes depend on the live backend and were never going to work on a static mirror. The browse surface IS what the fallback is for: readers survive an outage, publishers can't. systemd unit + timer under deploy/ run the snapshot weekly on Sunday 04:00 UTC with 30 min jitter and Persistent=yes so a missed run after a reboot catches up. Unit uses the sia-storage AWS profile per [[sia-storage-credentials-location]] and the per-process endpoint URL baked in via Environment=. Local dry-run against an empty DB produced 14 HTML files + sitemap + robots + the two assets. |
||
|---|---|---|
| deploy | ||
| public | ||
| scripts | ||
| service | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Prometheus
The service behind prometheus.x — a standalone website that accepts app
listings, scans the binaries, generates APS1 records for publishers to sign,
and serves the browse pages.
The architecture decisions and the reasoning behind them live at
_coordination/sessions/prometheus-x-architecture.md.
Read that before touching the code; it answers the questions this directory
otherwise invites ("why isn't this on Sia?", "why isn't the admin on another
subdomain?", "why Node?").
service/ Node HTTP server, templates, scanner, storage, payments
public/ Static assets served under /static/
content/ Prose content in a form the templates render into pages
Run it locally
cd Prometheus
npm install # none yet; placeholder for when deps show up
node service/server.js
Opens on http://127.0.0.1:3700 by default. Override with PORT=xxxx.
Layout
The server is one node:http listener behind a trivial map-based router.
Pages are plain functions that return {title, description, body} and
layout() wraps them in the common document shell. Static files under
public/ are served directly.
There's no framework and no templating engine on purpose — a site this small does not earn a dependency surface, and the response-rendering path is short enough to read at a glance.