Merge site-ui-3: one design system for every page, light and dark, the live DAG module, the one-screen home, the litepaper on the system, three new CI checks (Josh: deploy the site, 6 October 2026)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
364
docs/plans/site-ui-3-audit.md
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
# Site UI 3 audit: the website and litepaper through the miner app's lens
|
||||
|
||||
6 October 2026, 19:00 to 21:00 UK. Branch `site-ui-3`. Josh's ask: "run the website and all pages and litepaper through the
|
||||
same apple lens as the miner app", and "leave no stone unturned". The standard is `docs/plans/miner-ui-3-audit.md` and
|
||||
`docs/plans/miner-ui-3.md` (branch `miner-ui-3`). The design that answers this audit is `docs/plans/site-ui-3.md`.
|
||||
|
||||
## 1. Method
|
||||
|
||||
| Input | How |
|
||||
|---|---|
|
||||
| Every page in `site/` | 15 pages: index, litepaper, live, miners, miner, wallet, bench, evidence, ledger, explorer, block, address, faucet, metamask, 404 |
|
||||
| Screenshots | headless Chromium (Playwright's cached build, never Chrome.app) against `tools/site-serve.mjs` on a private port, reading the live API; full page at 1440 and 390, dark and light: `docs/plans/site-ui-3-shots/before/` |
|
||||
| Live states | the same pages with `/api/*` blocked (failed fetch) and with the observer's reply rewritten stale (`state.stale: true`, 70 min old): `before-states/*-fail.jpg`, `*-stale.jpg`; the loading state read from each page's JS |
|
||||
| Print | `/litepaper` printed to A4 in both themes: `before-states/litepaper-1440-{dark,light}.pdf` |
|
||||
| Keyboard | Tab pressed 2, 3 and 8 times on the home page, the focused element and its outline recorded: `before-states/index-*-focus*.png` |
|
||||
| Contrast | every text token on every surface token, both themes, computed (WCAG relative luminance) |
|
||||
| Links | every href and src (914 attributes, 210 unique) followed; anchors against ids; externals with curl |
|
||||
| Downloads | every installer fetched from dl.igneum.network and hashed against the host manifest and the page |
|
||||
| Numbers | every number and dated claim traced to the bench log, the ledger, the spec, the analysis docs or the live API |
|
||||
| Rating | the miner-ui-3 scale: "10 = nothing to change. The three questions per screen: what does it say in jargon, which number has no unit or no meaning, which 0 or blank has no reason word." |
|
||||
|
||||
The pane in the desktop app was used to confirm the item 0 fix live (counters and legend) but its screenshots come back
|
||||
black under a 1440 emulation, so every image here is from the headless run.
|
||||
|
||||
## 2. Screen by screen
|
||||
|
||||
Rating: 10 = nothing to change. The three questions per screen: what does it say in jargon, which number has no unit or
|
||||
no meaning, which 0 or blank has no reason word. Screenshots: `docs/plans/site-ui-3-shots/before/<page>-<width>-<theme>.jpg`.
|
||||
|
||||
### Home, 6
|
||||
|
||||
Good: the hero says what it is in a sentence, the four facts are tiles with units, the light-client card verifies a real
|
||||
certificate in the tab, the download buttons carry version and size, the economics bar reads at a glance.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| The lead paragraph runs 100 words and carries the chip model's numbers (5x to 9x per joule, about 2x), a model figure the plan says to word before any public push | hero, line 345 |
|
||||
| Eight sections before the download; the one primary action ("See the miner") scrolls to the middle of the page | hero CTA |
|
||||
| Two ember primaries on screen at once in the hero (the nav's "The miner" and "See the miner") plus every stat number in ember | hero, stats |
|
||||
| Every section below the fold is invisible until scrolled (`.reveal` at opacity 0); a print, a screenshot, a slow scroller or a reader with JavaScript off gets blank sections | 37 `.reveal` elements |
|
||||
| The live scene showed window counts as chain facts, grey nodes, and a simulation under a live-looking label when the fetch failed (fixed in item 0) | chain scene |
|
||||
| The journey log's default eight entries are engineering shorthand with scrub artefacts ("the 12-node the cloud provider network", "00:4xZ", CLI flags, ledger ids) | journey |
|
||||
| "vote keys active in 10 min (a card runs several)", "BLS aggregate, version 1", "final · cp 5", "igneum-proving-pool-v0" on the surface | strip, hero card, wallet, economics |
|
||||
| The mine heading is 91 characters | section 6 |
|
||||
| Horizontal overflow at 390 (395 px) | phone |
|
||||
| No light mode | whole page |
|
||||
|
||||
Apple would: one screen that says what it is, shows the chain alive, offers the download, and lets the sceptic check three things; everything else one link away.
|
||||
|
||||
### Litepaper, 5
|
||||
|
||||
Good: a real table of contents with a sticky rail, numbered sections, "what we do not claim" as its own section, every
|
||||
other-chain claim labelled approximate, the pager at the foot of each section.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| Light by default while every other page is dark; its own token set (ground, surface, quiet, tint) | :root |
|
||||
| Accents as text (ember, molten) fail 4.5:1 in light mode everywhere they appear: eyebrows, links, the tile numbers | section 6 of this audit |
|
||||
| File paths inline in the abstract and limits (`docs/analysis/chip-model-v3.md`, `asic-resistance-history.md`, `prover-tiers-real-cards.md`, which does not exist) | abstract, randomx, proving, limits |
|
||||
| 92 sentences over 30 words; the longest 152 words (Ember status) and 136 (proving measurements) | mining, proving, ember |
|
||||
| "One section at a time" is the default, so the print is one section and a search of the page finds one section | contents |
|
||||
| The cover says updated 5 October; the body cites 6 October nine times | cover |
|
||||
| Placeholders on the public page: "the entry lands tonight", "measurement tonight" | questions miners ask |
|
||||
| Numbers in prose, not tables: the proving measurements, the swap figures, the prover tiers | proving, ember |
|
||||
| Roadmap says the proof lag is "not yet measured on the live chain" while the API reports a median lag of 387 s | roadmap |
|
||||
| Tint callouts (`--tint`) against the app's no-tint rule | callouts |
|
||||
|
||||
Apple would: dark like the rest, a readable 68-character measure, every measured number in a table with its date and
|
||||
source, the limits section set as callouts, the whole paper on one page with a sticky section nav, printable.
|
||||
|
||||
### Live, 6
|
||||
|
||||
Good: the status tiles say what they measure and over what window, the lane scene is real data with a legend in the
|
||||
ledger's words, the miners table and the events feed are honest, "observer offline" is said in words.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| "DEVNET V0" eyebrow (the chain is v4) | eyebrow |
|
||||
| The fee sentence pins DAA 210,000 and the chain passes it tonight | intro |
|
||||
| "proven 0/16" counted the on-screen window (fixed in item 0) | strip stats |
|
||||
| Hash rate "n/a" when the estimate is missing; "n/a" in the proof lag panel | tiles, canvas panel |
|
||||
| "DAA", "pgas", "gwei", "observer", "api unreachable" on the surface with no gloss | intro, tiles, notes |
|
||||
| The scene is a lane chart with coloured squares, not a DAG; the selected chain is a spline through the squares | canvas |
|
||||
| 2,000 px of miners table on one screen with every engine cell "not reported" | miners |
|
||||
| Eight tiles before the scene; the scene is the page's job | layout |
|
||||
|
||||
Apple would: the DAG first, the eight numbers under it as one row, the tables folded.
|
||||
|
||||
### Miner, 5
|
||||
|
||||
Good: every feature is one line with its measurement and a link to the log entry, the fee section shows the fee and
|
||||
the off switch, the recoveries table has units.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| The h1 is 96 characters and wraps to seven lines at 1440 | hero |
|
||||
| 8,947 px tall; the download sits at 7,700 px | whole page |
|
||||
| Buttons say v0.3.13, the Flight Sheet URL is 404 and its sha256 is the hash of a dead file (L2) | get |
|
||||
| "every NVIDIA card from 8 GB proves" cites a file that is not in the repository and contradicts /evidence row 16 | hero, features |
|
||||
| "Six levers" has no document; the "3 minutes / 30% in 10 minutes" update rules have no source | levers, updates |
|
||||
| "until 0.3.6", "Ships in 0.3.6" at 0.3.13 | caption, lever 4 |
|
||||
| Command lines and env strings as body text (`--dev-fee 0`, `DEV_FEE=1 IDENTITIES=8 WORKER=auto VOTE=1`) outside a code block | fee, hive |
|
||||
| Three ember primaries on one screen (nav, "Downloads", band) | hero, band |
|
||||
|
||||
Apple would: install, start, the card mines, download here; every feature behind a chevron with its number; the fee
|
||||
as one sentence and a switch. (The copy and images are being redone by the site-miner agent today; this page is
|
||||
styled through the shared CSS only.)
|
||||
|
||||
### Wallet, 6
|
||||
|
||||
Good: the three states are three cards with a word each, the timed first run is a table with units, the checks before
|
||||
"final" are four numbered sentences.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| "Your coins. Final means final." and "The miner pays this wallet." are aphorisms; "No confirmation counts, no trusting the node" is an antithesis | hero, band, lead |
|
||||
| Every timed number has no row in the log or the repository ("The log entry ships with the wallet") against "every number has a row" | first run |
|
||||
| 5,880 px tall; download at 4,800 px | whole page |
|
||||
| The two screenshots are the same size as the text column and carry an example address | hero, transaction |
|
||||
| Horizontal overflow at 390 | phone |
|
||||
|
||||
(The content is being redone by the wallet-ui-3 agent today; styled through the shared CSS only.)
|
||||
|
||||
### Miners (bench table), 5
|
||||
|
||||
Good: six measured rows with date and version, prototype rows say so, "no tune reports yet" says why.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| "3 entries, newest at the bottom" is the bench template's eyebrow on a page with three sections | eyebrow |
|
||||
| "MH per watt: not measured" on every row while the 5090's watts are in the ledger (E17) and eleven rented cards were measured today | table |
|
||||
| "Rows: 6. Source file: site/miner-bench.json", "tools/tuning.mjs --priors --site" on the page | notes |
|
||||
| Two 40-word sentences | priors |
|
||||
|
||||
Apple would: the table, the rate per watt where measured, "not measured" with the reason once.
|
||||
|
||||
### Explorer, 7
|
||||
|
||||
Good: eight tiles with units and a sub-line each, a real table of real blocks, a legend in the ledger's words, the public
|
||||
API card, the error sentences are words.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| "n/a" in the height, difficulty and hash-rate tiles and the Txs and Proof-records cells when a field is missing | tiles, table |
|
||||
| "DAA" in two tiles and two notes with no gloss anywhere on the page | tiles, notes |
|
||||
| "Older blocks" stops the 5 s refresh for good after the first click, silently | button |
|
||||
| "cached 10 s" (the explorer endpoint is 5 s); "under check" names a field today's /api/supply does not carry | API card, note |
|
||||
| "observer" six times as a word for the reader | intro, notes |
|
||||
|
||||
Apple would: the same page with the state words and the glosses.
|
||||
|
||||
### Block and address, 6
|
||||
|
||||
Good: every header field, the mergeset, the coinbase outputs and the proof records as labelled rows; a block that is a
|
||||
checkpoint shows its weight; the error sentences name what a hash or an address is.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| "n/a" in twelve places (miner, vote key, difficulty, subsidy, selected parent, parent levels, balance, last block, subsidy and tx cells) | both pages |
|
||||
| The address balance reads "n/a" for every address with the sentence "no EVM RPC configured on this deployment (EXPLORER_EVM_RPC)", an environment variable on a public page | address |
|
||||
| The default balance sub-line is the raw RPC method name `eth_getBalance` | address |
|
||||
| A never-seen address returns zeros with no sentence saying it has never mined | address |
|
||||
| "E(DAA) of spec 2.5", "pgas", "needs an EVM RPC", "the proving feed" | block |
|
||||
| The only way back is the eyebrow link | both |
|
||||
|
||||
Apple would: "balance not shown on this deployment" once, "this address has not mined in the last day", the spec words
|
||||
behind a tooltip.
|
||||
|
||||
### Faucet, 7
|
||||
|
||||
Good: one job, one form, one button, the four rules as numbered sentences, the status words are sentences.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| "not yet open" notice and a form the reader can still submit, which answers "The faucet is not open yet" | form |
|
||||
| "No account, no sign-in" (antithesis); "Mainnet starts from an empty genesis" stated as fact for a plan | intro, rules |
|
||||
|
||||
### MetaMask, 6
|
||||
|
||||
Good: two cards, the numbers a wallet needs, a button with five state sentences, the by-hand steps.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| Canonical and share URL point at /wallet (L4) | head |
|
||||
| "Explorer: none yet" while /explorer is live; "until the Igneum Wallet ships, MetaMask is the wallet" while 0.1.4 ships; "The Igneum Miner app" | devnet card, app section |
|
||||
| Not in the nav; reachable from the footer and the faucet only | nav |
|
||||
|
||||
### 404, 6
|
||||
|
||||
Good: short, three links, noindex.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| "These four pages are everything the site has" (fifteen pages); "in 17 sections" (nineteen) | copy |
|
||||
| "Nothing is mined here." is an aphorism | h1 |
|
||||
| No miner, wallet, explorer or ledger card; no canonical, OG or manifest | links, head |
|
||||
|
||||
### Engineering log (bench), 5
|
||||
|
||||
Good: every measurement in one place, 83 entries with a contents rail, the scrub keeps machine names out.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| 189,472 px tall at 1440 (190 screens), 311,114 at 390: Chromium needs minutes to lay it out, and a phone reader scrolls for an hour | whole page |
|
||||
| Headings carry commit hashes and internal names (by design of the generator) and run past 150 characters in the sticky contents | contents |
|
||||
| The eyebrow "83 entries, newest at the bottom" is right here and wrong on the two pages that reuse the template | eyebrow |
|
||||
| One plain-text GitHub Actions URL 404s to the public (L9) | entry 346 |
|
||||
|
||||
Apple would: the log as a list of entries, each collapsed to its heading and date, opened on demand; a search box.
|
||||
|
||||
### Evidence, 6
|
||||
|
||||
Good: 31 rows with five labels, the label counts as tiles, a sort on every column, "none yet" said in every verification cell.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| The page shows designed 6 where the source table says 5 (row 17 carries two labels and the build buckets the first) | tiles |
|
||||
| Two scrub artefacts in the rows ("the Apple M5 Max M5 Max", "a an RTX 5090 on Windows with an RTX 5090") | rows 1, 30 |
|
||||
| The "What moved on 4 and 5 October" tables of the source are not rendered anywhere | body |
|
||||
| 23,031 px tall; the table scrolls sideways under 1,140 px with a one-line warning | table |
|
||||
| Three file paths on the surface | notes |
|
||||
|
||||
### Ledger, 5
|
||||
|
||||
Good: 167 criticisms with their status and the answer as first written, a search, the counts as chips, nothing deleted.
|
||||
|
||||
| Problem | Where |
|
||||
|---|---|
|
||||
| 53,522 px tall at 1440, 113,082 at 390, with a 712 px horizontal overflow at 390 (a long id or path in a card) | whole page |
|
||||
| 40 section headings with duplicate ids; the section links land on the first | sections |
|
||||
| 165 "Evidence:" lines and the "Decision owner:" lines are dropped against the renderer's "nothing is dropped" | cards |
|
||||
| The page's counts differ from the source's count table by 3, 2 and 2 | chips |
|
||||
| `~/.config/igneum`, "pid 33114", `--rpclisten=0.0.0.0:26610`, "PC 2" fifteen times and "the Mac" nineteen times on a public page; the renderer skips the forbidden-strings hard stop | cards |
|
||||
| "Nothing deleted, nothing softened." (antithesis) | meta |
|
||||
|
||||
Apple would: the ledger as a filterable list with one card open at a time, the scrub applied, the ids unique.
|
||||
|
||||
|
||||
## 3. The tick list: nothing lost
|
||||
|
||||
Appendix A carries every claim, number, date, link and feature per page, with its source and whether the source still
|
||||
says the same today. The build keeps every row; a row that moves gets its new place written beside it.
|
||||
|
||||
## 4. Links, downloads, icons, 404
|
||||
|
||||
Every internal anchor resolves (268 fragment links, 0 missing ids). Every local asset exists. Every external link answers
|
||||
200 except one plain-text GitHub Actions URL in the bench log (private repository, 404 to the public). All four downloads
|
||||
hash-match the host manifest. The live 404 body is byte-identical to `site/404.html`.
|
||||
|
||||
| # | Finding | Where | Consequence |
|
||||
|---|---|---|---|
|
||||
| L1 | `site/downloads.json` is two releases stale (miner 0.3.9 and 0.3.10, written 5 Oct 21:52Z); the host serves 0.3.14 | `site/downloads.json`; `site/build.mjs` 266 to 313 | any build whose 8 s fetch of the host manifest fails stamps dead versions, dead URLs and wrong hashes on every download button |
|
||||
| L2 | `miner.html` carries v0.3.13 on all four buttons, a Flight Sheet URL that is 404 (`igneum-hive-0.3.13.tar.gz`) and the sha256 of that dead file | `site/miner.html` 462 to 471 | a HiveOS miner copying the repo page's URL gets nothing; the live deploy shows 0.3.14 because the build fetched the manifest, so only a failed fetch exposes it |
|
||||
| L3 | the host publishes no checksum file beside any download; only the Hive button shows a hash; Windows, Mac and Wallet show none | dl.igneum.network; `index.html` 513 to 514, `wallet.html` 371 | a sceptic cannot verify three of four downloads from the page |
|
||||
| L4 | `metamask.html` canonical and og:url point at `/wallet` while the sitemap lists `/metamask` | `site/metamask.html` 8, 14; `sitemap.xml` 10 | search folds the page into /wallet |
|
||||
| L5 | sitemap omits /ledger, /explorer and /faucet; lastmod dates predate the 6 Oct changes | `site/sitemap.xml` | the three pages are found only by crawl |
|
||||
| L6 | two Open Graph sets: seven pages send a 256 px square (`og-small.png`, `summary` card), seven send 1200 by 630 (`og.png`); `og-coin.png` duplicates `og.png` byte for byte; `og-square.png` is referenced nowhere | `site/partials/head.html`, page heads | a shared link shows a small square for the home page and the litepaper, the two pages most shared |
|
||||
| L7 | icon links differ by page: address, block, explorer, faucet carry no SVG icon and no 192 or 512 link; ledger lacks 512; 404 lacks canonical, OG, manifest and favicon-32 | page heads | install and tab icons vary by page |
|
||||
| L8 | `/404` answers 200 as a clean URL | Vercel `cleanUrls` | harmless, noindex |
|
||||
| L9 | the bench log prints a GitHub Actions URL as text that 404s to the public | `site/bench.html` 346 | a reader following it hits a wall |
|
||||
|
||||
## 5. Live elements and their states
|
||||
|
||||
| Page | Element | Fresh | Loading | Failed fetch | Stale observer | Empty |
|
||||
|---|---|---|---|---|---|---|
|
||||
| index | hero strip, chain scene, light-client card | item 0: chain block, shards proven, last lock | "connecting to the devnet observer" (item 0) | "simulated preview · live feed unavailable" with a note (item 0); before item 0 the simulation ran under a live-looking label | "observer offline, last update N ago" (item 0) | not reached: the scene always has the window |
|
||||
| live | the lane scene, finality strip, proving strip, events, miners table, blocks per minute | reads /api/live every 2 s | counters at 0, "n/a" in proven until the first reply (item 0 made it "pending") | after 3 failures: "api unreachable" in the status tile and "api unreachable, scene frozen" on the canvas; tiles keep their last numbers | "OFFLINE", "last update N ago", the scene frozen with "observer offline" | no empty words: an empty window draws nothing; the tables say "No blocks in the last 10 minutes." and "No events yet." |
|
||||
| miners | the bench table | static | static | no change (static page) | no change | "No tune reports yet. The first rows appear once five machines with the same card model have reported." |
|
||||
| explorer | tiles, latest blocks | /api/stats, /api/supply, /api/explorer | "Loading." in the table, tile values at their defaults | tiles keep defaults, the table shows the fetch error text or "The API did not answer." | "OFFLINE", "last update N ago", "observer offline, last known" over the table | "No blocks in the last 24 hours." |
|
||||
| block, address | the detail pages | /api/explorer | h1 "Block" / the address, cells empty | "The API did not answer: <message>" | no stale word: the detail is the stored block | "Not found." / zeros with no "never seen" sentence |
|
||||
| faucet | the form | /api/faucet on submit | the form | "The faucet did not answer. Try again in a minute." | not applicable | the not-open notice |
|
||||
| wallet, miner | download buttons, product names | build-time stamps | static | no change | no change | not applicable |
|
||||
|
||||
Rule for the design: every live element names its state in words with the reason (section 2.5 of the design); no counter
|
||||
shows `n/a`, `--` or a bare `0`.
|
||||
|
||||
## 6. Contrast
|
||||
|
||||
Computed for every text token on every surface token. Dark passes everywhere (lowest: ember text on the litepaper's
|
||||
`--surface-2`, 4.79:1). Light fails for both accent colours as text:
|
||||
|
||||
| Theme | Text | On | Ratio | Body 4.5:1 |
|
||||
|---|---|---|---|---|
|
||||
| light (site tokens) | ember #D9430F | page #F4F1EC | 3.92 | fail |
|
||||
| light (site tokens) | ember #D9430F | card #FFFFFF | 4.41 | fail |
|
||||
| light (site tokens) | molten #B9741C | page #F4F1EC | 3.34 | fail |
|
||||
| light (site tokens) | quiet #6E6B65 | surface-2 #ECE8E0 | 4.35 | fail |
|
||||
| light (app tokens) | ember #E04A14 | page #F4F1EC | 3.61 | fail |
|
||||
| light (app tokens) | molten #B8731F | page #F4F1EC | 3.38 | fail |
|
||||
| light, proposed | ember-text #B8390C | page, card, row | 5.14, 5.79, 4.74 | pass |
|
||||
| light, proposed | molten-text #8F5810 | page, card, row | 5.22, 5.88, 4.81 | pass |
|
||||
|
||||
Today the litepaper (light by default) sets eyebrows, links and figures in ember and molten at body sizes: every one of
|
||||
them is under 4.5:1. The design splits the accents into a fill token and a text token (design 2.1).
|
||||
|
||||
## 7. Keyboard and focus
|
||||
|
||||
Focus is visible: a 2 px ember outline at 3 px offset on every link and button (`site/partials/head.html` 23), confirmed at
|
||||
Tab 2, 3 and 8 in both themes and at 390 px. The skip link appears on the first Tab. The burger menu at 390 is reachable.
|
||||
What is missing: the canvas scenes have no keyboard alternative and no text summary for a screen reader beyond the
|
||||
counters; the litepaper's section pills are buttons without `aria-pressed`; the theme has no control at all on 14 of 15
|
||||
pages (the litepaper offers one).
|
||||
|
||||
## 8. Phone width
|
||||
|
||||
| Page | 390 px | Finding |
|
||||
|---|---|---|
|
||||
| index | horizontal overflow, page 395 px wide | the livestrip's `nowrap` tiles and the hero grid |
|
||||
| wallet | horizontal overflow, page 395 px wide | same class |
|
||||
| ledger | horizontal overflow, page 712 px wide | a long id or path in a card without `overflow-wrap` |
|
||||
| the other twelve pages | no overflow | |
|
||||
|
||||
## 9. Print
|
||||
|
||||
`/litepaper` printed to A4: three pages in dark mode (the page colours print as set), the nav and footer print, and only
|
||||
the open section prints because the paper opens in "one section at a time" mode. A reader who prints the litepaper gets
|
||||
the abstract and the footer. The design adds a print stylesheet and prints the whole paper (design 4).
|
||||
|
||||
## 10. Top ten findings
|
||||
|
||||
Ranked by reach (who sees it) and by what it costs a reader.
|
||||
|
||||
| # | Finding | Consequence per reader |
|
||||
|---|---|---|
|
||||
| 1 | The home live scene showed window counts as chain facts and grey blocks (fixed in item 0, commit 84a6de2) | every visitor read a dead chain; fixed before this audit shipped |
|
||||
| 2 | Fifteen pages carry fifteen stylesheets with three token sets (home, litepaper, chrome) and no light mode on fourteen of them; the litepaper is light by default, the rest dark | a reader crossing from the paper to the home page changes world; a light-mode user gets dark pages everywhere but one |
|
||||
| 3 | Light-mode accents fail body contrast everywhere they are used as text | the litepaper's links, eyebrows and figures are hard to read in light mode |
|
||||
| 4 | Scroll-reveal hides every section below the fold until it scrolls into view (`.reveal` at opacity 0) | a slow scroller, a print, a screenshot or a reader with JavaScript off gets blank sections |
|
||||
| 5 | The print of the litepaper is one section, dark, with nav and footer | the paper cannot be printed |
|
||||
| 6 | The repo's download snapshot and the miner page are stale against the host (L1, L2) | a failed manifest fetch ships dead links and a wrong hash |
|
||||
| 7 | Developer text on user surfaces: the litepaper's abstract cites `docs/analysis/chip-model-v3.md` and other repo paths inline; DAA numbers appear without the word for them | a reader who is not in the repo sees file paths |
|
||||
| 8 | Horizontal overflow at 390 on index and wallet | the phone page scrolls sideways |
|
||||
| 9 | Three of four downloads show no hash and the host publishes no checksum file (L3) | a sceptic cannot verify the installer |
|
||||
| 10 | Two Open Graph sets, a wrong canonical on /metamask, three pages missing from the sitemap (L4 to L6) | shared links and search see a smaller, inconsistent site |
|
||||
|
||||
Also found and fixed in item 0 without a row: the scene's fixed 16 ms frame step (double speed on 120 Hz displays), and
|
||||
polling that stopped for good after one failed fetch.
|
||||
|
||||
## Appendix A. The tick list per page
|
||||
|
||||
`docs/plans/site-ui-3-ticklist.md`: 502 rows (home 88, litepaper 151, nav 11, footer 24, live 22, miners 19, miner 66,
|
||||
wallet 29, bench 5, evidence 12, ledger 8, explorer 23, block 11, address 9, faucet 8, metamask 9, 404 7), each with its
|
||||
source and today's verdict (MATCH, STALE, UNSOURCED, APPROX), the ledger's stated sentences with their presence on each
|
||||
page, the nine "what we do not claim" sentences and the four "what Ember does not claim" sentences verbatim, and the
|
||||
scrub rules. The build keeps every row; the design's per-page notes (section 5 of `site-ui-3.md`) say where a row moved.
|
||||
|
||||
## Appendix B. The stones
|
||||
|
||||
| # | Stone | Turned | Where |
|
||||
|---|---|---|---|
|
||||
| 1 | every page in site/, including API-backed ones and 404 | yes, 15 pages | section 2, `before/` |
|
||||
| 2 | every state of every live element: loading, empty, failed fetch, stale | yes: failed and stale captured for 10 pages; loading and empty read from each page's JS | section 5, `before-states/` |
|
||||
| 3 | every link followed, internal and external | yes: 914 attributes, 210 unique, 268 anchors, every external with curl | section 4 |
|
||||
| 4 | every number traced to its source and checked against the live API or the bench log today | yes, appendix A | appendix A |
|
||||
| 5 | both themes | yes, dark and light for every page | `before/` |
|
||||
| 6 | 1440 and 390 | yes | `before/` |
|
||||
| 7 | keyboard focus | yes, Tab 2, 3, 8, both themes, both widths | section 7, `before-states/*focus*` |
|
||||
| 8 | contrast | yes, every token pair, both themes | section 6 |
|
||||
| 9 | the litepaper's every section and footnote | yes, appendix A (L rows) | appendix A |
|
||||
| 10 | the downloads' hashes against the host | yes, four files fetched and hashed | section 4 |
|
||||
| 11 | the Open Graph and favicon set | yes, every meta and icon, sizes measured with sips | section 4, L6 and L7 |
|
||||
| 12 | the 404 page | yes, live body byte-identical, `/404` answers 200 | section 4, L8 |
|
||||
| 13 | print of the litepaper | yes, both themes, A4 | section 9 |
|
||||
| 14 | the live API itself against the page | yes, item 0 (height, paid shards, lock index, lag) | commit 84a6de2 |
|
||||
|
After Width: | Height: | Size: 501 KiB |
|
After Width: | Height: | Size: 530 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 46 KiB |
BIN
docs/plans/site-ui-3-shots/after/bench-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
docs/plans/site-ui-3-shots/after/bench-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
docs/plans/site-ui-3-shots/after/bench-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
docs/plans/site-ui-3-shots/after/bench-390-light.jpg
Normal file
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 46 KiB |
BIN
docs/plans/site-ui-3-shots/after/evidence-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
docs/plans/site-ui-3-shots/after/evidence-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
docs/plans/site-ui-3-shots/after/evidence-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
docs/plans/site-ui-3-shots/after/evidence-390-light.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
docs/plans/site-ui-3-shots/after/explorer-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 478 KiB |
BIN
docs/plans/site-ui-3-shots/after/explorer-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 513 KiB |
BIN
docs/plans/site-ui-3-shots/after/explorer-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
docs/plans/site-ui-3-shots/after/explorer-390-light.jpg
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
docs/plans/site-ui-3-shots/after/faucet-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
docs/plans/site-ui-3-shots/after/faucet-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
docs/plans/site-ui-3-shots/after/faucet-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
docs/plans/site-ui-3-shots/after/faucet-390-light.jpg
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
docs/plans/site-ui-3-shots/after/index-1440-dark-clip.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
docs/plans/site-ui-3-shots/after/index-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 702 KiB |
BIN
docs/plans/site-ui-3-shots/after/index-1440-light-clip.png
Normal file
|
After Width: | Height: | Size: 187 KiB |
BIN
docs/plans/site-ui-3-shots/after/index-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 870 KiB |
BIN
docs/plans/site-ui-3-shots/after/index-390-dark-clip.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
docs/plans/site-ui-3-shots/after/index-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 657 KiB |
BIN
docs/plans/site-ui-3-shots/after/index-390-light-clip.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
docs/plans/site-ui-3-shots/after/index-390-light.jpg
Normal file
|
After Width: | Height: | Size: 657 KiB |
BIN
docs/plans/site-ui-3-shots/after/ledger-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
docs/plans/site-ui-3-shots/after/ledger-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
docs/plans/site-ui-3-shots/after/ledger-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
docs/plans/site-ui-3-shots/after/ledger-390-light.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
docs/plans/site-ui-3-shots/after/litepaper-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
docs/plans/site-ui-3-shots/after/litepaper-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
docs/plans/site-ui-3-shots/after/litepaper-1440-light.pdf
Normal file
BIN
docs/plans/site-ui-3-shots/after/litepaper-1440-light.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
docs/plans/site-ui-3-shots/after/litepaper-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
docs/plans/site-ui-3-shots/after/litepaper-390-light.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
docs/plans/site-ui-3-shots/after/live-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 542 KiB |
BIN
docs/plans/site-ui-3-shots/after/live-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 554 KiB |
BIN
docs/plans/site-ui-3-shots/after/live-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 354 KiB |
BIN
docs/plans/site-ui-3-shots/after/live-390-light.jpg
Normal file
|
After Width: | Height: | Size: 361 KiB |
BIN
docs/plans/site-ui-3-shots/after/metamask-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 264 KiB |
BIN
docs/plans/site-ui-3-shots/after/metamask-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 262 KiB |
BIN
docs/plans/site-ui-3-shots/after/metamask-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 211 KiB |
BIN
docs/plans/site-ui-3-shots/after/metamask-390-light.jpg
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
docs/plans/site-ui-3-shots/after/miner-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docs/plans/site-ui-3-shots/after/miner-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
docs/plans/site-ui-3-shots/after/miner-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
docs/plans/site-ui-3-shots/after/miner-390-light.jpg
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
docs/plans/site-ui-3-shots/after/miners-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 309 KiB |
BIN
docs/plans/site-ui-3-shots/after/miners-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 309 KiB |
BIN
docs/plans/site-ui-3-shots/after/miners-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
docs/plans/site-ui-3-shots/after/miners-390-light.jpg
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
docs/plans/site-ui-3-shots/after/no-such-page-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
docs/plans/site-ui-3-shots/after/no-such-page-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
docs/plans/site-ui-3-shots/after/no-such-page-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
docs/plans/site-ui-3-shots/after/no-such-page-390-light.jpg
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
docs/plans/site-ui-3-shots/after/wallet-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 577 KiB |
BIN
docs/plans/site-ui-3-shots/after/wallet-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 589 KiB |
BIN
docs/plans/site-ui-3-shots/after/wallet-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/plans/site-ui-3-shots/after/wallet-390-light.jpg
Normal file
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 173 KiB |
|
After Width: | Height: | Size: 503 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 829 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 78 KiB |
BIN
docs/plans/site-ui-3-shots/before-states/litepaper-1440-dark.pdf
Normal file
BIN
docs/plans/site-ui-3-shots/before-states/litepaper-1440-dark.png
Normal file
|
After Width: | Height: | Size: 406 KiB |
|
After Width: | Height: | Size: 411 KiB |
BIN
docs/plans/site-ui-3-shots/before-states/live-1440-dark-fail.jpg
Normal file
|
After Width: | Height: | Size: 201 KiB |
|
After Width: | Height: | Size: 534 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 337 KiB |
|
After Width: | Height: | Size: 337 KiB |
|
After Width: | Height: | Size: 594 KiB |
|
After Width: | Height: | Size: 461 KiB |
|
After Width: | Height: | Size: 462 KiB |
|
After Width: | Height: | Size: 249 KiB |
|
After Width: | Height: | Size: 249 KiB |
BIN
docs/plans/site-ui-3-shots/before/bench-1440-dark.jpg
Normal file
|
After Width: | Height: | Size: 127 KiB |
BIN
docs/plans/site-ui-3-shots/before/bench-1440-light.jpg
Normal file
|
After Width: | Height: | Size: 127 KiB |
BIN
docs/plans/site-ui-3-shots/before/bench-390-dark.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
docs/plans/site-ui-3-shots/before/bench-390-light.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 71 KiB |