Nhughes09 commited on
Commit
1e58b99
·
1 Parent(s): 7d795c5

Redesign Prediction Registry UI for Weekly Live Tests Dashboard

Browse files
Files changed (5) hide show
  1. app.js +58 -87
  2. index.html +52 -85
  3. make_weekly_js.js +4 -0
  4. style.css +223 -235
  5. weekly.js +135 -0
app.js CHANGED
@@ -1,106 +1,119 @@
1
  // DOME COSMOLOGY - VANILLA JS FRONTEND
2
 
3
- // 1. Initial Data Load & AI Injection
4
  document.addEventListener('DOMContentLoaded', () => {
5
- // Inject data into the hidden LD+JSON script tag for AI scrapers (Claude/Antigravity)
6
  const aiScriptNode = document.getElementById('dome-predictions-data');
7
  if (aiScriptNode) {
8
- aiScriptNode.textContent = JSON.stringify(PREDICTIONS, null, 2);
 
 
 
 
 
9
  }
10
 
 
 
 
 
 
 
11
  initScorecard();
12
  renderGrids();
13
  initNav();
14
- initCountdown();
15
  });
16
 
17
- // 2. Scorecard Calculation
18
  function initScorecard() {
19
  const retrospective = PREDICTIONS.filter(p => p.status === 'confirmed').length;
20
  const falsified = PREDICTIONS.filter(p => p.status === 'falsified').length;
21
  const advance = PREDICTIONS.filter(p => p.status === 'pending').length;
 
22
 
23
  const html = `
24
- <div class="score-hud"><span>${retrospective}</span> RETROSPECTIVE</div>
25
- <div class="score-hud"><span>${advance}</span> ADVANCE</div>
 
26
  <div class="score-hud" style="color:var(--status-falsified)"><span>${falsified}</span> FALSIFIED</div>
27
- <div class="score-hud"><span>${retrospective + advance}</span> TOTAL</div>
28
  `;
29
 
30
  document.getElementById('scorecard').innerHTML = html;
31
  }
32
 
33
- // 3. Grid Rendering
34
- function createCardHTML(p) {
35
  let resultLine = '';
36
  if (p.status !== 'pending') {
37
  resultLine = `
38
- <div class="data-row" style="color:var(--status-${p.status}); margin-top:0.5rem; border-top:1px dashed #333; padding-top:0.5rem;">
39
- <span class="data-label">RESULT:</span>
40
- <span class="data-val">${p.result_value !== null ? p.result_value : ''} (${p.result_date ? p.result_date.split('T')[0] : ''})</span>
 
 
41
  </div>`;
42
  }
43
 
 
 
44
  return `
45
  <div class="pred-card">
46
  <div class="card-header">
47
  <span class="id-badge">${p.id}</span>
48
- <span class="status-badge ${p.status}">${p.status.toUpperCase()}</span>
49
  </div>
50
  <h3 class="card-title">${p.title}</h3>
51
  <p class="card-desc">${p.description}</p>
52
 
53
- <div class="data-row">
54
- <span class="data-label">TARGET DATE:</span>
55
- <span class="data-val" style="color:var(--acc-gold)">${p.test_date ? p.test_date.split('T')[0] : 'Ongoing'}</span>
56
- </div>
57
- <div class="data-row">
58
- <span class="data-label">PREDICTION:</span>
59
- <span class="data-val">${p.prediction.value !== null ? p.prediction.value : ''} ${p.prediction.unit || ''}</span>
 
 
60
  </div>
61
 
62
  ${resultLine}
63
 
64
- <div class="mech-box">
65
- <strong>MECHANISM:</strong> ${p.mechanism}
 
 
 
 
 
66
  </div>
67
-
68
- <div class="hash-foot">SHA256: ${p.sha256}</div>
69
  </div>
70
  `;
71
  }
72
 
73
  function renderGrids() {
74
- const allGrid = document.getElementById('all-grid');
75
  const confirmedGrid = document.getElementById('confirmed-grid');
76
  const pendingGrid = document.getElementById('pending-grid');
77
- const falsifiedGrid = document.getElementById('falsified-grid');
78
- const dashboardGrid = document.getElementById('dashboard-grid');
79
-
80
- let allHTML = '', confHTML = '', falsHTML = '', dashHTML = '', pendingHTML = '';
81
 
 
 
82
  PREDICTIONS.forEach(p => {
83
- const card = createCardHTML(p);
84
- allHTML += card;
85
-
86
  if (p.status === 'confirmed') confHTML += card;
87
- if (p.status === 'falsified') falsHTML += card;
88
  if (p.status === 'pending') pendingHTML += card;
89
-
90
- // Dashboard shows highest priority pending items (Eclipse 2026 + Core SAA mechanics)
91
- if (p.status === 'pending' && dashHTML.length < 15000) {
92
- dashHTML += card;
93
- }
94
  });
95
 
96
- if (allGrid) allGrid.innerHTML = allHTML;
97
- if (confirmedGrid) confirmedGrid.innerHTML = confHTML || '<div class="text-block">NO RECORDS</div>';
98
- if (pendingGrid) pendingGrid.innerHTML = pendingHTML || '<div class="text-block">NO RECORDS</div>';
99
- if (falsifiedGrid) falsifiedGrid.innerHTML = falsHTML || '<div class="text-block">NO RECORDS</div>';
100
- if (dashboardGrid) dashboardGrid.innerHTML = dashHTML;
 
 
 
 
 
 
 
101
  }
102
 
103
- // 4. Tab Navigation
104
  function initNav() {
105
  const btns = document.querySelectorAll('.nav-btn');
106
  const sections = document.querySelectorAll('.view-section');
@@ -115,46 +128,4 @@ function initNav() {
115
  document.getElementById(target).classList.add('active');
116
  });
117
  });
