[modularization] Phase 2: Extract data layer — gitea, weather, bitcoin, loaders #460

Merged
Timmy merged 1 commits from claude/issue-421 into main 2026-03-24 21:28:05 +00:00
Owner

Phase 2 Data Layer Extraction (Refs #421)

Created 4 data modules under modules/data/:

  • gitea.js — Centralized Gitea API (commits, PRs, agent status) with shared caches
  • weather.js — Open-Meteo weather data fetch (pure data, no scene effects)
  • bitcoin.js — Blockstream block height polling, writes to S
  • loaders.js — Static file loaders (portals.json, sovereignty-status.json, SOUL.md) with caching

Updated 7 consumer modules:

  • panels.js, heatmap.js, extras.js, portals.js, effects.js, oath.js, audio.js

Deduplication wins:

  • Gitea token centralized (was hardcoded in 3 files)
  • SOUL.md cached (was fetched 3x independently)
  • Nexus commits shared cache (was fetched 2x independently)

Remaining fetch() calls (out of scope, future phases):

  • bookshelves.js (2 calls — Gitea-related, could move to data/gitea.js)
  • weather.js (2 calls — portal health check + weather API, weather fetch already extracted to data/weather.js but visual consumer still calls its own fetchWeather)

All 11 modified files pass node --check. No visual regressions expected — same data, same state writes, just centralized.

Refs #421

## Phase 2 Data Layer Extraction (Refs #421) ### Created 4 data modules under `modules/data/`: - **gitea.js** — Centralized Gitea API (commits, PRs, agent status) with shared caches - **weather.js** — Open-Meteo weather data fetch (pure data, no scene effects) - **bitcoin.js** — Blockstream block height polling, writes to S - **loaders.js** — Static file loaders (portals.json, sovereignty-status.json, SOUL.md) with caching ### Updated 7 consumer modules: - panels.js, heatmap.js, extras.js, portals.js, effects.js, oath.js, audio.js ### Deduplication wins: - Gitea token centralized (was hardcoded in 3 files) - SOUL.md cached (was fetched 3x independently) - Nexus commits shared cache (was fetched 2x independently) ### Remaining fetch() calls (out of scope, future phases): - bookshelves.js (2 calls — Gitea-related, could move to data/gitea.js) - weather.js (2 calls — portal health check + weather API, weather fetch already extracted to data/weather.js but visual consumer still calls its own fetchWeather) All 11 modified files pass `node --check`. No visual regressions expected — same data, same state writes, just centralized. Refs #421
Timmy added 1 commit 2026-03-24 21:26:11 +00:00
[modularization] Phase 2: Extract data layer — gitea, weather, bitcoin, loaders
Some checks failed
CI / validate (pull_request) Failing after 14s
CI / auto-merge (pull_request) Has been skipped
a1eb0ebb90
Created modules/data/ with 4 data modules:
- data/gitea.js: Centralized Gitea API (commits, PRs, agent status)
- data/weather.js: Open-Meteo weather data fetch
- data/bitcoin.js: Blockstream block height polling
- data/loaders.js: Static file loaders (portals.json, sovereignty-status.json, SOUL.md)

Updated consumers to use data modules instead of direct fetch():
- panels.js: Uses data/gitea.js for agent status
- heatmap.js: Uses data/gitea.js for commit data
- extras.js: Uses data/gitea.js for timelapse, data/bitcoin.js for block height
- portals.js: Uses data/loaders.js for portals.json
- effects.js: Uses data/loaders.js for sovereignty-status.json
- oath.js: Uses data/loaders.js for SOUL.md
- audio.js: Uses data/loaders.js for SOUL.md

Deduplication wins:
- Gitea token centralized (was hardcoded in 3 files)
- SOUL.md now cached (was fetched 3x independently)
- Nexus commits shared cache (was fetched 2x independently)

Refs #421
Timmy merged commit 764b617a2a into main 2026-03-24 21:28:05 +00:00
Sign in to join this conversation.