Skip to content

About

Human Progress Dashboard — transhumanists.org

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

557 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation



🚀 transhumanists

Human Progress. Quantified.

A live dashboard of scientific, technological, and strategic breakthroughs — scraped, scored, and pinned on a world map.

🌐 transhumanists.github.io · GitHub org · facebook.com/transhumanistsBE


Dashboard world map

The front page renders a live equirectangular world map (assets/js/worldmap.js) with no external dependencies. The world is fitted inside the canvas at its natural 360:142 ratio and centred rather than stretched, so a phone-shaped canvas is never distorted and a degree of longitude is always the same number of pixels as a degree of latitude; geography is clipped to that fitted plate. The map provides:

  • Event dots colored by category (data/events.json), with a day/night terminator overlay and sun position
  • Click-to-pin tooltips — category, metric value, source, date, and a View source link to the original report. A popup stays docked at its marker so that link is reachable, for milestones and for Human Rights landmarks alike
  • Category legend (CATEGORIES) with per-vertical event counts, plus a bulk-visibility eye that hides or restores every category at once. It follows the per-row switches in both directions — hiding categories one at a time closes it, re-selecting a single one reopens it — and deliberately leaves the operational layers below it alone
  • Operational layers, each with its own switch and count: Conflict Zones, Crisis Zones, Alliance & Defence Policy, Ground & Fleet Deployments, and Human Rights Violations. These are map layers rather than categories, and all of them are off by default. Alliance & Defence Policy nests inside Ground & Fleet Deployments and switches with its parent
  • Interaction — drag to pan, wheel/double-click/+/- to zoom, 0 to reset, and + / − / ⟲ buttons in the overlay
  • Keyboard accessible (arrow keys pan, +/- zoom, 0 reset)

Legend colors, stat tiles and tooltips all resolve categories through a canonical alias map, so legacy names such as Energy, Quantum and Defense are treated as Renewable Energy, Quantum Physics and Military & Defense.

Tests. The unit suites need nothing but Bun and Python:

python -m pytest scripts/ -q     # pipeline, validator, workflow lint
bun test test/                   # map widget unit tests

python scripts/verify_release.py runs everything CI runs, in CI's order, plus the determinism gate, and is what a local pre-push hook calls. It compares your Bun against the version CI pins and says so, because a green run on the wrong Bun is the failure mode it exists to catch. --skip-determinism is the fast inner loop and --also-bun /path/to/other-bun cross-checks the JS suite against a second toolchain. The pinned version itself lives in .bun-version, so the toolchain is declared once in the repository instead of only in the workflow YAML. verify_release.py treats that file as the local expectation and still compares it against the version CI installs, so the two drifting apart is reported rather than silently accepted.

Geocoding from the article. python scripts/article_geocode.py --report shows what still has no location and why - including the "ambiguous" and "uncorroborated" refusals, which is where the honest gaps are. --refresh fetches article bodies for those records and stores the derived outcome (coordinate, confidence, evidence) in data/geocode_cache.json; it deliberately never keeps the fetched text, since everything under data/ is published and third-party prose does not belong on the site. --apply writes the resolved coordinates back.

Evidence is scored rather than first-matched: title outranks summary, an affiliation outranks both, and a record only gets a dot when two independent routes agree or it beats a rival by a clear margin. Everything else stays unlocated on purpose - a missing dot is visibly missing, a wrong one is confidently wrong. Fetching is limited to public addresses, and each redirect hop is re-checked, because the URLs come from an upstream this repository does not control.

