diff --git a/docs/plans/site-miner-2026-10-06.png b/docs/plans/site-miner-2026-10-06.png new file mode 100644 index 00000000..fa73d0e6 Binary files /dev/null and b/docs/plans/site-miner-2026-10-06.png differ diff --git a/relay/playbooks/site-capture-pc1.ps1 b/relay/playbooks/site-capture-pc1.ps1 new file mode 100644 index 00000000..a8812223 --- /dev/null +++ b/relay/playbooks/site-capture-pc1.ps1 @@ -0,0 +1,62 @@ +# Site capture on PC 1 (6 October 2026): screenshots of the installed Igneum Miner's own UI for igneum.network/miner. +# A read-only run job. It reads the installed app's URL file and GETs the four pages with Edge headless, which every +# Windows box has. Nothing is posted to the app: no quit, no pause, no resume, no settings change; the miners keep +# running; Edge runs as its own process on a scratch profile under the job folder and exits after each shot. +# Each PNG goes back as a raw file drop on the relay (under 4 MB each; x-igneum-key is the job's intake key, which +# may report but never execute). The Mac reads them with tools/relay.mjs and masks the rail foot and the machine id +# before anything reaches site/img. Every line that matters starts with RESULT. +$ErrorActionPreference = 'Continue' +function Say($t) { Write-Output "RESULT $t" } + +$urlFile = @((Join-Path $env:IGNEUM_APP_DATA 'app\app.url'), (Join-Path $env:LOCALAPPDATA 'igneum\app\app.url')) | Where-Object { Test-Path $_ } | Select-Object -First 1 +if (-not $urlFile) { Say 'no app.url found: the installed app is not running'; exit 2 } +$base = (Get-Content -LiteralPath $urlFile -Raw).Trim() +if (-not $base.EndsWith('/')) { $base += '/' } +Say 'app url read (the installed app; read only)' + +$edge = @("${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe", "$env:ProgramFiles\Microsoft\Edge\Application\msedge.exe") | Where-Object { Test-Path $_ } | Select-Object -First 1 +if (-not $edge) { Say 'msedge.exe not found'; exit 2 } +Say ("edge " + (Get-Item $edge).VersionInfo.ProductVersion) + +try { + $state = Invoke-RestMethod -Uri ($base + 'api/state') -TimeoutSec 10 + $cards = @($state.mining.cards) + Say ("state: app {0}, mining {1}, {2} card(s), {3:N1} MH/s total" -f $env:IGNEUM_APP_VERSION, $state.mining.state, $cards.Count, [double]$state.mining.hash_total) + foreach ($c in $cards) { Say ("card {0}: {1}, {2:N1} MH/s, {3} W, sweep {4}" -f $c.name, $c.state, [double]$c.hash_now, $c.power_w, $c.sweep_state) } +} catch { Say ("api/state not read: " + $_.Exception.Message) } + +$out = Join-Path $env:IGNEUM_JOB_DIR 'shots' +New-Item -ItemType Directory -Force -Path $out | Out-Null +$profileDir = Join-Path $env:IGNEUM_JOB_DIR 'edge-profile' + +$shots = @() +foreach ($theme in @('dark', 'light')) { + foreach ($page in @('mine', 'earnings', 'prove', 'settings')) { $shots += @{ name = "pc1-$page-$theme"; page = $page; w = 1440; h = 900; dark = ($theme -eq 'dark') } } + $shots += @{ name = "pc1-mine-phone-$theme"; page = 'mine'; w = 390; h = 844; dark = ($theme -eq 'dark') } + $shots += @{ name = "pc1-settings-phone-$theme"; page = 'settings'; w = 390; h = 844; dark = ($theme -eq 'dark') } +} + +foreach ($s in $shots) { + $file = Join-Path $out ($s.name + '.png') + $edgeArgs = @('--headless=new', '--disable-gpu', '--hide-scrollbars', '--no-first-run', '--disable-extensions', '--disable-features=WebContentsForceDark', + "--user-data-dir=$profileDir", '--force-device-scale-factor=2', '--virtual-time-budget=10000', ('--window-size=' + $s.w + ',' + $s.h), "--screenshot=$file") + if ($s.dark) { $edgeArgs += '--force-dark-mode' } + $edgeArgs += ($base + '?page=' + $s.page) + $p = Start-Process -FilePath $edge -ArgumentList $edgeArgs -Wait -PassThru -NoNewWindow + if (Test-Path $file) { Say ("shot {0} {1} bytes" -f $s.name, (Get-Item $file).Length) } else { Say ("shot {0} FAILED, edge exit {1}" -f $s.name, $p.ExitCode) } +} + +$relay = 'https://relay.igneum.network/api/relay?fn=drop' +$sent = 0 +foreach ($png in Get-ChildItem $out -Filter '*.png') { + try { + $bytes = [IO.File]::ReadAllBytes($png.FullName) + if ($bytes.Length -gt 4000000) { Say ("not sent {0}: {1} bytes is over the raw cap" -f $png.Name, $bytes.Length); continue } + $hdr = @{ 'x-igneum-key' = $env:IGNEUM_INTAKE_KEY; 'x-file-name' = $png.Name; 'x-title' = ('site-capture ' + $png.Name); 'x-from' = 'pc1' } + $r = Invoke-RestMethod -Uri $relay -Method Post -Headers $hdr -Body $bytes -ContentType 'image/png' -TimeoutSec 120 + Say ("sent {0} as relay item {1}" -f $png.Name, $r.id) + $sent++ + } catch { Say ("not sent {0}: {1}" -f $png.Name, $_.Exception.Message) } +} +Say ("done: {0} of {1} shots on the relay" -f $sent, $shots.Count) +if ($sent -lt $shots.Count) { exit 1 } diff --git a/site/build.mjs b/site/build.mjs index 1e16aa94..ac4fae63 100644 --- a/site/build.mjs +++ b/site/build.mjs @@ -255,7 +255,7 @@ const PRODUCT = { full: 'Igneum Ember', name: 'Ember', app: 'Igneum Miner', - caption: 'Igneum Ember (the app is still labelled Igneum Miner until 0.3.6)', + caption: 'Igneum Ember (the app window still says Igneum Miner)', }; function stampProduct(html, file) { return html.replace(/[^<]*<\/span>/g, (m, k) => { diff --git a/site/downloads.json b/site/downloads.json index d36b3c69..f78ff42d 100644 --- a/site/downloads.json +++ b/site/downloads.json @@ -3,27 +3,27 @@ "files": { "miner-hive": { "alias": "/public/igneum-miner-hive.tar.gz", - "file": "igneum-hive-0.3.9.tar.gz", - "path": "/dl/public/igneum-hive-0.3.9.tar.gz", - "sha256": "7a58a30fd47c9ecb3d4aeaa0c0a464550f7e4b2b33eacf87512f1b72164c829e", - "size": 24179978, - "version": "0.3.9" + "file": "igneum-hive-0.3.14.tar.gz", + "path": "/dl/public/igneum-hive-0.3.14.tar.gz", + "sha256": "c4699f2487580dcf06b5c22a36a2eb8383a3307b6137699c76c45eefebdd4c88", + "size": 24659507, + "version": "0.3.14" }, "miner-mac": { "alias": "/public/igneum-miner-mac.dmg", - "file": "Igneum-Miner-0.3.10.dmg", - "path": "/dl/public/Igneum-Miner-0.3.10.dmg", - "sha256": "151687c5672553c571af7224a8e4228348135b8a313fc89e6641db7ae21c85b3", - "size": 41383375, - "version": "0.3.10" + "file": "Igneum-Miner-0.3.14.dmg", + "path": "/dl/public/Igneum-Miner-0.3.14.dmg", + "sha256": "e9e4c24db81a262a36b6bac11609ce6d24ed03220973da4142df935d41fc4e40", + "size": 41892337, + "version": "0.3.14" }, "miner-windows": { "alias": "/public/igneum-miner-windows.exe", - "file": "Igneum-Miner-Setup-0.3.10.exe", - "path": "/dl/public/Igneum-Miner-Setup-0.3.10.exe", - "sha256": "24e58849f2b517e8c5579455e8c9d8376ff7dd27052f458ef91913cbc48abc88", - "size": 49858273, - "version": "0.3.10" + "file": "Igneum-Miner-Setup-0.3.14.exe", + "path": "/dl/public/Igneum-Miner-Setup-0.3.14.exe", + "sha256": "08e75effc732f88bca11006b3b7cdf2bc533576f56819f79509fee47a8f5dd59", + "size": 45416619, + "version": "0.3.14" }, "wallet-mac": { "alias": "/public/igneum-wallet-mac.dmg", @@ -34,5 +34,5 @@ "version": "0.1.4" } }, - "updated": "2026-10-05T21:52:34Z" + "updated": "2026-10-06T17:48:20Z" } diff --git a/site/img/miner-dashboard-light.webp b/site/img/miner-dashboard-light.webp new file mode 100644 index 00000000..42aebc0a Binary files /dev/null and b/site/img/miner-dashboard-light.webp differ diff --git a/site/img/miner-dashboard.webp b/site/img/miner-dashboard.webp index ade0dafc..818904d8 100644 Binary files a/site/img/miner-dashboard.webp and b/site/img/miner-dashboard.webp differ diff --git a/site/img/miner-earnings.webp b/site/img/miner-earnings.webp new file mode 100644 index 00000000..fb49ee2e Binary files /dev/null and b/site/img/miner-earnings.webp differ diff --git a/site/img/miner-phone.webp b/site/img/miner-phone.webp new file mode 100644 index 00000000..1034621b Binary files /dev/null and b/site/img/miner-phone.webp differ diff --git a/site/img/miner-prove.webp b/site/img/miner-prove.webp new file mode 100644 index 00000000..e83ab8bf Binary files /dev/null and b/site/img/miner-prove.webp differ diff --git a/site/img/miner-settings.webp b/site/img/miner-settings.webp new file mode 100644 index 00000000..4b4b23ab Binary files /dev/null and b/site/img/miner-settings.webp differ diff --git a/site/index.html b/site/index.html index 7f3d2473..92221eb1 100644 --- a/site/index.html +++ b/site/index.html @@ -488,8 +488,8 @@ pre{margin:0;font-family:var(--f-mono);font-size:13px;line-height:1.6;color:var(
Igneum Miner
- The miner dashboard: hash rate, blocks found, node synced, a countdown to the next program, the block chart, the Apple M5 Max card mining, node and finality panels -
Igneum Ember (the app is still labelled Igneum Miner until 0.3.6) on an Apple M5 Max, live devnet, 5 Oct 2026.
+ The Mine page of Igneum Miner 0.3.14: the Start mining button, the live total, the card row for an Apple M5 Max with its state word, Tune button and switch, the Tuning card with Efficiency, Balanced and Maximum, the node as one line, and the activity strip +
Igneum Ember (the app window still says Igneum Miner) 0.3.14 on an Apple M5 Max, paused, live devnet, 6 Oct 2026.
@@ -497,11 +497,12 @@ pre{margin:0;font-family:var(--f-mono);font-size:13px;line-height:1.6;color:var(
NVIDIA, AMD, Apple siliconFound by itself. One worker per card, several identities each.
A new program every hour, no pauseCompiled ahead and swapped in 0.01 ms on the live devnet, 0 rejected blocks.
Signed updates at a safe momentThe card keeps mining through the download. The old version comes back if the new one fails to start.
-
Tunes itself, in publicKernel variants raced every hour, hash per watt swept, every number in the bench table.
+
Four pages: Mine, Earnings, Prove, SettingsEvery card is one row: rate, watts, MH per watt, pounds a day at your electricity price, a Tune button. The node is one line.
+
Ember Tune, measuredAn RTX 5090 from 311 W to 227 W for 0.15% of its rate; an RTX 4070 from 106 W to 76 W for none (PC 1, 6 Oct 2026). Every number in the bench table.
- Windows v0.3.13 · 45.4 MB - macOS v0.3.13 · 41.9 MB + Windows v0.3.14 · 45.4 MB + macOS v0.3.14 · 41.9 MB Linux · HiveOS

Devnet: coins have no value and the chain may be reset.

@@ -665,7 +666,7 @@ pre{margin:0;font-family:var(--f-mono);font-size:13px;line-height:1.6;color:var( - +