A tribute to the original RPOW by Hal Finney.
A faithful modern recreation of Hal Finney's Reusable Proofs of Work (2004). Magic-link auth, hashcash mining (~30s on a modern MacBook), Ed25519-signed tokens, email-keyed transfers, public ledger.
Requires Node 22 and Docker.
docker run --rm -d --name rpow-pg -e POSTGRES_PASSWORD=p -p 55432:5432 postgres:16
npm install
npm run build --workspace @rpow/shared
npm testTo run the stack with low difficulty for hands-on testing:
# In one terminal
DATABASE_URL=postgres://postgres:p@localhost:55432/postgres \
RESEND_API_KEY=re_test EMAIL_FROM='rpow2 <no-reply@rpow2.com>' \
SESSION_SECRET=$(openssl rand -hex 32) \
MAGIC_LINK_BASE_URL=http://localhost:8080 WEB_ORIGIN=http://localhost:5173 \
DIFFICULTY_BITS=20 DIFFICULTY_FLOOR=8 \
RPOW_TEST_INBOX=true \
$(node -e 'import("./apps/server/dist/signing.js").then(({generateKeypair})=>{const k=generateKeypair(); console.log("RPOW_SIGNING_PRIVATE_KEY_HEX="+k.privateHex+" RPOW_SIGNING_PUBLIC_KEY_HEX="+k.publicHex);})') \
npm --workspace @rpow/server run dev
# In another terminal
npm --workspace @rpow/web run dev- Server: Fly.io (
api.rpow2.com) - Web: Netlify (
rpow2.com) - DB: Neon Postgres (serverless)
- Email: Resend
- DNS: GoDaddy (registrar)
See docs/RUNBOOK.md for operator instructions.