diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 90c57e7..325acad 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,6 +3,10 @@ name: Deploy Hugo site to Pages on: push: branches: [main] + # Daily rebuild so the project version badges track the latest pithead / + # rigforge releases without waiting for a manual push. + schedule: + - cron: "17 6 * * *" workflow_dispatch: permissions: @@ -40,6 +44,10 @@ jobs: uses: actions/configure-pages@v6 with: enablement: true + - name: Refresh release versions (best-effort) + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: python3 scripts/refresh-releases.py - name: Build with Hugo env: HUGO_ENVIRONMENT: production diff --git a/README.md b/README.md index e88e93f..487a6e8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Hardrock — organization website +# P2Pool Starter Stack — organization website -The marketing / showcase site for the **Hardrock** collective — an orchestrator +The marketing / showcase site for the **P2Pool Starter Stack** — an orchestrator ([Pithead](https://github.com/p2pool-starter-stack/pithead)) and the miners that feed it ([RigForge](https://github.com/p2pool-starter-stack/rigforge)) — plus the node-starter stacks to come. @@ -43,18 +43,56 @@ All landing-page copy is in **[`data/content.yaml`](data/content.yaml)** — edi templates. The page is assembled by [`layouts/index.html`](layouts/index.html) from that data. ``` -data/content.yaml ← all copy (hero, stats, projects, roadmap, ethos, CTA) +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 +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 -static/img/ ← marks + dashboard screenshot -static/favicon.svg ← Hardrock crystal mark +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 +static/robots.txt ← crawl rules (search + AI assistants explicitly welcome) ``` The icon/mark set is inline SVG in [`layouts/partials/icon.html`](layouts/partials/icon.html) (`{{ partial "icon.html" "pithead" }}`), so every mark inherits color from CSS via `currentColor`. +## Discoverability (SEO / GEO) + +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.html`](layouts/partials/schema.html)** emits one `application/ld+json` + graph: an `Organization`, a `WebSite`, a `SoftwareApplication` for each of Pithead and RigForge + (free, MIT, OS-tagged), and a `FAQPage`. The FAQ entries are generated from the same + `data/content.yaml → faq` block the page renders, so the visible Q&A and the structured data never + drift. Built through `jsonify | safeJS`, so escaping is always valid. +- **[`layouts/partials/head.html`](layouts/partials/head.html)** carries the title/description, + canonical, Open Graph + Twitter card (`static/img/og-card.png`), and `robots: max-image-preview:large`. +- **[`static/robots.txt`](static/robots.txt)** allows everything and explicitly welcomes answer-engine + crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, …) plus the auto-generated `sitemap.xml`. + +After editing the FAQ or any project copy, paste the built page into Google's +[Rich Results Test](https://search.google.com/test/rich-results) to confirm the JSON-LD still validates. + +## Version badges (kept current automatically) + +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`](data/releases.json)** — a committed fallback + that the page renders from. +- **[`scripts/refresh-releases.py`](scripts/refresh-releases.py)** updates 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. Set `GH_TOKEN` to dodge the unauthenticated rate limit. +- The **deploy** workflow runs that script before each Hugo build (with the built-in `GITHUB_TOKEN`) + and on a **daily `schedule`**, so the live badges track new releases without a manual push. + +Refresh the committed fallback locally with `python3 scripts/refresh-releases.py`. + ## Deploy This repo is the org's GitHub Pages site (`p2pool-starter-stack.github.io`), served at diff --git a/assets/css/main.css b/assets/css/main.css index 2c64ef5..bea360d 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -1,5 +1,5 @@ /* ════════════════════════════════════════════════════════════════════════ - HARDROCK — industrial-cypherpunk landing + P2POOL STARTER STACK — industrial-cypherpunk landing Dark + orange #F26822 · headframe/blueprint motifs · mono data accents Zero third-party requests: system font stacks only. ════════════════════════════════════════════════════════════════════════ */ @@ -100,7 +100,7 @@ html.js .reveal.in { opacity: 1; transform: none; } .brand-mark { display: inline-flex; width: 26px; height: 26px; color: var(--orange); filter: drop-shadow(0 0 8px var(--orange-glow)); } .brand-mark .ico { width: 100%; height: 100%; } -.brand-word { font-weight: 800; letter-spacing: 2px; font-size: 18px; } +.brand-word { font-weight: 800; letter-spacing: 1.5px; font-size: 15px; white-space: nowrap; } .brand-accent { color: var(--orange); } .nav { display: flex; align-items: center; gap: 28px; } @@ -265,7 +265,13 @@ html.js .reveal.in { opacity: 1; transform: none; } .project-id { display: flex; flex-direction: column; } .project-name { font-size: 27px; font-weight: 800; margin: 0; letter-spacing: -.4px; } .project-role { font-size: 13px; color: var(--ac); letter-spacing: .5px; } -.project-flag { margin-left: auto; font-size: 12px; color: var(--orange); border: 1px solid rgba(242,104,34,.4); background: var(--orange-soft); padding: 5px 11px; border-radius: 20px; } +.project-tags { margin-left: auto; display: flex; align-items: center; gap: 10px; flex: 0 0 auto; } +.project-ver { font-size: 12px; color: var(--ac); letter-spacing: .5px; white-space: nowrap; + border: 1px solid color-mix(in srgb, var(--ac) 35%, transparent); + background: color-mix(in srgb, var(--ac) 10%, transparent); + padding: 5px 11px; border-radius: 20px; transition: border-color .2s, transform .2s var(--ease); } +.project-ver:hover { border-color: var(--ac); transform: translateY(-1px); } +.project-flag { font-size: 12px; color: var(--orange); border: 1px solid rgba(242,104,34,.4); background: var(--orange-soft); padding: 5px 11px; border-radius: 20px; white-space: nowrap; } .project-tagline { font-size: 20px; font-weight: 650; color: var(--text); margin: 0 0 10px; max-width: 56ch; } .project-blurb { color: var(--muted); margin: 0 0 26px; max-width: 70ch; } @@ -344,6 +350,22 @@ html.js .reveal.in { opacity: 1; transform: none; } .ethos-num { position: absolute; top: 16px; right: 18px; font-size: 13px; color: var(--orange); opacity: .55; } .ethos-card .card-title { padding-right: 40px; } +/* ───────── FAQ ───────── */ +.faq-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 18px 22px; } +.faq-item { + position: relative; padding: 26px 28px; border-radius: var(--radius); + border: 1px solid var(--border-2); background: var(--surface); + border-left: 3px solid rgba(242,104,34,.55); + transition: border-color .3s, transform .3s var(--ease), box-shadow .3s; +} +.faq-item:hover { border-color: rgba(242,104,34,.45); border-left-color: var(--orange); + transform: translateY(-3px); box-shadow: 0 24px 60px -40px var(--orange-glow); } +.faq-q { font-size: 16.5px; font-weight: 700; margin: 0 0 9px; letter-spacing: -.2px; line-height: 1.3; } +.faq-a { color: var(--muted); font-size: 14.5px; line-height: 1.6; margin: 0; } +.faq-link { display: inline-flex; align-items: center; gap: 5px; margin-top: 13px; + font-size: 12.5px; color: var(--orange); letter-spacing: .3px; transition: gap .2s; } +.faq-link:hover { gap: 9px; } + /* ───────── CTA ───────── */ .cta-section { text-align: center; overflow: hidden; border-bottom: 1px solid var(--border); } .cta-bg { position: absolute; inset: 0; pointer-events: none; } @@ -392,10 +414,14 @@ html.js .reveal.in { opacity: 1; transform: none; } } @media (max-width: 620px) { body { font-size: 16px; } + .brand { gap: 8px; } + .brand-word { font-size: 12.5px; letter-spacing: 1px; } + .brand-mark { width: 22px; height: 22px; } .section { padding: 72px 0; } .hero { padding: 80px 0 64px; } - .feat-grid, .project-featured .feat-grid, .cards-3, .cards-2 { grid-template-columns: 1fr; } + .feat-grid, .project-featured .feat-grid, .cards-3, .cards-2, .faq-grid { grid-template-columns: 1fr; } .project { padding: 26px 22px; } + .project-head { flex-wrap: wrap; } /* version chip + ★ flag drop to their own line */ .wave-body { padding: 14px 18px; } .donate-band { padding: 32px 20px; } .footer-grid { grid-template-columns: 1fr; gap: 30px; } diff --git a/assets/js/main.js b/assets/js/main.js index 7e6ec15..5bda9d4 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -1,4 +1,4 @@ -// Hardrock — tiny, no-dependency progressive enhancement. +// P2Pool Starter Stack — tiny, no-dependency progressive enhancement. (function () { "use strict"; var doc = document.documentElement; diff --git a/assets/og/og-card.svg b/assets/og/og-card.svg new file mode 100644 index 0000000..127584a --- /dev/null +++ b/assets/og/og-card.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + P2POOLSTARTER STACK + + + + + Run the whole + operationyourself. + + + Private, self-hosted Monero + Tari mining — an orchestrator + and the miners that feed it, in one command. + + + MIT·0% dev fee·Tor-first·no premine, no token·built in the open + diff --git a/content/_index.md b/content/_index.md index a1d3731..ab0b404 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,3 +1,3 @@ --- -title: "Hardrock — Self-hosted Monero + Tari mining, the whole operation" +title: "P2Pool Starter Stack — Private, self-hosted Monero + Tari mining" --- diff --git a/data/content.yaml b/data/content.yaml index 0702591..53a2eea 100644 --- a/data/content.yaml +++ b/data/content.yaml @@ -9,15 +9,16 @@ hero: title_accent: "operation" title_tail: "yourself." sub: >- - Hardrock builds open-source stacks for private, optimized - Monero + Tari mining on hardware you own — an + The P2Pool Starter Stack is open-source infrastructure for private, + optimized Monero + Tari mining on hardware you own — an orchestrator and the miners that feed it. No custodians. No exposed home IP. No hand-tuning. command: title: "you@home: ~/pithead" lines: - - { p: true, text: "git clone https://github.com/p2pool-starter-stack/pithead" } - - { p: true, text: "cd pithead && ./pithead setup" } + - { p: true, text: "curl -fsSL https://github.com/p2pool-starter-stack/pithead/releases/latest/download/pithead.tar.gz | tar xz" } + - { p: true, text: "cd pithead && cp config.json.template config.json" } + - { p: true, text: "./pithead setup" } - { p: false, text: "✓ Tor provisioned · kernel tuned · stack live over HTTPS" } cta_primary: { label: "Get Pithead", href: "https://github.com/p2pool-starter-stack/pithead" } cta_secondary: { label: "View on GitHub", href: "https://github.com/p2pool-starter-stack" } @@ -64,12 +65,12 @@ projects: image: "img/dashboard.png" image_alt: "The Pithead dashboard — live hashrate, sync progress, and per-worker stats" features: - - { icon: "onion", title: "Private by default", text: "Tor hidden services for Monero, Tari, and P2Pool. No port forwarding, no exposed IP." } - - { icon: "pick", title: "Monero + Tari, merge-mined", text: "Earn on both chains at once through P2Pool — with zero extra effort." } - - { icon: "brain", title: "Algorithmic yield optimization", text: "Continuously splits your hashrate between P2Pool and XMRvsBeast bonus rounds to maximize return." } - - { icon: "plug", title: "One endpoint for every rig", text: "All your miners point at a single address; the stack routes hashrate upstream." } - - { icon: "chart", title: "A dashboard that tells you things", text: "Live hashrate, sync progress, PPLNS window, and per-worker stats — over HTTPS on your LAN." } - - { icon: "shield", title: "Hardened out of the box", text: "Least-privilege containers, SHA256-verified pinned binaries, tightly scoped Docker-socket proxies." } + - { icon: "onion", title: "Private by default", text: "Tor hidden services for Monero, Tari, and P2Pool — your router stays shut and your home IP is never advertised to an inbound peer." } + - { icon: "pick", title: "Monero + Tari, merge-mined", text: "Every hash mines Monero on zero-fee P2Pool and merge-mines Tari at once — a second payout for zero extra power or config." } + - { icon: "brain", title: "Algorithmic yield optimization", text: "Watches the XMRvsBeast raffle and shifts hashrate to grab bonus rounds — donating only the minimum to hold your tier, then handing every spare cycle back to your own P2Pool payouts." } + - { icon: "plug", title: "One endpoint for every rig", text: "All your miners point at a single address — no wallet in the miner, no per-rig pool config. The stack routes the hashrate." } + - { icon: "chart", title: "A dashboard worth leaving open", text: "Live hashrate, the P2Pool/XvB split shading in real time, the PPLNS window, an honest tier + explicit VIP status, and per-worker stats — over HTTPS on your LAN." } + - { icon: "shield", title: "Hardened out of the box", text: "Least-privilege containers, SHA256-verified pinned binaries, and tightly scoped Docker-socket proxies — read-only for stats, start/stop-only for failover." } links: - { label: "GitHub", href: "https://github.com/p2pool-starter-stack/pithead", primary: true } - { label: "Docs", href: "https://github.com/p2pool-starter-stack/pithead/tree/main/docs" } @@ -82,52 +83,55 @@ projects: role: "the miners" tagline: "Provision a hardware-tuned XMRig miner in one command." blurb: >- - Turn any machine into a tuned mining worker. RigForge compiles stock XMRig from - source, applies CPU- and kernel-level tuning for maximum RandomX hashrate, runs it - as a managed service — then points it at your stack, or any RandomX pool. + Turn any Ubuntu/Debian — or macOS — machine into a tuned mining worker. RigForge compiles + stock, commit-pinned XMRig from source, applies CPU- and kernel-level tuning for maximum + RandomX hashrate, and runs it as a managed service — then points it at your stack, or any + RandomX pool. features: - - { icon: "bolt", title: "One command, bare metal to mining", text: "Installs the toolchain, builds upstream XMRig, and starts hashing." } - - { icon: "cpu", title: "Hardware-aware", text: "Detects your CPU (EPYC, Ryzen X3D, …) and applies a matching performance profile." } - - { icon: "gear", title: "Kernel-tuned", text: "HugePages (1 GB / 2 MB), MSR access, and NUMA binding — done for you." } - - { icon: "plug", title: "Plug-and-play", text: "Connects to Pithead, or any RandomX Stratum pool. Workers don't need Tor." } + - { icon: "bolt", title: "One command, bare metal to mining", text: "Installs the toolchain, compiles commit-pinned upstream XMRig, and starts it as a managed service — on Ubuntu/Debian or macOS." } + - { icon: "chart", title: "Measurably faster, and cooler", text: "+3.5% hashrate and +7.6% efficiency on a Ryzen 7800X3D, measured live against stock XMRig — and +6.6% on a 48-core EPYC." } + - { icon: "cpu", title: "Hardware-aware tuning", text: "Detects your CPU (EPYC, Ryzen X3D, …), applies a matching profile, then live-A/Bs the hardware prefetcher to keep the fastest." } + - { icon: "gear", title: "Kernel-tuned (Linux)", text: "HugePages (1 GB / 2 MB), MSR access, NUMA binding, and a performance governor — configured for you." } + - { icon: "plug", title: "Plug-and-play", text: "Points at Pithead, or any RandomX Stratum pool. No wallet in the miner; workers don't need Tor." } + - { icon: "shield", title: "Stock XMRig, verified", text: "Compiles upstream XMRig pinned to a verified commit — no custom binary, no curl | bash, a 0% dev fee (XMRig's donate-level pinned to 0), and idempotent re-runs." } links: - { label: "GitHub", href: "https://github.com/p2pool-starter-stack/rigforge", primary: true } + - { label: "Benchmarks", href: "https://github.com/p2pool-starter-stack/rigforge/blob/main/docs/benchmarks.md" } -# High-level roadmap, sequenced from the repos' open issues (pithead #167 v1.0 waves, -# rigforge tracks, and the v1.1 / v2 milestones). No dates — waves and versions only. +# High-level roadmap, sequenced from the repos' milestones & open issues (pithead #167 v1.0 waves + +# the v1.1 / v2 milestones; rigforge v1.0 is fully closed). No dates — waves and versions only. roadmap: eyebrow: "// the roadmap" - title: "The road to v1.0 — and beyond." + title: "v1.0 — feature-complete, at the release gate." sub: >- - Built in the open, issue by issue — no vaporware, no roadmap-for-sale. Six waves to launch, - then the appliance era: flash a drive, boot, and mine. - waves_label: "v1.0 · the launch, in six waves" + Built in the open, issue by issue — no vaporware, no roadmap-for-sale. RigForge's v1.0 is done; + Pithead's is feature-complete and through its release gate. Then the appliance era: flash a + drive, boot, and mine. + waves_label: "v1.0 · the launch, wave by wave" waves: - - { n: "01", name: "Correctness & data-safety", status: "In progress", - text: "Kill the silent-failure bugs that burn early adopters — no surprise re-syncs, no no-op applies, no stale config, no vanished share history." } - - { n: "02", name: "Privacy & security", status: "In progress", - text: "No clearnet egress outside Tor. Close every DNS and stats leak, fail closed on empty tokens, shut the SSRF door, cap the blast radius." } - - { n: "03", name: "The dashboard", status: "In progress", - text: "The thing people screenshot — routed hashrate everywhere, an honest tier + explicit VIP status, and a redesigned operator-first layout." } - - { n: "04", name: "Operator alerting", status: "Up next", - text: "Know the second a node or worker drops — Telegram notifications plus an external dead-man's switch for power-loss and host-down." } - - { n: "05", name: "CI & test hardening", status: "Up next", - text: "Every container image built in CI, every script linted, backup/restore and upgrade paths under an expanded test suite." } - - { n: "06", name: "Release gate & launch", status: "The finish line", - text: "A full end-to-end test on a real Ubuntu server, a GHCR release pipeline, and refreshed launch assets — then ship." } + - { n: "01", name: "Correctness & data-safety", status: "Shipped", + text: "Killed the silent-failure bugs that burn early adopters — no surprise re-syncs, no no-op applies, no stale generated config, no vanished share history." } + - { n: "02", name: "Privacy & security", status: "Shipped", + text: "Closed every clearnet DNS and stats leak, added optional stratum + dashboard auth, made the proxy fail closed on an empty token, and shut the SSRF door — with a privacy guide mapping every connection." } + - { n: "03", name: "The dashboard", status: "Shipped", + text: "The thing people screenshot — routed hashrate everywhere, an honest tier, explicit VIP status, a toggleable averaging window, and an operator-first layout." } + - { n: "04", name: "CI & test hardening", status: "Shipped", + text: "Every container image built in CI with hadolint, every script linted, and backup/restore plus host helpers under an expanded test suite." } + - { n: "05", name: "Release gate & launch", status: "The finish line", + text: "A full end-to-end test on a real Ubuntu server — passed. Left: the GHCR release pipeline and refreshed launch assets, then tag v1.0." } ship: - title: "v1.0 — the whole operation, shipped." - text: "End-to-end tested on real hardware, packaged, versioned, and released in the open." + title: "v1.0 — the whole operation, on real hardware." + text: "End-to-end tested on a real Ubuntu server, packaged, and versioned in the open — RigForge's v1.0 is already done." beyond_label: "beyond v1.0" horizon: - { tag: "v1.1", mark: "gear", accent: "purple", name: "Control & insight", - text: "Change any setting from the dashboard, one-click upgrades, an interactive Telegram bot, and a pool cadence & luck panel — plus privacy on by default, routing the P2Pool sidechain and the XvB upstream through Tor." } + text: "Change any setting from the dashboard, one-click upgrades, an interactive Telegram bot, operator alerting (node/worker-down + an external dead-man's switch), a pool cadence & luck panel, and persistent time-series telemetry — plus privacy on by default, routing the P2Pool sidechain and the XvB upstream through Tor. RigForge adds guided BIOS tuning and a richer stats API." } - { tag: "v2", mark: "spark", accent: "ember", name: "The appliance era", text: "Flash a USB, boot, and mine. Self-provisioning appliance images for the stack host and RigForge miners, an immutable Podman/Quadlet runtime, and standalone Monero & Tari node-starter stacks." } donate: eyebrow: "// fuel the roadmap" title: "Built in the open. Funded by the people who run it." - text: "Every wave above ships by hand, issue by issue — no VC, no token, no premine. If a Hardrock stack saved you time, fuel the next wave." + text: "Every wave above shipped by hand, issue by issue — no VC, no token, no premine. If this stack saved you time, fuel the next wave." note: "Monero, naturally — the same address Pithead ships with." # "How we build" — the ethos. @@ -135,13 +139,85 @@ ethos: eyebrow: "// how we build" title: "The XMR ethos, in the architecture." items: - - { title: "Privacy is the default, not a setting", text: "Tor-only upstreams, localhost-bound RPC, no public port forwarding. You opt out of privacy — never in." } + - { title: "Privacy is the default, not a setting", text: "Inbound rides Tor hidden services — no port forwarding, your home IP never shown to a peer — and RPC stays localhost-bound. The few clearnet outbound paths left in v1.0 are documented, and go Tor-by-default in v1.1." } - { title: "Least privilege, everywhere", text: "Capability-scoped containers, a read-only Docker-socket proxy kept separate from a start/stop-only one, owner-only secrets." } - { title: "Verifiable and pinned", text: "Third-party binaries are SHA256-checked and version-pinned. No curl | bash trust." } - { title: "The why lives in the code", text: "Non-obvious decisions are documented inline with their reasoning and the issue that drove them." } - { title: "Small, reversible, issue-driven", text: "Config changes are previewed and warn before anything disruptive; failures degrade gracefully." } - { title: "Respect the operator's time", text: "Sensible auto-tuning, one-command setup, and docs treated as a first-class deliverable." } +# FAQ — answers the real questions people (and AI assistants) ask about mining +# Monero at home. Plain-text answers (no HTML) so they feed the FAQPage JSON-LD +# verbatim; an optional link/link_label adds a CTA to the visible card only. +faq: + eyebrow: "// questions, answered" + title: "How to mine Monero privately, answered." + sub: >- + Everything people ask before they start — and what to tell anyone who asks you. + items: + - q: "How do I mine Monero privately at home?" + a: >- + Run the P2Pool Starter Stack. One command stands up a private Monero full node, P2Pool, and a + single mining endpoint behind Tor — your home IP is never advertised to an inbound peer and you + never forward a port. Point any XMRig rig (or a RigForge worker) at it and you're mining straight + to your own wallet, no account and no custodian. + link: "https://github.com/p2pool-starter-stack/pithead" + link_label: "Start with Pithead" + + - q: "Do I have to forward ports or expose my home IP to mine Monero?" + a: >- + No. Pithead runs Monero, Tari, and P2Pool as Tor hidden services, so inbound peers reach you over + an onion address and your router stays shut. RPC is bound to localhost. A couple of outbound yield + paths still touch clearnet in v1.0 — every connection is mapped in the privacy guide, and they move + to Tor-by-default in v1.1. + + - q: "What is P2Pool, and why mine to it instead of a centralized pool?" + a: >- + P2Pool is a decentralized, peer-to-peer Monero mining pool. There's no operator, no account, and + no pool fee — the network pays block rewards straight to your own wallet. The P2Pool Starter Stack + runs your own P2Pool node, so you get decentralized, zero-fee payouts without the fiddly setup. + + - q: "Is solo Monero mining worth it, or should I use a pool?" + a: >- + Solo mining only pays when you personally find a block, which can take a very long time on home + hardware. P2Pool gives you steady, proportional payouts with no operator and no fee — the best of + both. Pithead runs P2Pool for you and can also grab XMRvsBeast bonus rounds to lift your effective + yield. + + - q: "What hardware do I need to mine Monero?" + a: >- + For the stack host: Ubuntu Server 24.04, 16 GB+ RAM, and an SSD (~300 GB pruned; 2–4 TB for + set-and-forget). Mining itself is CPU-bound — Monero's RandomX runs on any modern AMD or Intel CPU, + and chips with large L3 cache (Ryzen X3D, EPYC) shine. RigForge auto-detects your CPU and tunes the + miner for you. + + - q: "What is Monero + Tari merge mining?" + a: >- + Merge mining lets one unit of proof-of-work secure two chains at once. Through P2Pool, every hash + you submit mines Monero and merge-mines Tari at the same time — a second payout for zero extra + power, hardware, or configuration. + + - q: "Is it free? Are there any pool fees or a dev fee?" + a: >- + Yes — it's free and MIT-licensed. P2Pool charges no pool fee. RigForge compiles stock XMRig with + the dev-fee pinned to 0%. No token, no premine, no VC — just an optional Monero donation address if + a stack saves you time. + + - q: "Can I point my existing XMRig miners at it?" + a: >- + Yes. Any XMRig or RandomX rig connects to the stack's single endpoint at host:3333 — no wallet in + the miner, no per-rig pool config. For maximum hashrate, RigForge provisions a kernel-tuned XMRig + worker in one command and measured +3.5% hashrate and +7.6% efficiency on a Ryzen 7800X3D versus + stock. + link: "https://github.com/p2pool-starter-stack/rigforge" + link_label: "Provision with RigForge" + + - q: "What is XMRvsBeast (XvB), and how does the optimizer use it?" + a: >- + XMRvsBeast runs bonus raffle rounds for miners who lend a little hashrate. Pithead's algorithmic + optimizer watches XvB and shifts just enough hashrate to hold your tier — donating the minimum — + then hands every spare cycle back to your own P2Pool payouts. No manual tuning, no over-donating. + cta: eyebrow: "// start here" title: "Stand up the whole operation." diff --git a/data/releases.json b/data/releases.json new file mode 100644 index 0000000..1bdb498 --- /dev/null +++ b/data/releases.json @@ -0,0 +1,4 @@ +{ + "pithead": "v1.0.2", + "rigforge": "v1.0.1" +} diff --git a/hugo.toml b/hugo.toml index 0bec232..e972856 100644 --- a/hugo.toml +++ b/hugo.toml @@ -1,17 +1,20 @@ baseURL = "https://p2pool-starter-stack.github.io/" defaultContentLanguage = "en" -title = "Hardrock" -enableRobotsTXT = true +title = "P2Pool Starter Stack" +# robots.txt is served from static/robots.txt (hand-written: welcomes AI/search +# crawlers + sitemap). Keep Hugo's generator OFF so it doesn't clobber it with a +# bare "User-agent: *". +enableRobotsTXT = false -# Industrial-cypherpunk showcase for the Hardrock collective. +# Industrial-cypherpunk showcase for the P2Pool Starter Stack. # Single-page landing driven by data/content.yaml + layouts/index.html. disableKinds = ["taxonomy", "term", "rss"] [params] - brand = "Hardrock" - tagline = "Self-hosted crypto infrastructure — the whole operation." - description = "Hardrock builds open-source stacks for private, optimized Monero + Tari mining on hardware you own. No custodians. No exposed home IP. No hand-tuning." + brand = "P2Pool Starter Stack" + tagline = "Private, self-hosted Monero + Tari mining — the whole operation." + description = "The P2Pool Starter Stack is open-source infrastructure for private, optimized Monero + Tari mining on hardware you own. No custodians. No exposed home IP. No hand-tuning." org = "p2pool-starter-stack" orgURL = "https://github.com/p2pool-starter-stack" donateXMR = "89VGXHYEYdTJ4qQPoSZSD4BQsXCm6vCjUF2y2Vm42mA8ESLXA4XpmsvWMFB2stQw7p5UXnyZ81EMtgkCYqjYBPow8v7btKv" diff --git a/layouts/index.html b/layouts/index.html index beb8a06..341c5d0 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -82,6 +82,7 @@

