The marketing / showcase site for the P2Pool Starter Stack — an orchestrator (Pithead) and the miners that feed it (RigForge) — plus the node-starter stacks to come.
Built with Hugo (extended). Industrial-cypherpunk look, dark + #F26822,
zero third-party requests (system fonts only — nothing phones home, in keeping with the privacy ethos).
You need Hugo extended (≥ 0.162). On macOS: brew install hugo.
hugo server # live reload at http://localhost:1313hugo --gc --minify # static output to ./publicCI (.github/workflows/ci.yml) runs on every push/PR and is two checks:
# 1. Strict build — any Hugo warning (deprecation, missing data, …) fails the build
hugo --gc --minify --panicOnWarning --baseURL "http://localhost/"
# 2. Link / anchor / image check on the built site (internal only, deterministic)
# https://github.com/wjdp/htmltest — config in .htmltest.yml
htmltestBoth must pass before main deploys. External links are skipped by default so CI never
flakes on a third-party outage — run htmltest with CheckExternal: true to audit them.
All landing-page copy is in data/content.yaml — edit text there, not in the
templates. The page is assembled by layouts/index.html from that data.
data/content.yaml ← all copy (hero, stats, projects, roadmap, ethos, FAQ, CTA)
data/releases.json ← latest pithead / rigforge release tags (version badges)
layouts/index.html ← single-page assembly
layouts/partials/ ← head / header / footer / icon set / schema (JSON-LD)
assets/css/main.css ← the entire visual system
assets/js/main.js ← reveal-on-scroll, header state, copy-to-clipboard
scripts/refresh-releases.py ← refreshes data/releases.json from the GitHub API
static/img/ ← marks + dashboard screenshot + og-card
static/favicon.svg ← P2Pool Starter Stack layered mark (modern browsers)
static/favicon.ico ← raster fallback (Safari/legacy tabs) — 16/32/48
static/apple-touch-icon.png ← iOS / Safari home-screen icon (180×180)
static/robots.txt ← crawl rules (search + AI assistants explicitly welcome)
The icon/mark set is inline SVG in layouts/partials/icon.html
({{ partial "icon.html" "pithead" }}), so every mark inherits color from CSS via currentColor.
The site is tuned to be found — and cited — when people (or their AI assistants) ask how to mine Monero privately. The copy is keyword-aware without being spammy, and three machine-readable layers back it up:
layouts/partials/schema.htmlemits oneapplication/ld+jsongraph: anOrganization, aWebSite, aSoftwareApplicationfor each of Pithead and RigForge (free, MIT, OS-tagged), and aFAQPage. The FAQ entries are generated from the samedata/content.yaml → faqblock the page renders, so the visible Q&A and the structured data never drift. Built throughjsonify | safeJS, so escaping is always valid.layouts/partials/head.htmlcarries the title/description, canonical, Open Graph + Twitter card (static/img/og-card.png), androbots: max-image-preview:large.static/robots.txtallows everything and explicitly welcomes answer-engine crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, …) plus the auto-generatedsitemap.xml.
After editing the FAQ or any project copy, paste the built page into Google's Rich Results Test to confirm the JSON-LD still validates.
Each project card shows the latest release tag of its repo (e.g. v1.0.2). To keep the site's
zero third-party requests promise, the version is baked in at build time — the page never
calls out at runtime, and CI stays deterministic (no network):
- The Hugo build only reads
data/releases.json— a committed fallback that the page renders from. scripts/refresh-releases.pyupdates that file from the GitHub Releases API. It's best-effort: on any API/network/rate-limit error it keeps the committed value, so it can never fail a build. SetGH_TOKENto dodge the unauthenticated rate limit.- The deploy workflow runs that script before each Hugo build (with the built-in
GITHUB_TOKEN) and on a dailyschedule, so the live badges track new releases without a manual push.
Refresh the committed fallback locally with python3 scripts/refresh-releases.py.
This repo is the org's GitHub Pages site (p2pool-starter-stack.github.io), served at
https://p2pool-starter-stack.github.io/.
.github/workflows/deploy.yml builds with Hugo and publishes on every
push to main. In the repo's Settings → Pages, set Source: GitHub Actions once and it deploys
automatically thereafter.
To put it on a custom domain later: add static/CNAME containing the domain and set baseURL in
hugo.toml.
— MIT, like everything else here.