vapora
Understand the data

How Vapora works

  1. Resolve the target and collect profiles through the Steam Web API.
  2. Walk friendships breadth first, saving checkpoints after completed scan units.
  3. Build an undirected friendship graph with separate optional group edges.
  4. Compute communities, centrality, friend rankings and location signals.
  5. Save reports and exports in a unique run folder.

Vapora uses public API observations and local history files. Account history is fetched separately after account verification or selection; blocked requests remain visible and do not stop Steam scans. Missing observations and truncated graphs remain visible in the report.

Shared engine

LayerMain source
CLI argument parsing and dispatchsrc/cli.ts
Target parsingsrc/ids.ts
Steam observations, pacing and retriessrc/steam.ts
Breadth-first collection and checkpoint frontiersrc/scanner.ts
Graph construction, ranking and exportssrc/analysis.ts, src/scoring.ts
Validated local persistencesrc/storage.ts, src/model.ts
Loopback HTTP serversrc/server.ts
History collection and normalizationsrc/history-browser.ts, src/history-provider.ts, src/history.ts
Browser rendererui/
Electron host and fixed preload bridgescripts/desktop.mjs, scripts/desktop-preload.cjs

The TypeScript + Effect application shares collection, analysis and storage across all three launch modes. The desktop renderer is isolated from Node and uses a fixed IPC surface. The history collector uses an independent temporary Chromium session; it does not receive the Steam API key or renderer bridge.

Why saved observations matter

A checkpoint stores settings, profiles and the pending frontier. Analysis and CSV files are derived from that local record. This enables resume, offline reranking and export rebuilding, while retaining coverage and observation dates. A history refresh is separate from a Steam scan and never blocks it.

Edit this page on GitHub ↗

On this page