Where a dot came from. Every published event and archive record carries location_confidence, naming the evidence pass that placed it: stated (the upstream record had its own coordinate), institution (a lab named in the text), place, subcategory, source (the publisher's HQ — a guess), or unlocated. The current database is 92 stated, 5 source, 2 place, 6 unlocated, so the five publisher-placed dots are identifiable rather than being silently mixed in with the well-sourced ones. scripts/location_contract.py holds the single definition of what counts as "no location"; the pipeline, the validators and the coverage report all call it rather than repeating the rule.

Auditing the data. python scripts/check_data.py validates every published data file, including the append-only archive. python scripts/coverage_report.py answers the two questions validation cannot: which milestones are unlocated or wrongly geocoded, and which years are empty on the slider. Read-only; --json for CI. It fails the build only on null-island - a coordinate of exactly (0, 0), which is upstream's "location unknown" sentinel and plots a dot in the Gulf of Guinea. Low coverage and unlocated records are reported but never fail anything, because they are a filling backlog rather than a regression:

$ python scripts/coverage_report.py
  unique milestones      106  (from 254 records, 148 duplicated across files)
  geocoded              92
  unlocated             14   (no dot on the map - correct, not a bug)

  years 1945-2026  populated 31 / 82   empty 51
  empty years: 1946-1952, 1955-1956, ... 2024-2025

Point it at a candidate data set with WORLDMAP_DATA_DIR=/path/to/data. The unlocated list is the geocoding backlog: each row is a record with evidence (title, summary, source, subcategory) that geocode_milestone() can work from.

python scripts/publish_invariants.py asserts the properties that only make sense across the whole set of files: no origin sentinel anywhere in the payload tree, only known location_confidence values, no record claiming located: true without a usable coordinate, and every live milestone present in the archive so the year slider's history cannot silently lose records. It runs in CI, in verify_release, and in the cron before it is allowed to commit.

--snapshot appends to data/coverage_history.json, but only when the findings actually change, so that file is a changelog of progress toward filling the year gaps rather than a timestamp every six hours.

Auditing metric comparability. python scripts/check_data.py validates the shape of a metric - present, right types, right ranges. It cannot tell whether the metric is comparable to its neighbours, and that is the thing that silently broke when the scrapers widened their source list: the record count went up, so the run looked like progress, while the share of records carrying a number and a unit fell. A record whose value is its own title renders as a number-shaped blank - it counts, it appears, and it can never be ranked against anything.

python scripts/metric_coverage.py answers that, per (category, subcategory):

$ python scripts/metric_coverage.py
  category                     subcategory             recs    cmp coherence  units
  Quantum Physics              quantum_supremacy          2      2     0.50  qubitsx1, qvx1  <-- mixed units
  Spaceflight & Aeronautics    launch                     6      1     1.00  tonnesx1  <-- mostly prose

  total 110 records · 57 comparable (51.8%) · 0 unitless · 53 prose

cmp counts records with a number and a unit. coherence is the largest share of any one unit in the subcategory: below 1.00 means the numbers there cannot be ranked against each other at all, however many of them there are. That is the subtler half of "comparable", and it is the half that broke - qubits against qv, MJ against minutes. Cosmetic spelling (% vs percent) is normalised away first, but qualifiers are not: physical qubits and logical qubits are different quantities and stay flagged.

--gate is the part CI runs. It fails when a subcategory becomes less comparable than the recorded baseline, when a new subcategory mixes units, or when a metric that was extractable is republished as prose. Adding records never fails it, and the debt already on the baseline is reported rather than enforced - a gate that is red from day one is a gate nobody reads. data/metric_coverage_baseline.json is therefore a ratchet: when comparability genuinely improves, re-record it with --update-baseline so the bar moves up rather than drifting downward silently.

The upstream extractor carries the matching instruction, including a per-category contract naming the one quantity each subcategory tracks; see llm/score_milestone.py in transhumanists/apis, which pins it with tests/test_metric_prompt.py.

GitHub Actions runs six jobs on every push/PR to main: the JS suite and a static parse check, the Python suites, data validation, a determinism gate over two regenerations, a Jekyll build for Pages, and real-browser layout checks.

Browser checks. e2e/ holds Playwright specs that measure the layout a browser actually produces, at 1440px and 390px, against the shipped CSS and JS. They assert measurements rather than pixel baselines — a baseline needs a human to approve the current appearance and then fails on every legitimate restyle — and CI publishes the screenshots as artifacts for anyone who wants to look.

bun install
bunx playwright install chromium
bunx playwright test

The unit suite runs against a hand-written DOM fake, which is fast but cannot see a frame that is too tall or a legend that leaves its container. Both shipped once. The browser checks are what caught them.

Note: bun install under a newer Bun rewrites bun.lock in a format CI's pinned Bun cannot read. Regenerate it with the pinned version; a test enforces this.


The 9 Verticals We Track

Listed in legend order. CATEGORY_LEGEND in assets/js/worldmap.js is the authority.

🧬 Biotechnology & Biohacking — gene editing, implants, microscopy, longevity, synthetic biology, neuroscience, grinder/DIY biohacking 🧠 Computing & AGI — frontier models, agentic AI, GPU efficiency, benchmarks ⚛️ Quantum Physics — qubit counts, error correction, time crystals, supremacy, networking ⚡ Renewable Energy — fusion, solar efficiency, battery density, wind, storage 🚚 Mobility & Logistics — autonomy, freight, ports, rail, aviation, last-mile 🛡️ Cybersecurity — exploits, mitigations, encryption, threat intel, zero-days 🤖 Robotics & Drones — humanoids, manipulation, industrial and surgical robotics, and drone flight time, range, endurance and payload records 🚀 Spaceflight & Aeronautics — launch, payload, deep space, hypersonic, reusability 🌍 Military & Defense — range, radius, fleet movements, contracts, air defense, naval, cyber ops

Biotechnology & Biohacking is one category drawn in two colors, not two categories.


Pipeline

80+ RSS feeds → LLM scoring → milestones.json → dashboard + Facebook
                  ↑
          self-healing source checker

Every 6 hours, transhumanists/apis runs the pipeline and commits new data here and to transhumanists/milestones.


Repositories

Repo What
transhumanists The organization — profile, dashboard SVG, cross-repo branding
transhumanists/milestones Canonical milestone database (Markdown + JSON)
transhumanists/apis RSS scraper, LLM scorer, Facebook poster, self-healer
transhumanists/transhumanists.github.io This dashboard site

Cross-Profile Branding

All SVGs across the transhumanists, FrenzyPenguin Media, and neohiro readmes/profile pages share a uniform design system: dark background, JetBrains Mono + Space Grotesk typography, color-coded category dots, and a tiny FrenzyPenguin Media watermark in the bottom-right corner that links back to frenzypenguin-media.github.io.


Made with ♥ by FrenzyPenguin Media — a neohiro project.


🔗 Related & Sponsorship

Visitors

About

Human Progress Dashboard — transhumanists.org

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages