igneum/site/app.html
igneum-labs 95e5f60747 site-redesign: the full-site redesign on our content, 22 pages served
The package's design system, layouts and interactions on our tokens and self-hosted fonts (site/site.css section 10),
our facts, numbers, records and live services on every page. The home page: the GPU hero (site/hero-scene.js, continuous
while in view, labelled as drawn), the live DAG panel on scenes/feed.js and live-dag.js 2.0.2, three reasons, the
economics split, the download row with the OS marks, the ledger line. The miner page: the download layout, platform
tabs stamped from the live download index with sha256, the steps, the card table, the fee section (the one source of
/dev-fee), the FAQ. The wallet page in the package's wallet-hero layout, the window slot ready for the wallet redesign.
The secondary pages rendered by the build from one source each: /claims and /randomx from the litepaper's sections,
/dev-fee from the miner's fee section, /provenance from docs/provenance.md through the scrub, /journey from
journey.json; /benchmarks rewrites to /miners, /connect redirects to /metamask. The generated pages (bench, bench
table, ledger) restyled onto the page hero and the docs layout with a section filter. The footer's secondary links point
at the real pages. The copy pass on every served page (docs/plans/site-copy-pass.md). The package's data tests and the
hero loop test in the gate (tools/site-redesign). No sample data is served; the package's review chrome is not.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:30:18 +00:00

