Methodology

How the counter works

The counter turns annual global primary-energy statistics into a continuously updating Kardashev-Sagan index and keeps the browser synchronized without hammering the backend.

Kardashev and Sagan

Kardashev described civilization types in terms of energy use. Carl Sagan extended the scale to fractional values so modern civilizations can be placed between Type 0 and Type I instead of jumping only between whole numbers.

Data source

The app downloads the public CSV from Our World in Data, keeps only rows where Entity = World, and sums the valid energy-source columns for each year to reconstruct total global primary-energy use from 1800 onward.

Values before 1800 are illustrative estimates connecting a symbolic pre-fire baseline with the earliest global energy reconstruction. They are not direct historical measurements.

Energy to power

OWID reports annual primary-energy consumption in TWh. The app converts that yearly energy into average power:

power_watts = energy_twh * 1e12 / (365.2425 * 24)

Sagan index

Once the average power is known, the index is computed as:

K = (log10(power_watts) - 6) / 10

Anchors and interpolation

Each annual data point is anchored at the middle of its year: anchor = year + 0.5. Historical values between anchors are interpolated with a monotonic PCHIP cubic Hermite curve, matching the logic of the supplied reference script.

Milestones from 1800 to 1964 are marked as historical reconstructions. From 1965 onward, the data basis is methodologically more modern and is labeled as compiled energy data.

Milestones before 1800 use an inverse-log illustrative reconstruction that connects a symbolic pre-fire baseline to the earliest OWID world-energy reconstruction at 1800.

Future estimate

After the last official annual point, the app extrapolates the index using a linear regression of the last ten available annual K values. The trend may be positive, zero, or negative.

Cache and resilience

Successful downloads are cached atomically in app/data/primary_energy_cache.csv. If the network fails later, the app keeps running from that cache. The current model state is also written to app/data/state.json.

Browser synchronization

The page fetches /api/index once on load, continues the value locally with performance.now(), resynchronizes every five minutes, and immediately resyncs again when the tab becomes visible.

CURRENT DISPLAY

0.7339889497

OFFICIAL DATA YEAR

2024

MODEL MODE

estimated

Background photo by Carl Wang