{{ $c.projects.title }}

{{ $c.projects.sub }}

{{ range $c.projects.items }} + {{ $ver := index hugo.Data.releases .id }}
{{ partial "icon.html" .mark }} @@ -89,7 +90,10 @@

{{ $c.projects.title }}

{{ .name }}

{{ .role }}
- {{ if .featured }}★ the star{{ end }} +
+ {{ if $ver }}{{ $ver }}{{ end }} + {{ if .featured }}★ the star{{ end }} +

{{ .tagline }}

{{ .blurb }}

@@ -143,7 +147,7 @@

{{ .name }}

{{ end }}
-
{{ partial "icon.html" "hardrock" }}
+
{{ partial "icon.html" "stack" }}

{{ $c.roadmap.ship.title }}

SHIP

{{ $c.roadmap.ship.text }}

@@ -197,6 +201,25 @@

{{ $e.title }}

+{{/* ───────────────────────── FAQ ───────────────────────── */}} +
+
+

{{ $c.faq.eyebrow }}

+

{{ $c.faq.title }}

+

{{ $c.faq.sub }}

+ +
+ {{ range $c.faq.items }} + + {{ end }} +
+
+
+ {{/* ───────────────────────── CTA ───────────────────────── */}}
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index 4b9993c..a8ca3df 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -2,9 +2,9 @@ diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 4d523f5..e2c62d3 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -1,18 +1,35 @@ -{{ if .IsHome }}{{ .Site.Title }} — {{ .Site.Params.tagline }}{{ else }}{{ .Title }} · {{ .Site.Title }}{{ end }} + +{{- $title := cond .IsHome (printf "%s — %s" .Site.Title .Site.Params.tagline) (printf "%s · %s" .Title .Site.Title) }} +{{ $title }} + + + + - + +{{- $og := "img/og-card.png" | absURL }} + + + + + + + + + +{{- partial "schema.html" . }} {{- $css := resources.Get "css/main.css" | resources.Minify | resources.Fingerprint -}} diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 9c56e5d..c3d76ee 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -1,14 +1,15 @@