446 lines
36 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Ember, the app</title>
<meta name="description" content="The app you mine with: your rate, what it costs a day, every card tuned by Ember, and the chain drawn live with your own blocks ringed. Overview, Cards, Earnings, Prove and Settings, light and dark.">
<link rel="canonical" href="https://igneum.network/app">
<meta name="theme-color" content="#0C0C0E">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum Ember, the app">
<meta property="og:description" content="The app you mine with: your rate, what it costs a day, every card tuned by Ember, and the chain drawn live with your own blocks ringed. Overview, Cards, Earnings, Prove and Settings, light and dark.">
<meta property="og:url" content="https://igneum.network/app">
<meta property="og:image" content="https://igneum.network/og.png?v=3">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum Ember, the app">
<meta name="twitter:description" content="The app you mine with: your rate, what it costs a day, every card tuned by Ember, and the chain drawn live with your own blocks ringed. Overview, Cards, Earnings, Prove and Settings, light and dark.">
<meta name="twitter:image" content="https://igneum.network/og.png?v=3">
<meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Crect width='1024' height='1024' fill='%230C0C0E'/%3E%3Cg transform='translate(166.95 166.95) scale(6.901)'%3E%3Cpolygon points='50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34' fill='%23F2541B'/%3E%3Cpolygon points='50,42 59,58 50,82 41,58' fill='%230C0C0E'/%3E%3C/g%3E%3C/svg%3E" type="image/svg+xml">
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
<link rel="icon" href="/icon-192.png" type="image/png" sizes="192x192">
<link rel="icon" href="/icon-512.png" type="image/png" sizes="512x512">
<link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180">
<link rel="manifest" href="/site.webmanifest">
<!-- head:start -->
<link rel="preload" href="/fonts/unbounded-900.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/plex-sans-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/site.css">
<style>
/* Shared by every page: the head partial, injected by the build between the head markers. Edit the partial, not the page. */
/* Fonts, self-hosted (latin subsets, OFL): Unbounded 500/700/900, IBM Plex Sans 400/500/600, IBM Plex Mono 400/500. Fallbacks carry size and ascent overrides so the swap does not move the layout. The tokens, type and components are in /site.css (docs/plans/site-ui-3.md). */
@font-face{font-family:'Unbounded';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/unbounded-500.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Unbounded';font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/unbounded-700.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Unbounded';font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/unbounded-900.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/plex-sans-400.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/plex-sans-500.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/plex-sans-600.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/plex-mono-400.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/plex-mono-500.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Unbounded Fallback';src:local('Arial Black'),local('Arial-Black'),local('Impact');size-adjust:114%;ascent-override:87.5%;descent-override:21.5%;line-gap-override:0%}
@font-face{font-family:'Plex Sans Fallback';src:local('Arial'),local('Helvetica Neue'),local('Helvetica');size-adjust:100.5%;ascent-override:102%;descent-override:27.4%;line-gap-override:0%}
@font-face{font-family:'Plex Mono Fallback';src:local('Courier New'),local('Menlo');size-adjust:100%;ascent-override:102.5%;descent-override:27.5%;line-gap-override:0%}
</style>
<script>
/* theme before first paint: the footer control stores "light" or "dark" under igneum-theme; nothing stored means the system setting */
(function(){try{var t=localStorage.getItem("igneum-theme");if(t==="light"||t==="dark")document.documentElement.setAttribute("data-theme",t);}catch(e){}})();
</script>
<!-- head:end -->
<style>
/* app page block (7 Oct 2026: the Igneum Ember app as an experience); tokens and components are in /site.css */
.phones{display:grid;grid-template-columns:1fr;gap:var(--s-5);align-items:start}
@media (min-width:900px){.phones{grid-template-columns:minmax(0,1fr) 300px 300px;align-items:center}}
.scene{position:relative}
#dag{display:block;width:100%;height:clamp(300px,42vw,460px);border-radius:var(--r-row);background:var(--row);border:1px solid var(--line);touch-action:pan-y}
.tip{position:absolute;left:0;top:0;pointer-events:none;background:var(--graphite);border:1px solid var(--line-2);border-radius:var(--r-row);padding:10px 12px;font:400 12px/1.5 var(--f-mono);color:var(--ink-2);white-space:nowrap;z-index:5}
.tip[hidden]{display:none}
.emb td:first-child{white-space:nowrap;color:var(--bone);font-weight:600}
/* the phone captures exist in the dark theme only so far; the section waits for its light pair */
@media (prefers-color-scheme:light){:root:not([data-theme="dark"]) .dark-only{display:none}}
:root[data-theme="light"] .dark-only{display:none}
</style>
</head>
<body class="has-dl-bar">
<!-- nav:start -->
<a class="skip" href="#main">Skip to content</a>
<nav class="nav" aria-label="Main">
<div class="wrap">
<a href="/" class="brand" aria-label="Igneum home">
<svg class="mark" viewBox="0 0 1024 1024" width="28" height="28" aria-hidden="true"><rect width="1024" height="1024" rx="160" fill="#0C0C0E"></rect><g transform="translate(166.95 166.95) scale(6.901)"><polygon points="50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34" fill="#F2541B"></polygon><polygon points="50,42 59,58 50,82 41,58" fill="#0C0C0E"></polygon></g></svg>
<span class="word">IGNEUM</span>
</a>
<div class="links" id="nav-links">
<a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app" aria-current="page">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
</div>
<a href="/miner#get" class="btn primary small cta">Download</a>
<button class="burger" id="nav-burger" type="button" aria-expanded="false" aria-controls="nav-sheet" aria-label="Open the menu" aria-haspopup="true"><span class="bars" aria-hidden="true"></span></button>
<div class="nav-sheet" id="nav-sheet">
<a href="/litepaper" data-nav="litepaper">Litepaper</a>
<a href="/miner" data-nav="miner">Miner</a>
<a href="/app" data-nav="app">App</a>
<a href="/wallet" data-nav="wallet">Wallet</a>
<a href="/live" data-nav="live">Live devnet</a>
<a href="/ledger" data-nav="ledger">Ledger</a>
<a href="/miner#get" class="btn primary">Download</a>
</div>
</div>
</nav>
<script>
(function(){
// the menu: open on the button, closed by any link, Escape (focus back on the button) or a resize past 900 px
var n=document.querySelector('.nav'),b=document.getElementById('nav-burger'),s=document.getElementById('nav-sheet');if(!n||!b||!s)return;
function set(o){n.classList.toggle('open',o);b.setAttribute('aria-expanded',o?'true':'false');b.setAttribute('aria-label',o?'Close the menu':'Open the menu');document.documentElement.style.overflow=o?'hidden':'';}
b.addEventListener('click',function(){set(!n.classList.contains('open'));});
s.addEventListener('click',function(e){if(e.target.closest('a'))set(false);});
document.addEventListener('keydown',function(e){if(e.key==='Escape'&&n.classList.contains('open')){set(false);b.focus();}});
var mq=window.matchMedia('(min-width:901px)');if(mq.addEventListener)mq.addEventListener('change',function(){set(false);});
})();
</script>
<!-- nav:end -->
<main id="main">
<header class="phero" id="top">
<div class="wrap">
<div>
<div class="breadcrumb"><a href="/">Igneum</a><span>/</span><span>The app</span></div>
<div class="eyebrow"><span class="line"></span><span data-product="full">Igneum Ember</span> · the app</div>
<h1>The app you <span class="accent">mine with.</span></h1>
<p class="lead">Your rate, what it costs a day, and the chain drawn live with your own blocks ringed. One window, four pages, every card one row.</p>
<div class="cta"><a href="/miner#get" class="btn primary">Download the miner</a><a href="#chain" class="btn">The chain on your screen</a></div>
<div class="os"><span>Windows</span><span>macOS</span><span>Linux · HiveOS</span><span>light and dark</span></div>
</div>
<figure class="frame glow">
<div class="bar"><i></i><i></i><i></i><b>Overview</b></div>
<img src="/img/app-overview-dark.webp" width="1440" height="912" class="img-dark" alt="The Overview page of 0.3.16: an RTX 5090 at 103 MH/s and 317 W, 0.32 MH/W, 62 blocks this run and 91,521 lifetime, the Stop mining button, the chain drawn live with this rig's blocks ringed and locked checkpoints, the node synced with 5 peers, the activity log" fetchpriority="high" decoding="async">
<img src="/img/app-overview-light.webp" width="1440" height="912" class="img-light" alt="The Overview page of 0.3.16 in light mode: an RTX 5090 at 103 MH/s and 317 W, the chain drawn live with this rig's blocks ringed" fetchpriority="high" decoding="async">
<figcaption>0.3.16, rendered from the RTX 5090 Windows rig&rsquo;s live state at 23:33 UK, 6 October 2026. No electricity price is set on that rig, so the pounds cell asks for one.</figcaption>
</figure>
</div>
</header>
<section id="overview" class="sec">
<div class="wrap">
<div class="feature">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Overview · Mac</b></div>
<img src="/img/app-overview-mac-dark.webp" width="1440" height="900" class="img-dark" alt="The Overview page on an Apple M5 Max: 18.3 MH/s, 6,789 blocks this run, the chain drawn live with this Mac's blocks in the lane marked you, locked checkpoints at 71% of weight, the node synced with 4 peers" loading="lazy" decoding="async">
<img src="/img/app-overview-mac-light.webp" width="1440" height="1259" class="img-light" alt="The Overview page in light mode: 511 MH/s from one of three cards mining, 629 W, £4.23 a day of electricity, 6,784 blocks this run, the chain drawn live with this rig's blocks marked you, the node line and the activity log" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">An Apple M5 Max mining at 18.3 MH/s, from the app in development.</span><span class="cap-light">A three-card rig at 511 MH/s, from the app in development.</span></figcaption>
</figure>
<div>
<div class="eyebrow">01 · Overview</div>
<h2>The number, then the chain</h2>
<p>One big number: your hash rate. Beside it, watts, hashes per watt, and what the electricity costs a day at your price. Then the chain itself, as it grows.</p>
<ul class="lines">
<li><strong>Your blocks, ringed</strong>Every block the network makes, one lane per miner, yours marked. A locked checkpoint rings the blocks it covers.</li>
<li><strong>The node, one line</strong>Synced, peers, blocks, read N seconds ago. Details opens the chain numbers in place.</li>
<li><strong>Activity</strong>Blocks found, tunes finished, updates installed, with the time of each.</li>
</ul>
</div>
</div>
</div>
</section>
<section id="cards" class="sec">
<div class="wrap">
<div class="feature flip">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Cards</b></div>
<img src="/img/app-cards-dark.webp" width="1440" height="1381" class="img-dark" alt="The Cards page: Ember Tune with Efficiency, Balanced and Maximum goals and the watts it saves; one row per card with its rate, watts, hashes per watt, cost a day and temperature; the RTX 5090's details open with its power cap, goal, Retune and the tune curve of hash rate against power" loading="lazy" decoding="async">
<img src="/img/app-cards-light.webp" width="1440" height="912" class="img-light" alt="The Cards page of 0.3.16 in light mode: Ember Tune, the RTX 5090 at 103 MH/s, 322 to 317 W, 68 degrees, its tune line and Retune button; the integrated AMD graphics off" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">The Cards page with a card&rsquo;s details open, from the app in development.</span><span class="cap-light">0.3.16, rendered from the RTX 5090 Windows rig&rsquo;s live state at 23:33 UK, 6 October 2026.</span></figcaption>
</figure>
<div>
<div class="eyebrow">02 · Cards</div>
<h2>Every card, tuned by Ember</h2>
<p>One row per card: rate, watts, hashes per watt, pounds a day, temperature, a Tune button and a switch. Ember Tune walks each card through its power steps and keeps the point with the most hashes per watt.</p>
<ul class="lines">
<li><strong>Three goals</strong>Efficiency, Balanced, Maximum. Set once for every card, or per card under its chevron.</li>
<li><strong>Under the chevron</strong>The power cap, the goal, the last tune&rsquo;s curve of rate against watts, how many miners the card runs as.</li>
<li><strong>Power control, one approval</strong>Setting an NVIDIA cap needs administrator rights on Windows. The app asks once; every cap after that is set with no prompt.</li>
</ul>
</div>
</div>
<div class="tbl emb" style="margin-top:var(--s-5)"><table>
<thead><tr><th>Ember Tune, measured 6 Oct 2026</th><th class="num">Untuned</th><th class="num">Tuned</th><th class="num">Saved</th></tr></thead>
<tbody>
<tr><td>RTX 5090</td><td class="num">311.0 W · 127.9 MH/s · 0.411 MH/W</td><td class="num">226.8 W · 127.7 MH/s · 0.563 MH/W</td><td class="num">84 W, £0.56 a day at 28p/kWh</td></tr>
<tr><td>RTX 4070</td><td class="num">106.0 W · 28.72 MH/s · 0.271 MH/W</td><td class="num">75.6 W · 28.78 MH/s · 0.381 MH/W</td><td class="num">30 W, £0.20 a day at 28p/kWh</td></tr>
</tbody>
</table></div>
<p class="note">Ember run 6 on the three-card Windows rig. The pounds are arithmetic from the saved watts at 28p per kWh; the app uses your price. <a href="/bench">The log</a>.</p>
</div>
</section>
<section id="chain" class="sec">
<div class="wrap">
<div class="sec-head">
<div class="eyebrow">03 · The chain, live</div>
<h2>The chain on your screen</h2>
<p>This is the live devnet, drawn by the same code the app ships. Every square is a real block; a lane per miner; a ring where a checkpoint locked. In the app, your own lane is marked.</p>
</div>
<div class="card viz">
<div class="viz-head">
<div class="state" id="dag-state"><span class="dot off"></span>connecting to the devnet observer</div>
<div class="viz-stats mono"><span>on screen <b id="c-screen">0</b></span><span>last lock <b id="c-locked">pending</b></span><span>proven <b id="c-proven">pending</b></span><button type="button" class="btn small" id="dag-pause">Pause</button></div>
</div>
<div class="scene"><canvas id="dag" aria-label="The devnet's block DAG, live: blocks by time and miner lane, parent edges, the selected chain, checkpoint bands with their lock weight, proofs filling blocks as segments are paid"></canvas><div class="tip" id="dag-tip" hidden></div><div class="chip-zoom" id="dag-chip" hidden>scroll to zoom · Esc to release</div></div>
<div class="legend">
<span><i class="sw" style="border:2px solid var(--line-2)"></i>pending</span>
<span><i class="sw" style="border:2px solid var(--bone)"></i>included</span>
<span><i class="sw" style="border:2px solid var(--ember)"></i>selected chain</span>
<span><i class="sw" style="border:2px solid var(--line-2);opacity:.45"></i>excluded</span>
<span><i class="sw" style="background:var(--ember)"></i>proven</span>
<span><i class="sw" style="border:3px solid var(--ember);border-radius:50%;background:transparent"></i>locked checkpoint</span>
</div>
<p class="note" style="margin-top:var(--s-3)"><span id="c-window">120 s of blocks on screen</span>. Hover or tap a block for its hash, miner and proof state. Ctrl or cmd and scroll, a pinch, or a click into the scene zooms the window.</p>
</div>
</div>
</section>
<section id="earnings" class="sec">
<div class="wrap">
<div class="feature">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Earnings</b></div>
<img src="/img/app-earnings-dark.webp" width="1440" height="908" class="img-dark" alt="The Earnings page of 0.3.16: pounds earned with the devnet reason, IGN from proofs, 23,056 blocks lifetime, electricity with no card reporting its draw, the dev fee switch, the rewards address with Copy, Change address, Show my key and Open the wallet" loading="lazy" decoding="async">
<img src="/img/app-earnings-light.webp" width="1440" height="908" class="img-light" alt="The Earnings page of 0.3.16 in light mode" loading="lazy" decoding="async">
<figcaption>0.3.16 on the team&rsquo;s Apple M5 Max, paused, 6 October 2026. Pounds earned reads 0.00 on devnet and says why.</figcaption>
</figure>
<div>
<div class="eyebrow">04 · Earnings</div>
<h2>Money first</h2>
<p>What you made, where it goes. IGN from blocks and from proofs, the electricity at your price, and the address every block pays.</p>
<ul class="lines">
<li><strong>The dev fee switch</strong>1 block in 100 pays the people who make this app. The network itself takes nothing. The switch turns it off.</li>
<li><strong>An address made on this machine</strong>Copy it, change it, or show the key. Nothing leaves the machine unless you copy it.</li>
<li><strong>Open the wallet</strong>Your balance is in <a href="/wallet">the wallet</a>, which imports the miner&rsquo;s key with one click.</li>
</ul>
</div>
</div>
</div>
</section>
<section id="prove" class="sec">
<div class="wrap">
<div class="feature flip">
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Prove</b></div>
<img src="/img/app-prove-dark.webp" width="1440" height="908" class="img-dark" alt="The Prove page of 0.3.16: the Prove on this machine switch, one sentence per card on what it can prove, one line of counts, assigned, proven, paid and IGN, and Details" loading="lazy" decoding="async">
<img src="/img/app-prove-light.webp" width="1440" height="908" class="img-light" alt="The Prove page of 0.3.16 in light mode" loading="lazy" decoding="async">
<figcaption>0.3.16 on the team&rsquo;s Apple M5 Max, 6 October 2026. Apple silicon proves on the CPU, slowly; a 24 GB NVIDIA card proves the full shard.</figcaption>
</figure>
<div>
<div class="eyebrow">05 · Prove</div>
<h2>One switch. The same card proves.</h2>
<p>Every block is turned into a short proof, in pieces called shards. Your cards prove the shards the chain assigns to them and earn IGN for each one.</p>
<ul class="lines">
<li><strong>One sentence per card</strong>What it can prove and how. A 24 GB NVIDIA card proves the full shard; a 32 GB card mines and proves.</li>
<li><strong>One line of counts</strong>Assigned, proven, paid, IGN. Details holds the verifier, the program id and the segments.</li>
</ul>
</div>
</div>
</div>
</section>
<section id="settings" class="sec">
<div class="wrap">
<div class="sec-head">
<div class="eyebrow">06 · Settings</div>
<h2>Plain rows, one sentence each</h2>
</div>
<figure class="frame">
<div class="bar"><i></i><i></i><i></i><b>Settings · Tuning</b></div>
<img src="/img/app-settings-dark.webp" width="1440" height="450" class="img-dark" alt="The Tuning card of Settings in 0.3.16: the goal at Balanced, the Ember Tune, Power control and Fine tuning switches, each with one sentence, and the electricity price in pence per kWh" loading="lazy" decoding="async">
<img src="/img/app-settings-light.webp" width="1440" height="450" class="img-light" alt="The Tuning card of Settings in 0.3.16, light mode" loading="lazy" decoding="async">
<figcaption>0.3.16 on the team&rsquo;s Apple M5 Max, 6 October 2026.</figcaption>
</figure>
<ul class="lines c4" style="margin-top:var(--s-4)">
<li><strong>Electricity price</strong>Pence per kWh, set once. Every pound figure in the app uses it.</li>
<li><strong>Start at login</strong>Opens when you sign in and keeps mining in the background.</li>
<li><strong>Updates by itself</strong>Signed, downloaded in the background, installed at a quiet moment, never mid-program.</li>
<li><strong>Logs</strong>Copy the last lines the node and the miner wrote, for a support message.</li>
</ul>
</div>
</section>
<section id="phone" class="sec">
<div class="wrap">
<div class="phones">
<div>
<div class="eyebrow">07 · Any width</div>
<h2>Under 720 px, the rail becomes a tab bar</h2>
<p style="color:var(--ink-2)">The same window on a narrow screen: the big button, the number, the chain, then the tabs.</p>
</div>
<figure class="frame phone">
<div class="bar"><i></i><i></i><i></i><b>390 px</b></div>
<img src="/img/app-phone-overview.webp" width="780" height="1688" class="img-dark" alt="The Overview page in a 390 pixel wide window: the rate, the Start mining button, the chain live, and a bottom tab bar with Overview, Cards, Earnings, Prove, Settings and Logs" loading="lazy" decoding="async">
<img src="/img/app-phone-overview-light.webp" width="780" height="1688" class="img-light" alt="The Overview page of 0.3.16 in a 390 pixel wide window, light mode: 103 MH/s, the Stop mining button, the chain live and the bottom tab bar" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">0.3.16 on the team’s Apple M5 Max, paused.</span><span class="cap-light">0.3.16, rendered from the RTX 5090 Windows rig’s live state at 23:33 UK.</span></figcaption>
</figure>
<figure class="frame phone">
<div class="bar"><i></i><i></i><i></i><b>390 px</b></div>
<img src="/img/app-phone-cards.webp" width="780" height="1688" class="img-dark" alt="The Cards page in a 390 pixel wide window: Ember Tune and the card row stacked, with the bottom tab bar" loading="lazy" decoding="async">
<img src="/img/app-phone-cards-light.webp" width="780" height="1688" class="img-light" alt="The Cards page of 0.3.16 in a 390 pixel wide window, light mode: Ember Tune, the RTX 5090 row and the bottom tab bar" loading="lazy" decoding="async">
<figcaption><span class="cap-dark">0.3.16 on the team’s Apple M5 Max, paused.</span><span class="cap-light">0.3.16, rendered from the RTX 5090 Windows rig’s live state at 23:33 UK.</span></figcaption>
</figure>
</div>
</div>
</section>
<section id="keeps" class="sec">
<div class="wrap">
<div class="sec-head">
<div class="eyebrow">08 · It keeps mining</div>
<h2>Built to be left alone</h2>
<p>Measured against a worker that misbehaves on command, 4 October 2026: recoveries in seconds. <a href="/bench">The log</a>.</p>
</div>
<ul class="lines">
<li><strong>Hourly program, no pause</strong>The next program compiles in the background and swaps at the boundary: 0.01 ms on Metal, 0.00 ms on CUDA, 0 rejected blocks.</li>
<li><strong>Watchdog per card</strong>No status line for 90 s, or a rate of 0 for 60 s while synced: the miner restarts once. Again inside five minutes, the card is marked faulted and the others keep mining. Measured: 91.0 s back to mining.</li>
<li><strong>Watchdog per node</strong>A node silent for 120 s is restarted by the app. Measured: silent node to mining again in 160.0 s.</li>
<li><strong>Restart in order</strong>Miners first, then the node, on quit and on update. What crashes comes back.</li>
<li><strong>Clock check</strong>Over 5 s out, a warning; over 10 s, Start is blocked and a Sync clock button appears. A slow clock once kept a node silently dead for 12 minutes.</li>
<li><strong>Signed, over the air</strong>An Ed25519 key compiled into the app checks the manifest before the app reads it. If the new version fails to start twice, the previous one comes back by itself.</li>
</ul>
</div>
</section>
<section id="get" class="sec">
<div class="wrap">
<div class="sec-head">
<div class="eyebrow">Downloads</div>
<h2>Get the miner</h2>
<p>Download only from this domain. Nobody from Igneum will ask for your seed.</p>
</div>
<div class="grid c2">
<div class="dl-list" style="margin:0">
<a data-dl="miner-windows" href="https://dl.igneum.network/public/igneum-miner-windows.exe" class="primary">Windows <span data-dl-meta="miner-windows">v0.3.19 · 62.7 MB</span></a>
<a data-dl="miner-mac" href="https://dl.igneum.network/public/igneum-miner-mac.dmg">macOS <span data-dl-meta="miner-mac">v0.3.19 · 42.1 MB</span></a>
<a href="/miner#hive">Linux · HiveOS <span>the tarball and the flight sheet, on the miner page</span></a>
</div>
<div>
<p class="yourcard" data-yourcard>Your card: pending</p>
<p class="notice" data-testnet-notice>Public testnet: not yet open; the devnet build is here for people who want to look.</p>
<p class="notice" data-devnet-notice><b>Devnet.</b> Coins have no value and the chain may be reset.</p>
</div>
</div>
</div>
</section>
</main>
<div class="band">
<div class="wrap">
<div>
<h2>The miner pays the wallet.</h2>
<p>Install the miner, press Start, and the address it makes is the one the wallet imports with one click.</p>
</div>
<div class="cta"><a href="/miner" class="btn dark">The miner</a><a href="/wallet" class="btn dark">The wallet</a></div>
</div>
</div>
<a class="dl-bar" href="/miner#get"><b>Download the miner</b><span data-dl-meta="miner-windows">v0.3.19 · 62.7 MB</span></a>
<!-- footer:start -->
<footer class="foot">
<div class="wrap">
<div class="foot-grid">
<div class="foot-brand">
<a href="/" class="brand" aria-label="Igneum home"><svg class="mark" viewBox="0 0 1024 1024" width="26" height="26" aria-hidden="true"><rect width="1024" height="1024" rx="160" fill="#0C0C0E"></rect><g transform="translate(166.95 166.95) scale(6.901)"><polygon points="50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34" fill="#F2541B"></polygon><polygon points="50,42 59,58 50,82 41,58" fill="#0C0C0E"></polygon></g></svg><span class="word">IGNEUM</span></a>
<p>Mined by GPUs. Proven by fire.</p>
<div class="social" aria-label="Igneum elsewhere">
<a href="https://github.com/igneum-network/spec" target="_blank" rel="noopener" aria-label="Igneum on GitHub: the spec, the vectors and the issues"><svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true"><path d="M12 .5C5.7.5.5 5.7.5 12c0 5.1 3.3 9.4 7.9 10.9.6.1.8-.3.8-.6v-2.1c-3.2.7-3.9-1.4-3.9-1.4-.5-1.3-1.3-1.7-1.3-1.7-1-.7.1-.7.1-.7 1.2.1 1.8 1.2 1.8 1.2 1 1.8 2.7 1.3 3.4 1 .1-.8.4-1.3.7-1.6-2.6-.3-5.3-1.3-5.3-5.7 0-1.3.5-2.3 1.2-3.1-.1-.3-.5-1.5.1-3.1 0 0 1-.3 3.2 1.2.9-.3 1.9-.4 2.9-.4s2 .1 2.9.4c2.2-1.5 3.2-1.2 3.2-1.2.6 1.6.2 2.8.1 3.1.8.8 1.2 1.8 1.2 3.1 0 4.4-2.7 5.4-5.3 5.7.4.4.8 1.1.8 2.2v3.2c0 .3.2.7.8.6 4.6-1.5 7.9-5.8 7.9-10.9C23.5 5.7 18.3.5 12 .5z"></path></svg></a>
<a href="https://discord.gg/igneum" target="_blank" rel="noopener" aria-label="The Igneum Discord"><svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true"><path d="M19.6 5.3A17 17 0 0 0 15.4 4l-.2.4a15.6 15.6 0 0 1 3.9 1.9 13.6 13.6 0 0 0-14.2 0A15.6 15.6 0 0 1 8.8 4.4L8.6 4a17 17 0 0 0-4.2 1.3C1.8 9.2 1.1 13 1.4 16.7a17.1 17.1 0 0 0 5.2 2.6l1.1-1.8a10.8 10.8 0 0 1-1.7-.8l.4-.3a12.2 12.2 0 0 0 11.2 0l.4.3-1.7.8 1.1 1.8a17 17 0 0 0 5.2-2.6c.4-4.3-.7-8-3-11.4zM8.7 14.4c-1 0-1.8-.9-1.8-2.1s.8-2.1 1.8-2.1 1.9 1 1.8 2.1c0 1.2-.8 2.1-1.8 2.1zm6.6 0c-1 0-1.8-.9-1.8-2.1s.8-2.1 1.8-2.1 1.9 1 1.8 2.1c0 1.2-.8 2.1-1.8 2.1z"></path></svg></a>
<a data-social="reddit" href="https://www.reddit.com/user/Igneum_network/" target="_blank" rel="noopener" aria-label="Igneum on Reddit"><svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true"><path d="M22 12.1a2.2 2.2 0 0 0-3.7-1.6 10.8 10.8 0 0 0-5.8-1.8l1-4.6 3.2.7a1.5 1.5 0 1 0 .2-.9l-3.6-.8a.5.5 0 0 0-.5.4l-1.1 5.2a10.8 10.8 0 0 0-5.9 1.8A2.2 2.2 0 1 0 3.4 14a4.3 4.3 0 0 0 0 .7c0 3.4 3.9 6.1 8.6 6.1s8.6-2.7 8.6-6.1a4.3 4.3 0 0 0 0-.7 2.2 2.2 0 0 0 1.4-1.9zM7 13.6a1.5 1.5 0 1 1 1.5 1.5A1.5 1.5 0 0 1 7 13.6zm8.6 4.1a5.7 5.7 0 0 1-3.6 1.1 5.7 5.7 0 0 1-3.6-1.1.4.4 0 0 1 .6-.6 4.9 4.9 0 0 0 3 .9 4.9 4.9 0 0 0 3-.9.4.4 0 0 1 .6.6zm-.3-2.6a1.5 1.5 0 1 1 1.5-1.5 1.5 1.5 0 0 1-1.5 1.5z"></path></svg></a>
</div>
</div>
<nav class="foot-col" aria-label="Read">
<div class="eyebrow">Read</div>
<a href="/litepaper">Litepaper</a>
<a href="/claims">What Igneum does not claim</a>
<a href="/randomx">Igneum vs RandomX</a>
<a href="/bench">Engineering log</a>
<a href="/evidence">Evidence</a>
<a href="/ledger">Ledger: every criticism</a>
<a href="/provenance">Built on the shoulders</a>
</nav>
<nav class="foot-col" aria-label="Run">
<div class="eyebrow">Run</div>
<a href="/miner">The miner</a>
<a href="/app">The app</a>
<a href="/wallet">The wallet</a>
<a href="/miners">GPU bench table</a>
<a href="/dev-fee">The dev fee</a>
<a href="/faucet">Testnet faucet</a>
</nav>
<nav class="foot-col" aria-label="Follow">
<div class="eyebrow">Follow</div>
<a href="/live">Live devnet</a>
<a href="/explorer">Explorer</a>
<a href="/journey">Journey</a>
<a href="/metamask">Add Igneum to MetaMask</a>
<a href="/miner#get">Downloads: devnet build</a>
</nav>
<nav class="foot-col" aria-label="Contact">
<div class="eyebrow">Contact</div>
<a href="mailto:hello@igneum.network">hello@igneum.network</a>
<a href="https://github.com/igneum-network/spec/issues" rel="noopener">An issue on the spec</a>
<span class="foot-note">Report a flaw by either. Nobody from Igneum will ask for your seed.</span>
</nav>
</div>
<div class="foot-base">
<span class="foot-imprint">Igneum Labs LTD · Unit IH-00-01-01-OF-01, Level 01, Innovation One, Dubai International Financial Centre</span>
<span class="foot-state"><span class="dot off" id="foot-dot"></span><span id="foot-state">devnet</span></span>
<span class="theme" role="group" aria-label="Theme"><button type="button" data-theme-set="system" aria-pressed="true">System</button><button type="button" data-theme-set="light" aria-pressed="false">Light</button><button type="button" data-theme-set="dark" aria-pressed="false">Dark</button></span>
<span class="mono foot-copy">© 2026 Igneum · not an offer to sell anything</span>
</div>
</div>
</footer>
<script>
(function(){
// theme control: stores light or dark under igneum-theme; system clears it. The head applied the stored value before paint.
var bs=document.querySelectorAll('[data-theme-set]');if(!bs.length)return;
function cur(){try{var t=localStorage.getItem('igneum-theme');return t==='light'||t==='dark'?t:'system';}catch(e){return 'system';}}
function paint(){var c=cur();bs.forEach(function(b){b.setAttribute('aria-pressed',b.getAttribute('data-theme-set')===c?'true':'false');});}
bs.forEach(function(b){b.addEventListener('click',function(){var v=b.getAttribute('data-theme-set');try{if(v==='system')localStorage.removeItem('igneum-theme');else localStorage.setItem('igneum-theme',v);}catch(e){}
if(v==='system')document.documentElement.removeAttribute('data-theme');else document.documentElement.setAttribute('data-theme',v);paint();});});
paint();
// the network state word in the footer: one read of the observer per page view
var fs=document.getElementById('foot-state'),fd=document.getElementById('foot-dot');if(fs&&fd){fetch('/api/live?window=30',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){var on=d&&d.ok&&d.state&&!d.state.stale;fs.textContent=on?'devnet live':'devnet, observer stale';fd.className='dot '+(on?'live':'off');}).catch(function(){fs.textContent='devnet';});}
})();
</script>
<!-- footer:end -->
<script src="/yourcard.js" defer></script>
<script src="/live-dag.js" defer></script>
<script>
(function(){
function $(id){return document.getElementById(id);}
function rel(ms){var s=Math.max(0,Math.round(ms/1000));if(s<60)return s+' s ago';var m=Math.floor(s/60);if(m<60)return m+' min ago';return Math.floor(m/60)+' h ago';}
var dag=null;
function mount(){if(dag||!window.IgneumDag)return;
dag=IgneumDag.mount($('dag'),{poll:true,window:120,tooltip:$('dag-tip'),chip:$('dag-chip'),pauseButton:$('dag-pause'),
onWindow:function(w){$('c-window').textContent=w+' s of blocks on screen';},
onState:function(st,reason){var el=$('dag-state');el.className='state '+(st==='live'?'live':st==='failed'?'bad':'');el.innerHTML='<span class="dot '+(st==='live'?'live':st==='failed'?'bad':'off')+'"></span>'+(st==='live'?'live devnet':st==='connecting'?'connecting to the devnet observer':reason||st);},
onData:function(d){var w=dag?dag.getWindow():120,cut=new Date(d.now).getTime()-w*1000,on=0;(d.blocks||[]).forEach(function(b){if(b.ts>=cut)on++;});$('c-screen').textContent=on;
var f=d.finality;$('c-locked').textContent=f&&f.supported&&!f.active?'finality paused':f&&f.latest_locked_index?'#'+f.latest_locked_index:'none yet';
var p=d.proving;$('c-proven').textContent=p&&p.supported&&p.active?(p.blocks_fully_proven_10m||0)+'/'+(p.blocks_10m||0)+' in 10 min':'not active';
if(window.IgneumYourCard&&d.state)IgneumYourCard.update(d.state.hashes_per_second_estimate);}});}
if(window.IgneumDag)mount();else{var s=document.querySelector('script[src="/live-dag.js"]');if(s)s.addEventListener('load',mount);}
})();
</script>
</body>
</html>