Skip to content

Repository files navigation

silicon·eras

An interactive data-visualization explorable of consumer-hardware history, 1975–2026 — what a desktop, laptop, and GPU shipped with (RAM, storage, clock, cores/threads, VRAM, battery) and what it cost, across a 12-era timeline viewable through three switchable era schemes.

Built as a Dioxus 0.7 (Rust → WebAssembly) app. It embeds into dhilipsiva.dev at /silicon-eras/.

All values are representative (plausible, sourced-where-noted, not exhaustively cited) — the UI says so. Improving the data is a one-file change.

Views

  • 01 trajectories — era-band chart; envelope (entry↔top) or 3-line tiers; log/linear; absolute or indexed (÷ first shipping era); plateau guides; landmark pins.
  • 02 price — 4 series (desktop/laptop typical, gpu mainstream + thin flagship); 2026-USD ↔ nominal; a budget time machine ($ input + era scrubber → the best tier that budget bought).
  • 03 transitions — 5 categorical swimlanes (storage · os · graphics · laptop lcd · firmware) whose segment edges follow real years across whatever era scheme is active.
  • 04 inspect / compare — two era cards + a per-metric b ÷ a diff panel.
  • 05 spread — top÷entry lollipops per metric, always log.

Cross-cutting: three era schemes (named 12 / decades 6 / epochs 4), an era-range brush, an inspector drawer, keyboard control (←→ scrub · 1–5 views · L log · Enter drawer · Esc), URL-shareable state, and dark/light inherited from the host page.

Quickstart

Requires Rust ≥ 1.85, the wasm target, and dx (dioxus-cli) v0.7.9:

rustup target add wasm32-unknown-unknown
cargo install dioxus-cli --version 0.7.9

# dev server (hot reload) — the app crate lives in app/
cd app && dx serve
# → open the printed http://localhost:… URL

# production build (assets resolve under /silicon-eras/)
cd app && dx build --release --platform web --base-path silicon-eras

# tests (data parser + chart logic)
cargo test

On Windows, if dx build stalls in wasm-opt, add to app/Dioxus.toml:

[web.wasm-opt]
level = 0

Project structure

dataset.csv              the data (see “Editing the data” below)
app/                     Dioxus web app — build.rs parses dataset.csv → embedded JSON at build time
  src/                   components, state store, DOM glue
  assets/quine.css       vendored QUINE design tokens (dark + light)
crates/
  silicon-model/         typed data model (shared)
  silicon-parse/         CSV → model parser + warnings report (build-time only)
  silicon-viz/           pure chart logic (scales, aggregation, geometry) — no DOM, unit-tested

Design references (the source of truth for look/behavior): HANDOFF.md, Silicon Eras.dc.html (the original prototype), CLAUDE.md (port strategy), and DESIGN_DIVERGENCE.md (every place the real data forced a deviation).

Editing the data

All numbers come from dataset.csv — it's parsed to typed data at build time (by crates/silicon-parse) and baked into the wasm, so a data edit + rebuild is all it takes. There is no database and no runtime fetch.

Format. Long CSV, RFC-4180: one row per table × era × tiertable ∈ {desktop, laptop, gpu}, tier ∈ {entry, typical, top}. Each era therefore has 3 rows per table. The 21 columns:

column meaning
table desktop | laptop | gpu
era_label, era_start, era_end era name + its real-year span (a table's eras must share the same year spans)
tier entry | typical | top
cpu_or_gpu chip/label (free text)
clock, cores_threads, ram, storage, vram, battery_life the numeric metrics
rom_firmware, graphics_display, os categorical prose (firmware/graphics/os)
price_nominal_usd, price_2026_usd prices (integers) — fill what you have
landmark_price_anchor, correction_notes free-text notes
confidence documented | representative_estimate
source_urls one or more URLs joined by ;

Value formats the parser understands:

  • Numbers + units: 4 KB, 2.8 GHz, 16 GB. Decimal units — bytes/KB/MB/GB/TB, Hz/kHz/MHz/GHz; battery in hours (~8h).
  • Ranges: 16-64 KB{min, max, mid}; units may cross within a range (256 bytes-1 KB, 512 KB-1 MB). Trailing type/qualifier text is ignored (768 MB GDDR3, 16 GB (Copilot+ floor)).
  • Cores: 8 cores / 16 threads, 1 core; 2 threads (HT), 6-8 cores (cores → primary, threads → secondary).
  • No value: none, shared, n/a, or an empty cell → treated as null (never zero).
  • Estimate: a cell with ~, up to, or , or a row with confidence = representative_estimate → drawn dashed with a marker.
  • Prices: plain integers (4600). Leave blank where unknown — the app shows n/a / no price data honestly (e.g. GPU prices aren't in the dataset yet).
  • source_urls: split on ; (not ,). ⚠️ Any field containing a comma must be double-quoted (a URL with a comma, a note, etc.) or the row will mis-parse.

To add or update data:

  1. Edit dataset.csv (keep RFC-4180 quoting — quote fields with commas).
  2. Validate: cargo test -p silicon-parse. The whole-dataset test asserts the shape and that every cell parses; build.rs also writes a warnings report to app/target/**/warnings.txt for any cell it couldn't fully parse.
  3. See it: cd app && dx serve (build.rs re-parses on change).

Propose an edit via GitHub: the app's ⤓ edit data header link opens dataset.csv here — send a PR; a redeploy picks it up automatically (the data is parsed at build time).

Bigger changes: adding an era = add its 3 tiers × the applicable tables as new rows (eras are derived from the CSV). Adding a new metric or swimlane is a code change (crates/silicon-model + crates/silicon-parse), not data-only.

License

MIT OR Apache-2.0.

About

Consumer hardware, 1975–2026: an interactive data-viz explorable in Rust + Dioxus/WASM.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages