ENTRY 00Archive · methodSCHEMA v1 · CAPTURE 05:10 UTC

Verify the numbers on the chain, not on this site.

Every number in the archive derives from public on-chain data at publicly disclosed addresses. The archive is a convenience rendering of independently verifiable data — a reader who doubts it does not need to trust this site: open an explorer and check the chain, which this site does not control.

If the chain ever disagrees with an archive page, the chain is right — same rule as everywhere else on this site.

The addresses

Epoch 1 · archived 0xb7c14d69b75441acb63e4254a1b4028f899d2a46Ethereum · Arbitrum · Hyperliquid
Epoch 2 · active address published with the first buy (pre-start)

Every archived holding row also carries its own explorer link — one click from any figure to the chain that produced it.

Capture

A scheduled job runs at 05:10 UTC every day and records the PREVIOUS completed UTC day — behaviour covers the whole day, market fields use that day's closes, holdings are the live read at capture time, stamped. The hour is fixed and stated here because determinism is part of the method. Transient failures retry once; a hard failure writes a status "missing" record — the gap itself is recorded, never dressed as data.

Gap policy

Days marked as gaps have no captured data — the capture job failed or did not run. A gap stays a gap; the archive never fills one in.

Null means unknown or not read — never zero, and never interpolated. A pre-start day records that nothing was asserted, which is a different claim than an empty wallet.

Corrections

A record that changes after first write carries a corrections entry naming when it changed. The entry is part of the record itself — visible on these pages and in the API — so a corrected figure and its history travel together. Silent rewrites are not how this archive works.

Witness

The monthly email is this archive's external witness: each issue carries the month's figures and the policy hash current at send time. Once sent it sits in subscribers' inboxes, where the site owner cannot edit it — those copies are the record of what this site said, and when.

Schema (v1)

datethe completed UTC day the record describes (file name = date.json)
capturedAtUTC timestamp of the capture run
epochchapter id + label + preStart flag — records carry their epoch
statusok · partial (some sections failed) · missing (capture failed)
errors[]which section failed and why — a partial never looks complete
corrections[]appended when a written record changes on re-capture
holdings[]per-asset amount, price, value, source address + explorer link
portfoliototal value, contributed/withdrawn to date, growth, realized/unrealized, avg cost
behaviourcontribution (bool + amount + tx refs), buys, sells, closed trades (R only), streaks
marketBTC close, ATH distance, cycle position (estimates flagged), S&P proxy (SPY) close
purchasingPowerEUR value and salary-months — null until a sourced constant exists
sealedNotereserved schema field for future sealed notes — unused today

Open data

/api/snapshots.json — paginated daily records · /api/snapshot/[date] — one day · /api/period/[type]/[id] — aggregated period stats (week · month · year · epoch) · /api/snapshots.csv — the full series as CSV · /api/on-this-day — the lookback as plain text. Records that fail validation appear as state "invalid" in the JSON feed and are absent from the CSV — a visible gap with a reason, never a silent skip.

Coverage: 2026-07-202026-07-24, 5 daily records.

Purchasing-power constant

The EUR translation renders as a gap until an officially sourced average-net-salary series is configured (currently: TBD — owner supplies an official statistics series; last updated 2026-07-25). Until then the metric stays null — never a guess. When it lands it will be a secondary view, never a headline figure.