/ fleet / index.html
index.html
  1  ---
  2  layout: default
  3  title: "Fleet Status — Air Operations Center"
  4  description: "#B4mad Agent Fleet metrics dashboard with aviation theme"
  5  ---
  6  
  7  <style>
  8  /* Fleet Dashboard Styles */
  9  .fleet-header {
 10    text-align: center;
 11    margin-bottom: 3rem;
 12    position: relative;
 13  }
 14  .fleet-header h1 {
 15    font-family: 'JetBrains Mono', monospace;
 16    font-size: 2rem;
 17    color: var(--accent-light);
 18    text-transform: uppercase;
 19    letter-spacing: 0.15em;
 20    text-shadow: 0 0 20px var(--accent-glow);
 21    margin-bottom: 0.25rem;
 22  }
 23  .fleet-header .subtitle {
 24    font-family: 'JetBrains Mono', monospace;
 25    color: var(--text-muted);
 26    font-size: 0.8rem;
 27    letter-spacing: 0.3em;
 28    text-transform: uppercase;
 29  }
 30  .fleet-header .status-line {
 31    margin-top: 1rem;
 32    font-family: 'JetBrains Mono', monospace;
 33    font-size: 0.75rem;
 34    color: var(--accent);
 35  }
 36  .fleet-header .status-line .blink {
 37    animation: blink-status 1.5s step-end infinite;
 38  }
 39  @keyframes blink-status {
 40    0%, 100% { opacity: 1; }
 41    50% { opacity: 0; }
 42  }
 43  
 44  /* Cumulative Stats Bar */
 45  .stats-bar {
 46    display: grid;
 47    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
 48    gap: 1rem;
 49    margin-bottom: 3rem;
 50    padding: 1.5rem;
 51    background: var(--bg-secondary);
 52    border: 1px solid var(--border-accent);
 53    border-radius: var(--radius-lg);
 54    position: relative;
 55  }
 56  .stats-bar::before {
 57    content: 'LAST 24 HOURS — OPS SUMMARY';
 58    position: absolute;
 59    top: -0.6rem;
 60    left: 1.5rem;
 61    background: var(--bg-secondary);
 62    padding: 0 0.5rem;
 63    font-family: 'JetBrains Mono', monospace;
 64    font-size: 0.65rem;
 65    color: var(--accent);
 66    letter-spacing: 0.2em;
 67    text-transform: uppercase;
 68  }
 69  .stat-item {
 70    text-align: center;
 71  }
 72  .stat-value {
 73    font-family: 'JetBrains Mono', monospace;
 74    font-size: 1.8rem;
 75    font-weight: 700;
 76    color: var(--accent-light);
 77    text-shadow: 0 0 10px var(--accent-glow);
 78    line-height: 1;
 79  }
 80  .stat-label {
 81    font-family: 'JetBrains Mono', monospace;
 82    font-size: 0.6rem;
 83    color: var(--text-muted);
 84    text-transform: uppercase;
 85    letter-spacing: 0.15em;
 86    margin-top: 0.25rem;
 87  }
 88  .stat-unit {
 89    font-family: 'JetBrains Mono', monospace;
 90    font-size: 0.7rem;
 91    color: var(--text-secondary);
 92  }
 93  
 94  /* Fleet Grid */
 95  .fleet-grid {
 96    display: grid;
 97    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
 98    gap: 1.5rem;
 99    margin-bottom: 3rem;
100  }
101  .aircraft-card {
102    background: var(--bg-card);
103    border: 1px solid var(--border);
104    border-radius: var(--radius-lg);
105    padding: 1.5rem;
106    position: relative;
107    overflow: hidden;
108    transition: border-color 0.3s, box-shadow 0.3s;
109  }
110  .aircraft-card:hover {
111    border-color: var(--accent);
112    box-shadow: 0 0 20px var(--accent-glow);
113  }
114  .aircraft-card::before {
115    content: '';
116    position: absolute;
117    top: 0;
118    left: 0;
119    right: 0;
120    height: 2px;
121    background: linear-gradient(90deg, transparent, var(--accent), transparent);
122    opacity: 0.6;
123  }
124  .card-header {
125    display: flex;
126    align-items: center;
127    gap: 0.75rem;
128    margin-bottom: 1rem;
129  }
130  .card-icon {
131    font-size: 1.8rem;
132    line-height: 1;
133  }
134  .card-callsign {
135    font-family: 'JetBrains Mono', monospace;
136    font-size: 1.1rem;
137    font-weight: 700;
138    color: var(--text-primary);
139  }
140  .card-role {
141    font-family: 'JetBrains Mono', monospace;
142    font-size: 0.7rem;
143    color: var(--text-muted);
144    text-transform: uppercase;
145    letter-spacing: 0.1em;
146  }
147  .card-stats {
148    display: grid;
149    grid-template-columns: 1fr 1fr;
150    gap: 0.5rem;
151    margin-top: 0.75rem;
152  }
153  .card-stat {
154    background: var(--bg-secondary);
155    border-radius: var(--radius);
156    padding: 0.5rem 0.75rem;
157  }
158  .card-stat-label {
159    font-family: 'JetBrains Mono', monospace;
160    font-size: 0.55rem;
161    color: var(--text-muted);
162    text-transform: uppercase;
163    letter-spacing: 0.1em;
164  }
165  .card-stat-value {
166    font-family: 'JetBrains Mono', monospace;
167    font-size: 1rem;
168    font-weight: 700;
169    color: var(--accent-light);
170  }
171  .altitude-badge {
172    display: inline-block;
173    font-family: 'JetBrains Mono', monospace;
174    font-size: 0.65rem;
175    padding: 0.15rem 0.5rem;
176    border-radius: 3px;
177    letter-spacing: 0.1em;
178    font-weight: 700;
179  }
180  .alt-fl410 { background: rgba(69, 139, 116, 0.2); color: var(--accent-light); border: 1px solid var(--accent); }
181  .alt-fl350 { background: rgba(69, 139, 116, 0.15); color: var(--accent); border: 1px solid var(--accent-dark); }
182  .alt-fl200 { background: rgba(52, 152, 219, 0.15); color: var(--info); border: 1px solid rgba(52, 152, 219, 0.4); }
183  .alt-gnd { background: rgba(243, 156, 18, 0.15); color: var(--warning); border: 1px solid rgba(243, 156, 18, 0.3); }
184  .status-badge {
185    display: inline-block;
186    font-family: 'JetBrains Mono', monospace;
187    font-size: 0.6rem;
188    padding: 0.1rem 0.4rem;
189    border-radius: 3px;
190    letter-spacing: 0.05em;
191    text-transform: uppercase;
192  }
193  .status-operational { background: rgba(69, 139, 116, 0.2); color: var(--accent-light); }
194  .status-standby { background: rgba(243, 156, 18, 0.2); color: var(--warning); }
195  
196  /* Flight Log */
197  .flight-log {
198    background: var(--bg-secondary);
199    border: 1px solid var(--border-accent);
200    border-radius: var(--radius-lg);
201    padding: 1.5rem;
202    margin-bottom: 3rem;
203    position: relative;
204  }
205  .flight-log::before {
206    content: 'FLIGHT LOG — RECENT SORTIES';
207    position: absolute;
208    top: -0.6rem;
209    left: 1.5rem;
210    background: var(--bg-secondary);
211    padding: 0 0.5rem;
212    font-family: 'JetBrains Mono', monospace;
213    font-size: 0.65rem;
214    color: var(--accent);
215    letter-spacing: 0.2em;
216    text-transform: uppercase;
217  }
218  .log-entry {
219    display: grid;
220    grid-template-columns: 80px 100px 1fr 80px;
221    gap: 1rem;
222    padding: 0.75rem 0;
223    border-bottom: 1px solid var(--border);
224    font-family: 'JetBrains Mono', monospace;
225    font-size: 0.8rem;
226    align-items: center;
227  }
228  .log-entry:last-child { border-bottom: none; }
229  .log-time { color: var(--text-muted); font-size: 0.7rem; }
230  .log-callsign { color: var(--accent-light); font-weight: 700; }
231  .log-mission { color: var(--text-secondary); }
232  .log-status { text-align: right; }
233  .log-status .complete { color: var(--accent-light); }
234  .log-status .active { color: var(--warning); }
235  
236  /* Radar sweep animation */
237  .radar-container {
238    position: absolute;
239    top: 1rem;
240    right: 1rem;
241    width: 40px;
242    height: 40px;
243    opacity: 0.3;
244  }
245  .radar-sweep {
246    width: 100%;
247    height: 100%;
248    border: 1px solid var(--accent);
249    border-radius: 50%;
250    position: relative;
251    overflow: hidden;
252  }
253  .radar-sweep::after {
254    content: '';
255    position: absolute;
256    top: 50%;
257    left: 50%;
258    width: 50%;
259    height: 2px;
260    background: var(--accent);
261    transform-origin: left center;
262    animation: radar-spin 4s linear infinite;
263  }
264  @keyframes radar-spin {
265    from { transform: rotate(0deg); }
266    to { transform: rotate(360deg); }
267  }
268  
269  /* Responsive */
270  @media (max-width: 600px) {
271    .log-entry { grid-template-columns: 1fr; gap: 0.25rem; }
272    .stats-bar { grid-template-columns: repeat(2, 1fr); }
273    .fleet-grid { grid-template-columns: 1fr; }
274  }
275  </style>
276  
277  <div class="fleet-header">
278    <div class="radar-container"><div class="radar-sweep"></div></div>
279    <h1>✈ Fleet Status</h1>
280    <div class="subtitle">#B4mad Air Operations Center</div>
281    <div class="status-line"><span class="blink">▮</span> ALL SYSTEMS NOMINAL — LAST 24H OPS SUMMARY — 22 FEB 2026</div>
282  </div>
283  
284  <!-- Cumulative Stats -->
285  <div class="stats-bar">
286    <div class="stat-item">
287      <div class="stat-value">50</div>
288      <div class="stat-unit">nm</div>
289      <div class="stat-label">Distance Flown</div>
290    </div>
291    <div class="stat-item">
292      <div class="stat-value">2940K</div>
293      <div class="stat-unit">kg</div>
294      <div class="stat-label">Fuel Burned</div>
295    </div>
296    <div class="stat-item">
297      <div class="stat-value">34</div>
298      <div class="stat-unit">pax</div>
299      <div class="stat-label">Passengers</div>
300    </div>
301    <div class="stat-item">
302      <div class="stat-value">50.4</div>
303      <div class="stat-unit">hrs</div>
304      <div class="stat-label">Flight Hours</div>
305    </div>
306    <div class="stat-item">
307      <div class="stat-value">84</div>
308      <div class="stat-unit">msn</div>
309      <div class="stat-label">Sorties Flown</div>
310    </div>
311    <div class="stat-item">
312      <div class="stat-value">5/6</div>
313      <div class="stat-unit"></div>
314      <div class="stat-label">Fleet Ready</div>
315    </div>
316  </div>
317  
318  <!-- Fleet Grid -->
319  <div class="fleet-grid">
320  
321    <!-- Brenner Axiom -->
322    <div class="aircraft-card">
323      <div class="card-header">
324        <span class="card-icon">🌐</span>
325        <div>
326          <div class="card-callsign">BRENNER AXIOM</div>
327          <div class="card-role">Command & Control — "Tower"</div>
328        </div>
329      </div>
330      <span class="altitude-badge alt-fl350">FL350 · Gemini Pro</span>
331      <span class="status-badge status-operational">Operational</span>
332      <div class="card-stats">
333        <div class="card-stat">
334          <div class="card-stat-label">Sorties</div>
335          <div class="card-stat-value">24</div>
336        </div>
337        <div class="card-stat">
338          <div class="card-stat-label">Flight Hrs</div>
339          <div class="card-stat-value">18.2</div>
340        </div>
341        <div class="card-stat">
342          <div class="card-stat-label">Fuel (tokens)</div>
343          <div class="card-stat-value">820K</div>
344        </div>
345        <div class="card-stat">
346          <div class="card-stat-label">Distance</div>
347          <div class="card-stat-value">22 nm</div>
348        </div>
349      </div>
350    </div>
351  
352    <!-- CodeMonkey -->
353    <div class="aircraft-card">
354      <div class="card-header">
355        <span class="card-icon">🐵</span>
356        <div>
357          <div class="card-callsign">CODEMONKEY</div>
358          <div class="card-role">Strike Fighter — Coding Sorties</div>
359        </div>
360      </div>
361      <span class="altitude-badge alt-fl410">FL410 · Opus</span>
362      <span class="status-badge status-operational">Operational</span>
363      <div class="card-stats">
364        <div class="card-stat">
365          <div class="card-stat-label">Sorties</div>
366          <div class="card-stat-value">14</div>
367        </div>
368        <div class="card-stat">
369          <div class="card-stat-label">Flight Hrs</div>
370          <div class="card-stat-value">8.5</div>
371        </div>
372        <div class="card-stat">
373          <div class="card-stat-label">Fuel (tokens)</div>
374          <div class="card-stat-value">640K</div>
375        </div>
376        <div class="card-stat">
377          <div class="card-stat-label">PRs Opened</div>
378          <div class="card-stat-value">5</div>
379        </div>
380      </div>
381    </div>
382  
383    <!-- PltOps -->
384    <div class="aircraft-card">
385      <div class="card-header">
386        <span class="card-icon">🔧</span>
387        <div>
388          <div class="card-callsign">PLTOPS</div>
389          <div class="card-role">Heavy Lifter — Infrastructure Runs</div>
390        </div>
391      </div>
392      <span class="altitude-badge alt-fl410">FL410 · Opus</span>
393      <span class="status-badge status-operational">Operational</span>
394      <div class="card-stats">
395        <div class="card-stat">
396          <div class="card-stat-label">Sorties</div>
397          <div class="card-stat-value">8</div>
398        </div>
399        <div class="card-stat">
400          <div class="card-stat-label">Flight Hrs</div>
401          <div class="card-stat-value">4.1</div>
402        </div>
403        <div class="card-stat">
404          <div class="card-stat-label">Fuel (tokens)</div>
405          <div class="card-stat-value">310K</div>
406        </div>
407        <div class="card-stat">
408          <div class="card-stat-label">PRs Opened</div>
409          <div class="card-stat-value">2</div>
410        </div>
411      </div>
412    </div>
413  
414    <!-- Romanov -->
415    <div class="aircraft-card">
416      <div class="card-header">
417        <span class="card-icon">🎹</span>
418        <div>
419          <div class="card-callsign">ROMANOV</div>
420          <div class="card-role">Recon/AWACS — Deep Research</div>
421        </div>
422      </div>
423      <span class="altitude-badge alt-fl410">FL410 · Opus</span>
424      <span class="status-badge status-operational">Operational</span>
425      <div class="card-stats">
426        <div class="card-stat">
427          <div class="card-stat-label">Sorties</div>
428          <div class="card-stat-value">12</div>
429        </div>
430        <div class="card-stat">
431          <div class="card-stat-label">Flight Hrs</div>
432          <div class="card-stat-value">4.8</div>
433        </div>
434        <div class="card-stat">
435          <div class="card-stat-label">Fuel (tokens)</div>
436          <div class="card-stat-value">280K</div>
437        </div>
438        <div class="card-stat">
439          <div class="card-stat-label">Papers</div>
440          <div class="card-stat-value">12</div>
441        </div>
442      </div>
443    </div>
444  
445    <!-- Brew -->
446    <div class="aircraft-card">
447      <div class="card-header">
448        <span class="card-icon">☕</span>
449        <div>
450          <div class="card-callsign">BREW</div>
451          <div class="card-role">Tanker — URL Refueling</div>
452        </div>
453      </div>
454      <span class="altitude-badge alt-fl200">FL200 · Haiku</span>
455      <span class="status-badge status-standby">Standby</span>
456      <div class="card-stats">
457        <div class="card-stat">
458          <div class="card-stat-label">Sorties</div>
459          <div class="card-stat-value">3</div>
460        </div>
461        <div class="card-stat">
462          <div class="card-stat-label">Flight Hrs</div>
463          <div class="card-stat-value">0.4</div>
464        </div>
465        <div class="card-stat">
466          <div class="card-stat-label">Fuel (tokens)</div>
467          <div class="card-stat-value">15K</div>
468        </div>
469        <div class="card-stat">
470          <div class="card-stat-label">URLs Proc</div>
471          <div class="card-stat-value">3</div>
472        </div>
473      </div>
474    </div>
475  
476    <!-- LinkedIn Brief -->
477    <div class="aircraft-card">
478      <div class="card-header">
479        <span class="card-icon">📰</span>
480        <div>
481          <div class="card-callsign">LINKEDIN BRIEF</div>
482          <div class="card-role">ELINT — Intelligence Gathering</div>
483        </div>
484      </div>
485      <span class="altitude-badge alt-fl200">FL200 · Haiku</span>
486      <span class="status-badge status-standby">Standby</span>
487      <div class="card-stats">
488        <div class="card-stat">
489          <div class="card-stat-label">Sorties</div>
490          <div class="card-stat-value">2</div>
491        </div>
492        <div class="card-stat">
493          <div class="card-stat-label">Flight Hrs</div>
494          <div class="card-stat-value">0.4</div>
495        </div>
496        <div class="card-stat">
497          <div class="card-stat-label">Fuel (tokens)</div>
498          <div class="card-stat-value">12K</div>
499        </div>
500        <div class="card-stat">
501          <div class="card-stat-label">Briefs</div>
502          <div class="card-stat-value">1</div>
503        </div>
504      </div>
505    </div>
506  
507  </div>
508  
509  <!-- Flight Log -->
510  <div class="flight-log">
511    <div class="log-entry">
512      <span class="log-time">16:59Z</span>
513      <span class="log-callsign">TOWER</span>
514      <span class="log-mission">Generate Radicle identities for all fleet agents — beads-hub-46q.2</span>
515      <span class="log-status"><span class="complete">✓ RTB</span></span>
516    </div>
517    <div class="log-entry">
518      <span class="log-time">16:44Z</span>
519      <span class="log-callsign">ROMANOV</span>
520      <span class="log-mission">Research: One identity per fleet vs. one per agent (ERC-8004 — beads-hub-pw5</span>
521      <span class="log-status"><span class="complete">✓ RTB</span></span>
522    </div>
523    <div class="log-entry">
524      <span class="log-time">15:58Z</span>
525      <span class="log-callsign">TOWER</span>
526      <span class="log-mission">Install Radicle on gateway host (rad CLI + radicle-node) — beads-hub-46q.1</span>
527      <span class="log-status"><span class="complete">✓ RTB</span></span>
528    </div>
529    <div class="log-entry">
530      <span class="log-time">14:45Z</span>
531      <span class="log-callsign">ROMANOV</span>
532      <span class="log-mission">Research: A2A Protocol Spec & Landscape Analysis — beads-hub-98w.1</span>
533      <span class="log-status"><span class="complete">✓ RTB</span></span>
534    </div>
535    <div class="log-entry">
536      <span class="log-time">14:29Z</span>
537      <span class="log-callsign">TOWER</span>
538      <span class="log-mission">Agent Card: Define OpenClaw Agent Card Schema — beads-hub-98w.2</span>
539      <span class="log-status"><span class="complete">✓ RTB</span></span>
540    </div>
541    <div class="log-entry">
542      <span class="log-time">13:12Z</span>
543      <span class="log-callsign">PLTOPS</span>
544      <span class="log-mission">Migrate docs publishing from GitHub Pages to Codeberg Pages — beads-hub-75n</span>
545      <span class="log-status"><span class="complete">✓ RTB</span></span>
546    </div>
547    <div class="log-entry">
548      <span class="log-time">12:48Z</span>
549      <span class="log-callsign">TOWER</span>
550      <span class="log-mission">Draft DSGVO compliance assessment for #B4mad agent operation — beads-hub-3nb</span>
551      <span class="log-status"><span class="complete">✓ RTB</span></span>
552    </div>
553    <div class="log-entry">
554      <span class="log-time">12:09Z</span>
555      <span class="log-callsign">PLTOPS</span>
556      <span class="log-mission">Set up containerized Hugo build pipeline — beads-hub-b73.2</span>
557      <span class="log-status"><span class="complete">✓ RTB</span></span>
558    </div>
559    <div class="log-entry">
560      <span class="log-time">12:04Z</span>
561      <span class="log-callsign">TOWER</span>
562      <span class="log-mission">Create Hugo publishing skill for Peter Parker — beads-hub-b73.1</span>
563      <span class="log-status"><span class="complete">✓ RTB</span></span>
564    </div>
565    <div class="log-entry">
566      <span class="log-time">08:08Z</span>
567      <span class="log-callsign">TOWER</span>
568      <span class="log-mission">Align Node.js version for Hardhat compatibility — beads-hub-coj</span>
569      <span class="log-status"><span class="complete">✓ RTB</span></span>
570    </div>
571  </div>
572  
573  <div style="text-align: center; margin-top: 2rem;">
574    <p style="font-family: 'JetBrains Mono', monospace; font-size: 0.65rem; color: var(--text-muted); letter-spacing: 0.15em;">
575      DATA WINDOW: LAST 24 HOURS · UPDATED: 22 FEB 2026 17:55Z ·                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              REFRESH: <code>scripts/update-fleet-stats.sh</code> · RTB = RETURNED TO BASE
576    </p>
577  </div>