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>