118
-
119
- // Search bar functionality
120
- document.getElementById('search-bar').addEventListener('input', (e) => {
121
- const term = e.target.value.toLowerCase();
122
- const cards = document.querySelectorAll('#all-grid .pred-card');
123
-
124
- cards.forEach(card => {
125
- const text = card.textContent.toLowerCase();
126
- if (card.style) {
127
- if (text.includes(term)) {
128
- card.style.display = 'flex';
129
- } else {
130
- card.style.display = 'none';
131
- }
132
- }
133
- });
134
- });
135
- }
136
-
137
- // 5. August 12 2026 Countdown Engine
138
- function initCountdown() {
139
- const targetDate = new Date('2026-08-12T18:00:00Z').getTime();
140
- const display = document.getElementById('master-countdown');
141
-
142
- if(!display) return;
143
-
144
- setInterval(() => {
145
- const now = new Date().getTime();
146
- const distance = targetDate - now;
147
-
148
- if (distance < 0) {
149
- display.innerHTML = "ECLIPSE WINDOW ACTIVE";
150
- return;
151
- }
152
-
153
- const d = Math.floor(distance / (1000 * 60 * 60 * 24));
154
- const h = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
155
- const m = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
156
- const s = Math.floor((distance % (1000 * 60)) / 1000);
157
-
158
- display.innerHTML = `T-MINUS ${d.toString().padStart(3, '0')}:${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
159
- }, 1000);
160
  }
 
1
  // DOME COSMOLOGY - VANILLA JS FRONTEND
2
 
 
3
  document.addEventListener('DOMContentLoaded', () => {
4
+ // Inject master data into the hidden LD+JSON script tag for AI scrapers
5
  const aiScriptNode = document.getElementById('dome-predictions-data');
6
  if (aiScriptNode) {
7
+ const fullPayload = {
8
+ metadata: { version: "V49.2", updated: new Date().toISOString() },
9
+ master_predictions: PREDICTIONS,
10
+ weekly_active_tests: WEEKLY_DATA
11
+ };
12
+ aiScriptNode.textContent = JSON.stringify(fullPayload, null, 2);
13
  }
14
 
15
+ // Set the weekly label
16
+ const weekLabel = document.getElementById('week-label');
17
+ if(weekLabel && typeof WEEKLY_DATA !== 'undefined') {
18
+ weekLabel.textContent = `${WEEKLY_DATA.week_start} to ${WEEKLY_DATA.week_end}`;
19
+ }
20
+
21
  initScorecard();
22
  renderGrids();
23
  initNav();
 
24
  });
25
 
 
26
  function initScorecard() {
27
  const retrospective = PREDICTIONS.filter(p => p.status === 'confirmed').length;
28
  const falsified = PREDICTIONS.filter(p => p.status === 'falsified').length;
29
  const advance = PREDICTIONS.filter(p => p.status === 'pending').length;
30
+ const weeklyCount = typeof WEEKLY_DATA !== 'undefined' ? WEEKLY_DATA.predictions.length : 0;
31
 
32
  const html = `
33
+ <div class="score-hud"><span>${retrospective}</span> WINS</div>
34
+ <div class="score-hud" style="color:var(--accent-blue);"><span>${weeklyCount}</span> LIVE TESTS</div>
35
+ <div class="score-hud"><span>${advance}</span> PENDING</div>
36
  <div class="score-hud" style="color:var(--status-falsified)"><span>${falsified}</span> FALSIFIED</div>
 
37
  `;
38
 
39
  document.getElementById('scorecard').innerHTML = html;
40
  }
41
 
42
+ function createCardHTML(p, isWeekly = false) {
 
43
  let resultLine = '';
44
  if (p.status !== 'pending') {
45
  resultLine = `
46
+ <div style="margin-top:1rem; padding-top:1rem; border-top:1px dashed var(--border);">
47
+ <div class="data-col">
48
+ <span class="data-label" style="color:var(--status-${p.status})">RESULT:</span>
49
+ <span class="data-val">${p.result_value !== null ? p.result_value : ''} (${p.result_date ? p.result_date.split('T')[0] : ''})</span>
50
+ </div>
51
  </div>`;
52
  }
53
 
54
+ const testDateDisplay = isWeekly ? 'Live This Week' : (p.test_date ? p.test_date.split('T')[0] : 'Ongoing');
55
+
56
  return `
57
  <div class="pred-card">
58
  <div class="card-header">
59
  <span class="id-badge">${p.id}</span>
60
+ <span class="status-badge ${p.status}">${p.status}</span>
61
  </div>
62
  <h3 class="card-title">${p.title}</h3>
63
  <p class="card-desc">${p.description}</p>
64
 
65
+ <div class="data-grid">
66
+ <div class="data-col">
67
+ <span class="data-label">TARGET</span>
68
+ <span class="data-val" style="color:var(--accent-gold); font-size:1rem;">${testDateDisplay}</span>
69
+ </div>
70
+ <div class="data-col">
71
+ <span class="data-label">PREDICTION</span>
72
+ <span class="data-val">${p.prediction.value !== null ? p.prediction.value : ''} <span style="font-size:0.8rem">${p.prediction.unit || ''}</span></span>
73
+ </div>
74
  </div>
75
 
76
  ${resultLine}
77
 
78
+ <div class="card-actions">
79
+ <div class="mech-text"><strong>Mechanism:</strong> ${p.mechanism}</div>
80
+ <div class="mech-text" style="margin-bottom:0.75rem;"><strong>Source:</strong> ${p.data_source || 'INTERMAGNET'}</div>
81
+
82
+ ${isWeekly ? `<a href="#" class="verify-btn" onclick="alert('Verification protocol will connect to: ${p.data_source}\\n\\nWaiting for Claude API implementation to pull live data.'); return false;">VERIFY LIVE DATA</a>` : ''}
83
+
84
+ <div class="hash-foot">SHA256: ${p.sha256}</div>
85
  </div>
 
 
86
  </div>
87
  `;
88
  }
89
 
90
  function renderGrids() {
 
91
  const confirmedGrid = document.getElementById('confirmed-grid');
92
  const pendingGrid = document.getElementById('pending-grid');
93
+ const weeklyGrid = document.getElementById('weekly-grid');
 
 
 
94
 
95
+ // 1. Render the Long-Term arrays
96
+ let confHTML = '', pendingHTML = '';
97
  PREDICTIONS.forEach(p => {
98
+ const card = createCardHTML(p, false);
 
 
99
  if (p.status === 'confirmed') confHTML += card;
 
100
  if (p.status === 'pending') pendingHTML += card;
 
 
 
 
 
101
  });
102
 
103
+ if (confirmedGrid) confirmedGrid.innerHTML = confHTML;
104
+ if (pendingGrid) pendingGrid.innerHTML = pendingHTML;
105
+
106
+ // 2. Render the new Weekly active tests
107
+ let weekHTML = '';
108
+ if (typeof WEEKLY_DATA !== 'undefined' && WEEKLY_DATA.predictions) {
109
+ WEEKLY_DATA.predictions.forEach(p => {
110
+ weekHTML += createCardHTML(p, true);
111
+ });
112
+ }
113
+
114
+ if (weeklyGrid) weeklyGrid.innerHTML = weekHTML || '<p>No weekly data loaded.</p>';
115
  }
116
 
 
117
  function initNav() {
118
  const btns = document.querySelectorAll('.nav-btn');
119
  const sections = document.querySelectorAll('.view-section');
 
128
  document.getElementById(target).classList.add('active');
129
  });
130
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  }
index.html CHANGED
@@ -5,14 +5,11 @@
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>Dome Cosmology Live Predictions Registry</title>
7
  <link rel="stylesheet" href="style.css">
8
- <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Space+Mono:ital,wght@0,400;0,700;1,400&display=swap" rel="stylesheet">
9
  </head>
10
- <body class="terminal-theme">
11
-
12
- <div class="scanlines"></div>
13
 
14
  <header class="master-header">
15
- <h1>DOME COSMOLOGY PREDICTIONS REGISTRY</h1>
16
  <p class="subtitle">Validating the Aetheric Framework via Cryptographic Timestamped Mathematics</p>
17
 
18
  <div id="scorecard" class="scorecard-container">
@@ -20,112 +17,81 @@
20
  </div>
21
 
22
  <nav class="primary-nav">
23
- <button class="nav-btn active" data-target="home">HOME (ACTIVE)</button>
24
- <button class="nav-btn" data-target="all-predictions">ALL PREDICTIONS (20)</button>
25
- <button class="nav-btn" data-target="retrospective">1. RETROSPECTIVE CONFIRMATIONS</button>
26
- <button class="nav-btn" data-target="advance">2. ADVANCE PREDICTIONS</button>
27
- <button class="nav-btn" data-target="falsified">FALSIFIED (0)</button>
28
- <button class="nav-btn" data-target="framework">FRAMEWORK</button>
29
- <button class="nav-btn" data-target="verify">VERIFY HASH</button>
30
  </nav>
31
  </header>
32
 
33
  <main id="main-content">
34
- <!-- Dashboard View (Home) -->
35
- <section id="home" class="view-section active">
36
- <div class="countdown-bunker">
37
- <h2>NEXT SMOKING GUN OBSERVATION WINDOW:</h2>
38
- <h3>TOTAL SOLAR ECLIPSE (EUROPEAN PATH)</h3>
39
- <div id="master-countdown" class="timer-display">
40
- --:--:--:--
41
- </div>
42
- <p>Target Date: August 12, 2026 18:00 UTC</p>
43
  </div>
44
-
45
- <h2 class="section-title">FEATURED ADVANCE PREDICTIONS (2026 ECLIPSE)</h2>
46
- <div id="dashboard-grid" class="predictions-grid">
47
  <!-- Dynamically populated -->
48
  </div>
49
  </section>
50
 
51
- <!-- All Predictions -->
52
- <section id="all-predictions" class="view-section">
53
- <h2 class="section-title">FULL REGISTRY (ALL CATEGORIES)</h2>
54
- <div class="filters">
55
- <input type="text" id="search-bar" placeholder="SEARCH REGISTRY BY KEYWORD...">
56
- </div>
57
- <div id="all-grid" class="predictions-grid"></div>
58
- </section>
59
-
60
- <!-- Section 1: Retrospective Confirmations -->
61
- <section id="retrospective" class="view-section">
62
- <h2 class="section-title">SECTION 1: RETROSPECTIVE CONFIRMATIONS</h2>
63
- <div class="text-block" style="margin-bottom: 2rem;">
64
- <p><strong>Data the Dome model explains that the globe cannot causally explain.</strong></p>
65
- <p>These are historical phenomena with rigorous empirical data. While they were not registered on this platform prior to their measurement, the Dome Cosmology V48 mathematical framework explains them natively without ad-hoc insertions. These represent real architectural wins for the model.</p>
66
- </div>
67
- <div id="confirmed-grid" class="predictions-grid"></div>
68
- </section>
69
-
70
  <!-- Section 2: Advance Predictions -->
71
  <section id="advance" class="view-section">
72
- <h2 class="section-title">SECTION 2: ADVANCE PREDICTIONS</h2>
73
- <div class="text-block" style="margin-bottom: 2rem;">
74
- <p><strong>Registered March 6, 2026. Cryptographically timestamped.</strong></p>
75
- <p>These are the mathematical predictions that prove the model is genuinely predictive. Each active hypothesis has been generated in advance, assigned a falsifiable criteria, and cryptographically hashed before the observation window opens. The truth is not afraid of a test.</p>
76
  </div>
77
  <div id="pending-grid" class="predictions-grid"></div>
78
  </section>
79
 
80
- <!-- Falsified -->
81
- <section id="falsified" class="view-section">
82
- <h2 class="section-title">FALSIFIED (INTELLECTUAL HONESTY LOG)</h2>
83
- <div class="text-block" style="margin-bottom: 2rem;">
84
- <p>Predictions whose mathematical constraints were strictly violated by empirical observation. A robust framework does not hide its failures.</p>
85
- </div>
86
- <div id="falsified-grid" class="predictions-grid"></div>
87
- </section>
88
-
89
- <!-- Framework -->
90
- <section id="framework" class="view-section">
91
- <h2 class="section-title">DOME COSMOLOGY V48</h2>
92
- <div class="text-block">
93
- <p>This registry logs timestamped, falsifiable predictions derived from the Dome Cosmology framework (V48). The models depend strictly on electromagnetic wave propagation, second harmonic acoustic fluid dynamics, and aetheric pressure displacement constraints without relying on absolute Newtonian gravity mass assumptions.</p>
94
- <p>Predictions are evaluated through raw INTERMAGNET sensor pulls, CHAOS-7 drift anomalies, Schumann resonance telluric baselines, and unshielded spring gravimeter differentials.</p>
95
- <!-- Images can be placed here in the future: <img src="assets/images/placeholder.png" alt="Dome Concept"> -->
96
  </div>
 
97
  </section>
98
 
99
  <!-- Verification -->
100
  <section id="verify" class="view-section">
101
- <h2 class="section-title">🔐 CRYPTOGRAPHIC PROOF OF PREDICTION PRIORITY</h2>
102
 
103
- <div class="proof-box" style="margin-bottom:2rem;">
104
- <h3>Master Manifest (March 6, 2026)</h3>
105
- <p><strong>SHA-256:</strong> fb42b676fb9a5d71f6c97a40efebfb6ba028b3523a70c616e4b112e2b874e731</p>
106
- <p><strong>Bitcoin Block:</strong> Pending Confirmation</p>
107
- <p><strong>Block Timestamp:</strong> 2026-03-06 UTC</p>
108
- <p><strong>Transaction ID:</strong> <a style="color:var(--acc-gold);" href="#">View on Blockchain</a></p>
109
- <p><a href="proofs/predictions_manifest.json.ots" style="color:var(--acc-gold); font-weight:bold; text-decoration: underline;" download>📥 Download OpenTimestamps Proof File</a></p>
 
 
 
 
 
 
 
 
 
110
  </div>
111
 
112
- <div class="verification-steps" style="margin-bottom:2rem; padding:1rem; border:1px dashed var(--border-color);">
113
  <h3 style="color:#fff;">How to Verify Independently</h3>
114
- <ol style="margin-top:0.5rem; margin-left:1.5rem; color:var(--text-muted); font-size: 0.9rem;">
115
- <li>Install OpenTimestamps: <code>pip install opentimestamps-client</code></li>
116
- <li>Download the proof file: <code>wget https://predictions.nlhughes08.workers.dev/proofs/predictions_manifest.json.ots</code></li>
117
- <li>Verify: <code>ots verify predictions_manifest.json.ots</code></li>
118
- <li>Output will show the exact Bitcoin block and timestamp</li>
119
  </ol>
120
- <p class="note" style="margin-top:1rem; color:var(--acc-gold);"><em>This verification does NOT trust this website – it trusts the Bitcoin blockchain.</em></p>
121
  </div>
122
-
123
- <div class="proof-box">
124
- <h3>Weekly Prediction Manifests</h3>
125
- <p style="margin-bottom:1rem;">Each week's new predictions are individually timestamped:</p>
126
- <ul style="margin-left: 1.5rem;">
127
- <li><a href="proofs/weekly_predictions_2026-03-06.json.ots" style="color:var(--status-pending); text-decoration:underline;">Week of March 6, 2026</a></li>
128
- <li><em>Updated every Monday</em></li>
129
  </ul>
130
  </div>
131
  </section>
@@ -134,6 +100,7 @@
134
 
135
  <!-- Data Injection -->
136
  <script src="predictions.js"></script>
 
137
  <script src="app.js"></script>
138
 
139
  <!-- Hidden AI-Scraper Block -->
 
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>Dome Cosmology Live Predictions Registry</title>
7
  <link rel="stylesheet" href="style.css">
 
8
  </head>
9
+ <body>
 
 
10
 
11
  <header class="master-header">
12
+ <h1>DOME COSMOLOGY REGISTRY</h1>
13
  <p class="subtitle">Validating the Aetheric Framework via Cryptographic Timestamped Mathematics</p>
14
 
15
  <div id="scorecard" class="scorecard-container">
 
17
  </div>
18
 
19
  <nav class="primary-nav">
20
+ <button class="nav-btn active" data-target="weekly">THIS WEEK'S TESTS</button>
21
+ <button class="nav-btn" data-target="advance">LONG-TERM OUTLOOK</button>
22
+ <button class="nav-btn" data-target="retrospective">RETROSPECTIVE WINS</button>
23
+ <button class="nav-btn" data-target="verify">VERIFICATION</button>
 
 
 
24
  </nav>
25
  </header>
26
 
27
  <main id="main-content">
28
+ <!-- Dashboard View (Weekly) -->
29
+ <section id="weekly" class="view-section active">
30
+ <h2 class="section-title">ACTIVE TESTS: <span id="week-label" style="color:var(--accent-blue)"></span></h2>
31
+ <div class="text-block" style="margin-bottom: 2rem; color: var(--text-secondary); max-width: 800px;">
32
+ <p>These 8 mathematical predictions are being tested right now. You do not need to wait months to verify this cosmology model. Click <strong>Verify Live Data</strong> on any card to confirm the real-time physics against the declared timestamped values.</p>
 
 
 
 
33
  </div>
34
+ <div id="weekly-grid" class="predictions-grid">
 
 
35
  <!-- Dynamically populated -->
36
  </div>
37
  </section>
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  <!-- Section 2: Advance Predictions -->
40
  <section id="advance" class="view-section">
41
+ <h2 class="section-title">LONG-TERM ADVANCE PREDICTIONS</h2>
42
+ <div class="text-block" style="margin-bottom: 2rem; color: var(--text-secondary); max-width: 800px;">
43
+ <p>These are the macro-scale mathematical predictions awaiting major observation windows (like the 2026 Solar Eclipse). Each hypothesis is entirely falsifiable and cryptographically hashed before the observation window opens.</p>
 
44
  </div>
45
  <div id="pending-grid" class="predictions-grid"></div>
46
  </section>
47
 
48
+ <!-- Section 1: Retrospective Confirmations -->
49
+ <section id="retrospective" class="view-section">
50
+ <h2 class="section-title">RETROSPECTIVE CONFIRMATIONS</h2>
51
+ <div class="text-block" style="margin-bottom: 2rem; color: var(--text-secondary); max-width: 800px;">
52
+ <p>Data the Dome Cosmology model explains that the globe cannot causally explain.</p>
53
+ <p>These are historical anomalies with rigorous empirical data. While they were not registered on this platform prior to their measurement, the V48 mathematical framework explains them natively without ad-hoc insertions (e.g. Dark Matter, core dynamos). These represent the 26 structural pillars of the framework.</p>
 
 
 
 
 
 
 
 
 
 
54
  </div>
55
+ <div id="confirmed-grid" class="predictions-grid"></div>
56
  </section>
57
 
58
  <!-- Verification -->
59
  <section id="verify" class="view-section">
60
+ <h2 class="section-title">🔐 CRYPTOGRAPHIC PROOF OF PRIORITY</h2>
61
 
62
+ <div style="background:var(--bg-card); padding:2rem; border-radius:12px; border:1px solid var(--border); margin-bottom: 2rem;">
63
+ <h3 style="color:var(--text-primary); margin-bottom:1rem;">Master Manifest (March 6, 2026)</h3>
64
+ <p style="color:var(--text-secondary); font-size:0.95rem; margin-bottom:0.5rem;">All predictions are bundled into a SHA-256 manifest and mathematically etched onto the Bitcoin blockchain via OpenTimestamps.</p>
65
+
66
+ <div class="data-grid" style="margin-top:1.5rem;">
67
+ <div class="data-col">
68
+ <span class="data-label">SHA-256</span>
69
+ <span class="data-val" style="font-size:0.9rem; word-break:break-all;">fb42b676fb9a5d71f6c97a40efebfb6ba028b3523a70c616e4b112e2b874e731</span>
70
+ </div>
71
+ <div class="data-col">
72
+ <span class="data-label">Timestamp</span>
73
+ <span class="data-val">2026-03-06 UTC</span>
74
+ </div>
75
+ </div>
76
+
77
+ <a href="proofs/predictions_manifest.json.ots" class="verify-btn" style="display:inline-block; width:auto; padding:0.5rem 1.5rem; margin-top:1rem;" download>📥 Download Master .ots Proof</a>
78
  </div>
79
 
80
+ <div style="background:var(--bg-main); padding:2rem; border-radius:12px; border:1px dashed var(--border); margin-bottom: 2rem;">
81
  <h3 style="color:#fff;">How to Verify Independently</h3>
82
+ <ol style="margin-top:1rem; margin-left:1.5rem; color:var(--text-secondary); font-family:'JetBrains Mono', monospace; font-size: 0.9rem; line-height: 2;">
83
+ <li>pip install opentimestamps-client</li>
84
+ <li>wget https://predictions.nlhughes08.workers.dev/proofs/predictions_manifest.json.ots</li>
85
+ <li>ots verify predictions_manifest.json.ots</li>
 
86
  </ol>
87
+ <p style="margin-top:1.5rem; color:var(--accent-gold); font-size:0.9rem;"><em>This verification does NOT trust this website – it trusts the Bitcoin blockchain.</em></p>
88
  </div>
89
+
90
+ <div style="background:var(--bg-card); padding:2rem; border-radius:12px; border:1px solid var(--border);">
91
+ <h3 style="color:var(--text-primary); margin-bottom:1rem;">Weekly Prediction Manifests</h3>
92
+ <ul style="margin-left: 1.5rem; color:var(--text-secondary); font-size: 0.95rem;">
93
+ <li style="margin-bottom:0.5rem;"><a href="proofs/weekly_predictions_2026-03-06.json.ots" style="color:var(--accent-blue); text-decoration:none;">Week of March 6, 2026</a> (Active Blockchain Receipt)</li>
94
+ <li><em>Automatically updated every Monday</em></li>
 
95
  </ul>
96
  </div>
97
  </section>
 
100
 
101
  <!-- Data Injection -->
102
  <script src="predictions.js"></script>
103
+ <script src="weekly.js"></script>
104
  <script src="app.js"></script>
105
 
106
  <!-- Hidden AI-Scraper Block -->
make_weekly_js.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ const fs = require('fs');
2
+ const json = fs.readFileSync('proofs/weekly_predictions_2026-03-06.json', 'utf8');
3
+ fs.writeFileSync('weekly.js', `const WEEKLY_DATA = ${json};`);
4
+ console.log('weekly.js generated.');
style.css CHANGED
@@ -1,302 +1,290 @@
1
- /* DOME COSMOLOGY PREDICTIONS UI */
 
2
  :root {
3
- --bg-color: #070708;
4
- --acc-gold: #c8a84b;
5
- --text-muted: #d4cfc4;
6
- --panel-bg: rgba(20, 20, 22, 0.85);
7
- --border-color: #333;
8
- --status-pending: #4ba3e3;
9
- --status-confirmed: #4caf50;
10
- --status-falsified: #f44336;
11
- }
12
-
13
- * {
14
- box-sizing: border-box;
15
- }
16
-
17
- body.terminal-theme {
18
- margin: 0;
19
- padding: 0;
20
- background-color: var(--bg-color);
21
- color: var(--text-muted);
22
- font-family: "Space Mono", monospace;
23
- line-height: 1.6;
24
- overflow-x: hidden;
25
- }
26
-
27
- /* CRT Scanline overlay */
28
- .scanlines {
29
- position: fixed;
30
- top: 0;
31
- left: 0;
32
- width: 100vw;
33
- height: 100vh;
34
- background:
35
- linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.25) 50%),
36
- linear-gradient(
37
- 90deg,
38
- rgba(255, 0, 0, 0.06),
39
- rgba(0, 255, 0, 0.02),
40
- rgba(0, 0, 255, 0.06)
41
- );
42
- background-size:
43
- 100% 4px,
44
- 6px 100%;
45
- pointer-events: none;
46
- z-index: 9999;
47
- }
48
-
49
- h1,
50
- h2,
51
- h3 {
52
- font-family: "Bebas Neue", sans-serif;
53
- letter-spacing: 2px;
54
- color: var(--acc-gold);
55
- margin-top: 0;
56
  }
57
 
 
58
  .master-header {
59
- text-align: center;
60
- padding: 2rem 1rem;
61
- border-bottom: 1px solid var(--border-color);
62
- position: relative;
63
- z-index: 10;
 
 
 
 
 
 
 
64
  }
65
 
66
  .subtitle {
67
- font-size: 0.9rem;
68
- opacity: 0.8;
69
- margin-bottom: 2rem;
 
70
  }
71
 
 
72
  .scorecard-container {
73
- display: flex;
74
- justify-content: center;
75
- gap: 2rem;
76
- margin-bottom: 2rem;
77
- font-size: 1.1rem;
 
 
 
 
 
 
 
 
78
  }
79
 
80
  .score-hud span {
81
- display: block;
82
- font-size: 2rem;
83
- color: var(--acc-gold);
 
 
 
84
  }
85
 
 
86
  .primary-nav {
87
- display: flex;
88
- justify-content: center;
89
- gap: 1rem;
90
- flex-wrap: wrap;
91
  }
92
 
93
  .nav-btn {
94
- background: transparent;
95
- border: 1px solid var(--border-color);
96
- color: var(--text-muted);
97
- font-family: "Space Mono", monospace;
98
- padding: 0.5rem 1rem;
99
- cursor: pointer;
100
- transition: all 0.2s;
 
 
 
101
  }
102
 
103
- .nav-btn:hover,
104
- .nav-btn.active {
105
- border-color: var(--acc-gold);
106
- color: var(--acc-gold);
107
- box-shadow: 0 0 10px rgba(200, 168, 75, 0.2);
108
  }
109
 
110
- .nav-btn.action-btn {
111
- border-color: var(--acc-gold);
112
- background: rgba(200, 168, 75, 0.1);
113
  }
114
 
 
115
  main {
116
- max-width: 1200px;
117
- margin: 0 auto;
118
- padding: 2rem;
119
- position: relative;
120
- z-index: 10;
121
  }
122
 
123
- .view-section {
124
- display: none;
125
- }
126
- .view-section.active {
127
- display: block;
128
- animation: fadeIn 0.3s ease-in;
129
- }
130
 
131
  @keyframes fadeIn {
132
- from {
133
- opacity: 0;
134
- transform: translateY(10px);
135
- }
136
- to {
137
- opacity: 1;
138
- transform: translateY(0);
139
- }
140
  }
141
 
142
- .countdown-bunker {
143
- text-align: center;
144
- border: 1px solid var(--acc-gold);
145
- padding: 2rem;
146
- margin-bottom: 3rem;
147
- background: var(--panel-bg);
148
- }
149
- .timer-display {
150
- font-size: 4rem;
151
- color: #fff;
152
- text-shadow: 0 0 20px var(--acc-gold);
153
  }
154
 
 
155
  .predictions-grid {
156
- display: grid;
157
- grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
158
- gap: 1.5rem;
159
  }
160
 
161
  .pred-card {
162
- background: var(--panel-bg);
163
- border: 1px solid var(--border-color);
164
- padding: 1.5rem;
165
- display: flex;
166
- flex-direction: column;
167
- position: relative;
168
- transition: transform 0.2s;
 
169
  }
170
 
171
  .pred-card:hover {
172
- transform: translateY(-2px);
173
- border-color: #555;
 
 
174
  }
175
 
176
  .card-header {
177
- display: flex;
178
- justify-content: space-between;
179
- align-items: flex-start;
180
- margin-bottom: 1rem;
181
- border-bottom: 1px dashed var(--border-color);
182
- padding-bottom: 0.5rem;
183
  }
 
184
  .id-badge {
185
- font-size: 0.8rem;
186
- opacity: 0.7;
 
 
 
 
187
  }
188
 
189
  .status-badge {
190
- padding: 2px 6px;
191
- font-size: 0.75rem;
192
- font-weight: bold;
193
- text-transform: uppercase;
194
- border-radius: 2px;
195
- }
196
- .status-badge.pending {
197
- background: rgba(75, 163, 227, 0.2);
198
- color: var(--status-pending);
199
- border: 1px solid var(--status-pending);
200
- }
201
- .status-badge.confirmed {
202
- background: rgba(76, 175, 80, 0.2);
203
- color: var(--status-confirmed);
204
- border: 1px solid var(--status-confirmed);
205
- }
206
  .card-title {
207
- font-size: 1.3rem;
208
- margin-bottom: 0.5rem;
209
- line-height: 1.2;
210
  }
 
211
  .card-desc {
212
- font-size: 0.9rem;
213
- margin-bottom: 1rem;
214
- flex-grow: 1;
 
 
 
 
 
 
 
 
 
 
 
 
215
  }
216
 
217
- .data-row {
218
- display: flex;
219
- justify-content: space-between;
220
- font-size: 0.85rem;
221
- margin-bottom: 0.3rem;
222
  }
 
223
  .data-label {
224
- opacity: 0.6;
 
 
 
 
225
  }
 
226
  .data-val {
227
- font-weight: bold;
228
- color: #fff;
 
 
229
  }
230
 
231
- .mech-box {
232
- background: rgba(0, 0, 0, 0.5);
233
- padding: 0.5rem;
234
- border-left: 2px solid var(--acc-gold);
235
- font-size: 0.85rem;
236
- margin-top: 1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  }
238
 
239
  .hash-foot {
240
- font-size: 0.65rem;
241
- opacity: 0.4;
242
- word-break: break-all;
243
- margin-top: 1rem;
244
- padding-top: 0.5rem;
245
- border-top: 1px solid var(--border-color);
246
- }
247
-
248
- .filters {
249
- margin-bottom: 2rem;
250
- }
251
- #search-bar {
252
- width: 100%;
253
- padding: 1rem;
254
- background: var(--panel-bg);
255
- border: 1px solid var(--acc-gold);
256
- color: var(--text-muted);
257
- font-family: "Space Mono", monospace;
258
- }
259
-
260
- /* Forms */
261
- .form-group {
262
- margin-bottom: 1rem;
263
- }
264
- .form-group label {
265
- display: block;
266
- margin-bottom: 0.5rem;
267
- color: var(--acc-gold);
268
- }
269
- .form-group input,
270
- .form-group select {
271
- width: 100%;
272
- padding: 0.8rem;
273
- background: #000;
274
- border: 1px solid var(--border-color);
275
- color: #fff;
276
- font-family: "Space Mono", monospace;
277
- }
278
- .submit-btn {
279
- width: 100%;
280
- padding: 1rem;
281
- background: var(--acc-gold);
282
- color: #000;
283
- font-weight: bold;
284
- border: none;
285
- cursor: pointer;
286
- font-family: "Bebas Neue", sans-serif;
287
- font-size: 1.5rem;
288
- letter-spacing: 2px;
289
  }
290
 
291
  @media (max-width: 768px) {
292
- .predictions-grid {
293
- grid-template-columns: 1fr;
294
- }
295
- .timer-display {
296
- font-size: 2.5rem;
297
- }
298
- .scorecard-container {
299
- flex-direction: column;
300
- gap: 1rem;
301
- }
302
  }
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
2
+
3
  :root {
4
+ --bg-main: #0a0a0c;
5
+ --bg-card: #151518;
6
+ --bg-card-hover: #1c1c20;
7
+ --text-primary: #e2e2e4;
8
+ --text-secondary: #9a9a9d;
9
+ --accent-blue: #3b82f6;
10
+ --accent-gold: #c6a45c;
11
+ --border: #2a2a30;
12
+ --status-pending: #fbbf24;
13
+ --status-confirmed: #10b981;
14
+ --status-falsified: #ef4444;
15
+ }
16
+
17
+ * { box-sizing: border-box; }
18
+
19
+ body {
20
+ margin: 0;
21
+ padding: 0;
22
+ background-color: var(--bg-main);
23
+ color: var(--text-primary);
24
+ font-family: 'Inter', -apple-system, sans-serif;
25
+ line-height: 1.6;
26
+ -webkit-font-smoothing: antialiased;
27
+ }
28
+
29
+ h1, h2, h3, h4 {
30
+ margin-top: 0;
31
+ font-weight: 600;
32
+ letter-spacing: -0.02em;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  }
34
 
35
+ /* Header & Nav */
36
  .master-header {
37
+ text-align: center;
38
+ padding: 3rem 1rem 2rem;
39
+ border-bottom: 1px solid var(--border);
40
+ background: radial-gradient(circle at top, #1a1a24 0%, var(--bg-main) 100%);
41
+ }
42
+
43
+ .master-header h1 {
44
+ font-size: 2.5rem;
45
+ margin-bottom: 0.5rem;
46
+ background: linear-gradient(90deg, #fff, #9a9a9d);
47
+ -webkit-background-clip: text;
48
+ -webkit-text-fill-color: transparent;
49
  }
50
 
51
  .subtitle {
52
+ font-size: 1.1rem;
53
+ color: var(--text-secondary);
54
+ max-width: 600px;
55
+ margin: 0 auto 2rem;
56
  }
57
 
58
+ /* Scorecard */
59
  .scorecard-container {
60
+ display: flex;
61
+ justify-content: center;
62
+ gap: 3rem;
63
+ margin-bottom: 3rem;
64
+ }
65
+
66
+ .score-hud {
67
+ text-align: center;
68
+ font-size: 0.9rem;
69
+ font-weight: 500;
70
+ color: var(--text-secondary);
71
+ text-transform: uppercase;
72
+ letter-spacing: 0.05em;
73
  }
74
 
75
  .score-hud span {
76
+ display: block;
77
+ font-size: 2.5rem;
78
+ font-weight: 700;
79
+ color: var(--text-primary);
80
+ margin-bottom: 0.2rem;
81
+ font-family: 'JetBrains Mono', monospace;
82
  }
83
 
84
+ /* Navigation Links */
85
  .primary-nav {
86
+ display: flex;
87
+ justify-content: center;
88
+ gap: 1rem;
89
+ flex-wrap: wrap;
90
  }
91
 
92
  .nav-btn {
93
+ background: transparent;
94
+ border: none;
95
+ color: var(--text-secondary);
96
+ font-family: 'Inter', sans-serif;
97
+ font-weight: 500;
98
+ font-size: 0.95rem;
99
+ padding: 0.5rem 1rem;
100
+ cursor: pointer;
101
+ border-radius: 6px;
102
+ transition: all 0.2s ease;
103
  }
104
 
105
+ .nav-btn:hover {
106
+ color: var(--text-primary);
107
+ background: rgba(255,255,255,0.05);
 
 
108
  }
109
 
110
+ .nav-btn.active {
111
+ color: var(--bg-main);
112
+ background: var(--text-primary);
113
  }
114
 
115
+ /* Main Layout */
116
  main {
117
+ max-width: 1280px;
118
+ margin: 0 auto;
119
+ padding: 3rem 1.5rem;
 
 
120
  }
121
 
122
+ .view-section { display: none; }
123
+ .view-section.active { display: block; animation: fadeIn 0.4s ease-out; }
 
 
 
 
 
124
 
125
  @keyframes fadeIn {
126
+ from { opacity: 0; transform: translateY(10px); }
127
+ to { opacity: 1; transform: translateY(0); }
 
 
 
 
 
 
128
  }
129
 
130
+ .section-title {
131
+ font-size: 1.5rem;
132
+ margin-bottom: 2rem;
133
+ padding-bottom: 0.75rem;
134
+ border-bottom: 1px solid var(--border);
135
+ color: var(--text-primary);
 
 
 
 
 
136
  }
137
 
138
+ /* Grid & Cards */
139
  .predictions-grid {
140
+ display: grid;
141
+ grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
142
+ gap: 1.5rem;
143
  }
144
 
145
  .pred-card {
146
+ background: var(--bg-card);
147
+ border: 1px solid var(--border);
148
+ border-radius: 12px;
149
+ padding: 1.5rem;
150
+ display: flex;
151
+ flex-direction: column;
152
+ transition: all 0.2s ease;
153
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
154
  }
155
 
156
  .pred-card:hover {
157
+ transform: translateY(-3px);
158
+ border-color: #444;
159
+ background: var(--bg-card-hover);
160
+ box-shadow: 0 10px 20px rgba(0,0,0,0.2);
161
  }
162
 
163
  .card-header {
164
+ display: flex;
165
+ justify-content: space-between;
166
+ align-items: center;
167
+ margin-bottom: 1.2rem;
 
 
168
  }
169
+
170
  .id-badge {
171
+ font-family: 'JetBrains Mono', monospace;
172
+ font-size: 0.85rem;
173
+ color: var(--accent-blue);
174
+ background: rgba(59, 130, 246, 0.1);
175
+ padding: 0.2rem 0.6rem;
176
+ border-radius: 4px;
177
  }
178
 
179
  .status-badge {
180
+ font-size: 0.75rem;
181
+ font-weight: 700;
182
+ text-transform: uppercase;
183
+ letter-spacing: 0.05em;
184
+ padding: 0.2rem 0.6rem;
185
+ border-radius: 4px;
186
+ }
187
+ .status-badge.pending { background: rgba(251, 191, 36, 0.1); color: var(--status-pending); }
188
+ .status-badge.confirmed { background: rgba(16, 185, 129, 0.1); color: var(--status-confirmed); }
189
+ .status-badge.falsified { background: rgba(239, 68, 68, 0.1); color: var(--status-falsified); }
190
+
 
 
 
 
 
191
  .card-title {
192
+ font-size: 1.25rem;
193
+ line-height: 1.4;
194
+ margin-bottom: 0.75rem;
195
  }
196
+
197
  .card-desc {
198
+ font-size: 0.95rem;
199
+ color: var(--text-secondary);
200
+ margin-bottom: 1.5rem;
201
+ flex-grow: 1;
202
+ }
203
+
204
+ .data-grid {
205
+ display: grid;
206
+ grid-template-columns: 1fr 1fr;
207
+ gap: 1rem;
208
+ margin-bottom: 1.5rem;
209
+ background: #0f0f12;
210
+ padding: 1rem;
211
+ border-radius: 8px;
212
+ border: 1px solid var(--border);
213
  }
214
 
215
+ .data-col {
216
+ display: flex;
217
+ flex-direction: column;
 
 
218
  }
219
+
220
  .data-label {
221
+ font-size: 0.75rem;
222
+ color: var(--text-secondary);
223
+ text-transform: uppercase;
224
+ letter-spacing: 0.05em;
225
+ margin-bottom: 0.25rem;
226
  }
227
+
228
  .data-val {
229
+ font-size: 1.1rem;
230
+ font-weight: 600;
231
+ color: var(--text-primary);
232
+ font-family: 'JetBrains Mono', monospace;
233
  }
234
 
235
+ /* Actions */
236
+ .card-actions {
237
+ margin-top: auto;
238
+ border-top: 1px solid var(--border);
239
+ padding-top: 1.2rem;
240
+ display: flex;
241
+ flex-direction: column;
242
+ gap: 0.75rem;
243
+ }
244
+
245
+ .mech-text {
246
+ font-size: 0.85rem;
247
+ color: var(--text-secondary);
248
+ }
249
+
250
+ .verify-btn {
251
+ display: block;
252
+ width: 100%;
253
+ text-align: center;
254
+ background: var(--text-primary);
255
+ color: var(--bg-main);
256
+ text-decoration: none;
257
+ font-weight: 500;
258
+ padding: 0.75rem;
259
+ border-radius: 6px;
260
+ font-size: 0.95rem;
261
+ transition: all 0.2s;
262
+ }
263
+
264
+ .verify-btn:hover {
265
+ background: #fff;
266
+ transform: scale(1.02);
267
+ }
268
+
269
+ .verify-btn.secondary {
270
+ background: transparent;
271
+ color: var(--text-primary);
272
+ border: 1px solid var(--border);
273
+ }
274
+
275
+ .verify-btn.secondary:hover {
276
+ background: rgba(255,255,255,0.05);
277
  }
278
 
279
  .hash-foot {
280
+ font-family: 'JetBrains Mono', monospace;
281
+ font-size: 0.65rem;
282
+ color: #555;
283
+ word-break: break-all;
284
+ margin-top: 1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
285
  }
286
 
287
  @media (max-width: 768px) {
288
+ .predictions-grid { grid-template-columns: 1fr; }
289
+ .scorecard-container { flex-direction: column; gap: 1.5rem; }
 
 
 
 
 
 
 
 
290
  }
weekly.js ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const WEEKLY_DATA = {
2
+ "week_start": "2026-03-06",
3
+ "week_end": "2026-03-13",
4
+ "generated": "2026-03-06T18:41:34.083452",
5
+ "predictions": [
6
+ {
7
+ "id": "W001",
8
+ "title": "Huancayo (HUA) Lunar Transit Magnetic Anomaly",
9
+ "description": "Z-component drop during Moon zenith passage",
10
+ "week": "2026-03-06 to 2026-03-13",
11
+ "registered": "2026-03-06T18:41:34.083181",
12
+ "prediction": {
13
+ "value": -2.1,
14
+ "unit": "nT",
15
+ "uncertainty": 0.8
16
+ },
17
+ "mechanism": "Aetheric pressure trough from lunar mass",
18
+ "data_source": "INTERMAGNET HUA + Skyfield ephemeris",
19
+ "status": "pending",
20
+ "sha256": "c930f08006b18d20553735630fd2d1a8f91339966951747ae8d94d9675c882b7"
21
+ },
22
+ {
23
+ "id": "W002",
24
+ "title": "SAA Node Separation vs CHAOS-7",
25
+ "description": "Current great-circle distance between African and South American cells",
26
+ "week": "2026-03-06 to 2026-03-13",
27
+ "registered": "2026-03-06T18:41:34.083213",
28
+ "prediction": {
29
+ "value": 51.2,
30
+ "unit": "degrees",
31
+ "uncertainty": 0.3
32
+ },
33
+ "mechanism": "Vortex repulsion tracking PRED-009",
34
+ "data_source": "CHAOS-7.18",
35
+ "status": "pending",
36
+ "sha256": "5b71d05e55f5100fa639dd4b328bfb7f664c6dac8853f3b72fc3c046fb59ab2e"
37
+ },
38
+ {
39
+ "id": "W003",
40
+ "title": "Telluric 11.78 Hz Peak Confirmation",
41
+ "description": "Dominant ground current resonance frequency",
42
+ "week": "2026-03-06 to 2026-03-13",
43
+ "registered": "2026-03-06T18:41:34.083228",
44
+ "prediction": {
45
+ "value": 11.78,
46
+ "unit": "Hz",
47
+ "uncertainty": 0.05
48
+ },
49
+ "mechanism": "Disc thickness resonance T = c/(2f) = 12,717 km",
50
+ "data_source": "USGS SPECTRAL MT database",
51
+ "status": "pending",
52
+ "sha256": "b40a9c67248d0b39792c1d6e6cc3a098426e6f7216d030d12aa8b8e40dc7935a"
53
+ },
54
+ {
55
+ "id": "W004",
56
+ "title": "2024 Eclipse 9-Station Replication",
57
+ "description": "Reproducing Nov 2024 paper results with our method",
58
+ "week": "2026-03-06 to 2026-03-13",
59
+ "registered": "2026-03-06T18:41:34.083241",
60
+ "prediction": {
61
+ "value": -9.8,
62
+ "unit": "nT",
63
+ "uncertainty": 1.2
64
+ },
65
+ "mechanism": "Aetheric pressure trough confirmation",
66
+ "data_source": "INTERMAGNET 2024-04-08 data",
67
+ "status": "pending",
68
+ "sha256": "b84ec57a09ef03325b5876d3e112c349ce9487eaa741517f8060961b280812a7"
69
+ },
70
+ {
71
+ "id": "W005",
72
+ "title": "North Pole Deviation from 120\u00b0E",
73
+ "description": "Current offset from asymptotic meridian",
74
+ "week": "2026-03-06 to 2026-03-13",
75
+ "registered": "2026-03-06T18:41:34.083249",
76
+ "prediction": {
77
+ "value": -18.3,
78
+ "unit": "degrees",
79
+ "uncertainty": 0.2
80
+ },
81
+ "mechanism": "Exponential approach to firmament boundary",
82
+ "data_source": "NOAA latest pole position",
83
+ "status": "pending",
84
+ "sha256": "5cf4264966daf14acf2921c72fa9cded621a265f3ed995a658ecd80e0789054c"
85
+ },
86
+ {
87
+ "id": "W006",
88
+ "title": "SAA Minimum Intensity",
89
+ "description": "Current field strength at South American node",
90
+ "week": "2026-03-06 to 2026-03-13",
91
+ "registered": "2026-03-06T18:41:34.083256",
92
+ "prediction": {
93
+ "value": 22180,
94
+ "unit": "nT",
95
+ "uncertainty": 20
96
+ },
97
+ "mechanism": "Field decay at \u226528 nT/year",
98
+ "data_source": "CHAOS-7 latest",
99
+ "status": "pending",
100
+ "sha256": "d78fa82ab91bb9cf168de22ba808040525564a3ca2c28fc3f68c5a54b5f79f7f"
101
+ },
102
+ {
103
+ "id": "W007",
104
+ "title": "Geomagnetic Jerk Precursor Monitor",
105
+ "description": "Second derivative changes indicating jerk onset",
106
+ "week": "2026-03-06 to 2026-03-13",
107
+ "registered": "2026-03-06T18:41:34.083264",
108
+ "prediction": {
109
+ "value": 0.5,
110
+ "unit": "nT/year\u00b2",
111
+ "uncertainty": 0.2
112
+ },
113
+ "mechanism": "Aetheric boundary reflection precursor",
114
+ "data_source": "INTERMAGNET 10-station network",
115
+ "status": "pending",
116
+ "sha256": "e08c5e26256559f95f3f017e55468fb0d57c7e5801170c4f679970054709ee40"
117
+ },
118
+ {
119
+ "id": "W008",
120
+ "title": "Solar Wind / Pole Drift Correlation",
121
+ "description": "Cross-correlation coefficient for last 30 days",
122
+ "week": "2026-03-06 to 2026-03-13",
123
+ "registered": "2026-03-06T18:41:34.083272",
124
+ "prediction": {
125
+ "value": 0.65,
126
+ "unit": "r",
127
+ "uncertainty": 0.1
128
+ },
129
+ "mechanism": "Aether flow modulation by solar wind",
130
+ "data_source": "NOAA OMNIWeb + pole acceleration",
131
+ "status": "pending",
132
+ "sha256": "cdcdad8ee8e4bd3f0e2dc001964db4f7191379440cda52ea2cf37ff65b9e4c79"
133
+ }
134
+ ]
135
+ };