18 Commits

Author SHA1 Message Date
Dorian
68b606b489 Persist reward contribution ledger 2026-05-09 17:10:47 +01:00
Dorian
4064e16ea8 Use host-published Datum admin port 2026-05-09 16:49:01 +01:00
Dorian
4b28f760c5 Use Umbrel DNS for Datum polling 2026-05-09 16:41:33 +01:00
Dorian
87e114a2aa Discover Datum container IP at runtime 2026-05-09 16:33:45 +01:00
Dorian
f2665d28c8 Use Datum service network for API polling 2026-05-09 16:29:19 +01:00
Dorian
2bbb89c53f Stabilize Datum container networking 2026-05-09 16:26:18 +01:00
Dorian
54fd5a278c Restore Datum current-IP deployment 2026-05-08 11:05:19 +01:00
Dorian
8af87bfb95 Use Umbrel Docker DNS for Datum 2026-05-08 10:59:06 +01:00
Dorian
fa707e2464 Add network stats and rotating mining jokes 2026-05-06 19:43:28 +01:00
Dorian
c77c74612d Add graph telemetry and remote signer login 2026-05-06 18:09:58 +01:00
Dorian
aee42e9c5f fix(deploy): use datum service alias 2026-05-06 17:27:18 +01:00
Dorian
e47b07f780 fix(deploy): use datum container dns 2026-05-06 17:25:14 +01:00
Dorian
00a1258458 fix(docker): make Portainer repository deploy buildable 2026-05-06 16:54:27 +01:00
Dorian
b15c24f1f2 fix(docker): SPA copy path + simpler external network ref
Two bugs that surfaced on first real deploy:

1. SPA was COPYed to /app/apps/api/public but server.ts looks at
   /app/apps/web/dist (relative to apps/api/dist via fileURLToPath).
   Static handler returned 404 for /. Move the COPY to match.

2. The aliased external network (`umbrel_main` -> name:
   umbrel_main_network) wasn't attaching in Portainer Stacks → DNS
   lookup of datum_datum_1 fails with ENOTFOUND. Use the network's
   real name directly as the alias to avoid any Portainer indirection.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:48:23 +01:00
Dorian
b827f89dcd fix: serve SPA from apps/web/dist (matches server default) + use Datum IP
Two production-blocker bugs from the first deploy:

1. Static SPA never served — Dockerfile copied apps/web/dist into
   apps/api/public, but server.ts default static dir resolves to
   apps/web/dist. Mismatch meant every route fell through to Express'
   bare 404 ("Cannot GET /"). Aligning Dockerfile to the default path.

2. DNS for the Datum container name failed (getaddrinfo ENOTFOUND
   datum_datum_1) — gashboard's Docker DNS doesn't reliably alias
   external-network container names across compose stacks. Switch the
   default DATUM_URL to the container's known IP on umbrel_main_network
   (10.21.0.11, captured during earlier diagnostics). If the IP changes
   the user can override DATUM_URL in env. If gashboard isn't actually
   joined to umbrel_main_network, the next failure will be a much more
   diagnostic ECONNREFUSED instead of an opaque ENOTFOUND.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:47:56 +01:00
Dorian
8f7aeb88b7 chore: serve everything on port 1337
User-facing port unified at 1337 — vibes-aligned and easier to remember
than 8080/8420. Updates: api default PORT, .env.example, docker-compose
mapping (1337:1337), healthcheck target, Dockerfile EXPOSE, Vite dev
proxy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:33:01 +01:00
Dorian
98074ff20d chore(docker): map dashboard to port 1337 externally
Per the original brief: 1337 vibe. Internal port stays 8080 (matches
PORT env default and Express trust-proxy assumptions); just remaps the
host port from the 8420 placeholder to 1337.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:32:25 +01:00
Dorian
2dc9be4678 chore: scaffold pnpm workspace, container, deploy docs
Two-app pnpm workspace for the gashboard (mining dashboard) project:
@gashboard/api (Express 5 + TS) and @gashboard/web (Vue 3 + Vite + TS).
Shared tsconfig.base.json. Multi-stage Dockerfile (node:22.12-alpine,
non-root, healthchecked) and docker-compose.yml ready to deploy as a
Portainer Stack on Umbrel — joins umbrel_main_network so it can reach
the Datum container directly. .env.example documents every var; README
covers the Portainer deploy flow and the security posture.

Note: Dockerfile has a TODO marker to SHA256-pin the base image before
shipping to production.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 15:57:57 +01:00