Files
blog/samples/sample-dashboard.html

475 lines
15 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>River Rooks | Terminal Workspace Dashboard</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;700&family=Inter:wght@400;500;700&family=JetBrains+Mono:wght@400;500;700&display=swap');
:root {
--bg-canvas: #0d0f12;
--bg-surface: #121417;
--bg-elevated: #1c1f26;
--border-color: #2b303b;
--text-primary: #e0e6f0;
--text-muted: #8a95a5;
--accent-cyan: #00f0ff;
--accent-green: #00e676;
--accent-amber: #ffb700;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
background-color: var(--bg-canvas);
color: var(--text-primary);
font-family: 'Inter', sans-serif;
line-height: 1.6;
min-height: 100vh;
display: flex;
flex-direction: column;
}
/* Top Mode/Status Header */
.top-bar {
background-color: var(--bg-surface);
border-bottom: 1px solid var(--border-color);
padding: 8px 16px;
font-family: 'IBM Plex Mono', monospace;
font-size: 0.82rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.mode-tag {
background-color: var(--accent-cyan);
color: var(--bg-canvas);
padding: 2px 8px;
font-weight: 700;
border-radius: 2px;
}
.filepath {
color: var(--text-primary);
margin-left: 12px;
}
.status-group {
display: flex;
align-items: center;
gap: 16px;
color: var(--text-muted);
}
.status-dot {
width: 8px;
height: 8px;
background-color: var(--accent-green);
display: inline-block;
}
/* Tiled Grid Layout */
.dashboard-grid {
display: grid;
grid-template-columns: 300px 1fr 340px;
gap: 16px;
padding: 16px;
flex: 1;
}
@media (max-width: 1024px) {
.dashboard-grid {
grid-template-columns: 1fr;
}
}
/* Tile Container */
.tile {
background-color: var(--bg-surface);
border: 1px solid var(--border-color);
border-radius: 4px;
display: flex;
flex-direction: column;
}
.tile-header {
background-color: var(--bg-canvas);
border-bottom: 1px solid var(--border-color);
padding: 8px 14px;
font-family: 'IBM Plex Mono', monospace;
font-size: 0.85rem;
font-weight: 700;
color: var(--text-primary);
display: flex;
justify-content: space-between;
}
.tile-body {
padding: 16px;
flex: 1;
overflow-y: auto;
}
/* Services List (Left Tile) */
.service-card {
border: 1px solid var(--border-color);
background-color: var(--bg-canvas);
padding: 12px;
margin-bottom: 12px;
border-radius: 2px;
}
.service-head {
display: flex;
justify-content: space-between;
align-items: center;
font-family: 'IBM Plex Mono', monospace;
font-size: 0.85rem;
font-weight: 700;
margin-bottom: 4px;
}
.service-head a {
color: var(--text-primary);
text-decoration: none;
transition: none;
}
.service-head a:hover {
color: var(--accent-cyan);
}
.service-meta {
font-family: 'IBM Plex Mono', monospace;
font-size: 0.75rem;
color: var(--text-muted);
display: flex;
justify-content: space-between;
}
.badge-online { color: var(--accent-green); }
.badge-internal { color: var(--accent-amber); }
/* Resume / Main Content (Center Tile) */
.hero-title {
font-family: 'IBM Plex Mono', monospace;
font-size: 1.8rem;
font-weight: 700;
margin-bottom: 6px;
}
.subtitle {
font-family: 'IBM Plex Mono', monospace;
font-size: 0.85rem;
color: var(--accent-cyan);
margin-bottom: 16px;
}
.bio-prose {
font-size: 0.95rem;
max-width: 65ch;
margin-bottom: 20px;
}
.section-title {
font-family: 'IBM Plex Mono', monospace;
font-size: 1rem;
font-weight: 700;
border-bottom: 1px solid var(--border-color);
padding-bottom: 6px;
margin: 20px 0 12px 0;
}
.project-card {
border: 1px solid var(--border-color);
padding: 12px;
margin-bottom: 12px;
border-radius: 2px;
}
.project-card:hover {
background-color: var(--bg-elevated);
}
.project-title {
font-family: 'IBM Plex Mono', monospace;
font-size: 0.9rem;
font-weight: 700;
color: var(--accent-cyan);
margin-bottom: 4px;
}
.tag-cluster {
display: flex;
flex-wrap: wrap;
gap: 8px;
font-family: 'IBM Plex Mono', monospace;
font-size: 0.78rem;
color: var(--text-muted);
margin-top: 8px;
}
/* Notes / Log Stream (Right Tile) */
.article-item {
padding: 10px 0;
border-bottom: 1px solid var(--border-color);
}
.article-item:last-child { border-bottom: none; }
.article-date {
font-family: 'IBM Plex Mono', monospace;
font-size: 0.75rem;
color: var(--text-muted);
}
.article-link {
font-family: 'IBM Plex Mono', monospace;
font-size: 0.85rem;
font-weight: 700;
color: var(--text-primary);
text-decoration: none;
display: block;
margin: 2px 0;
transition: none;
}
.article-link:hover {
color: var(--accent-cyan);
}
/* Command Prompt Bar */
.cmd-footer {
background-color: var(--bg-surface);
border-top: 1px solid var(--border-color);
padding: 8px 16px;
font-family: 'JetBrains Mono', monospace;
font-size: 0.82rem;
display: flex;
align-items: center;
gap: 10px;
}
.prompt-symbol { color: var(--accent-cyan); font-weight: bold; }
.cmd-input {
background: none;
border: none;
color: var(--text-primary);
font-family: inherit;
font-size: inherit;
width: 100%;
outline: none;
}
</style>
</head>
<body>
<!-- Top Status Navigation -->
<header class="top-bar">
<div style="display: flex; align-items: center; gap: 12px;">
<span class="mode-tag">NORMAL</span>
<span class="filepath">/home/river/dashboard.workspace</span>
<span style="color: var(--border-color);">|</span>
<nav style="display: flex; gap: 8px; font-size: 0.78rem;">
<a href="index.html" style="color: var(--text-primary); text-decoration: none;">Catalog</a>
<span style="color: var(--border-color);">/</span>
<a href="homelab.html" style="color: var(--text-muted); text-decoration: none;">Homelab</a>
<span style="color: var(--border-color);">/</span>
<a href="public-services.html" style="color: var(--text-muted); text-decoration: none;">Services</a>
<span style="color: var(--border-color);">/</span>
<a href="sample-command-center.html" style="color: var(--text-muted); text-decoration: none;">Command</a>
<span style="color: var(--border-color);">/</span>
<a href="sample-dual-pane-explorer.html" style="color: var(--text-muted); text-decoration: none;">Explorer</a>
</nav>
</div>
<div class="status-group">
<span><span class="status-dot"></span> TRAEFIK: V3.1 OK</span>
<span>CLUSTER: 10GbE SFP+</span>
<span>UPTIME: 99.98%</span>
</div>
</header>
<!-- Main 3-Tile Dashboard -->
<main class="dashboard-grid">
<!-- Left Tile: Homelab & Public Services Directory -->
<section class="tile">
<div class="tile-header">
<span>/etc/services</span>
<span>[CANONICAL SERVICES]</span>
</div>
<div class="tile-body">
<div class="service-card">
<div class="service-head">
<a href="https://proxy.rooks.dev" target="_blank">Traefik Proxy (v3.1)</a>
<span class="badge-online">[ONLINE]</span>
</div>
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">Edge HTTP reverse proxy with dynamic ACME wildcard TLS.</p>
<div class="service-meta">
<span>PORT: 443/tcp</span>
<span>#core</span>
</div>
</div>
<div class="service-card">
<div class="service-head">
<a href="https://nas.rooks.dev" target="_blank">TrueNAS SCALE</a>
<span class="badge-online">[ONLINE]</span>
</div>
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">Primary storage pool managing 48TB ZFS RaidZ2 array.</p>
<div class="service-meta">
<span>NFS / SMB</span>
<span>#storage</span>
</div>
</div>
<div class="service-card">
<div class="service-head">
<a href="https://vault.rooks.dev" target="_blank">Vaultwarden Secrets</a>
<span class="badge-online">[E2EE]</span>
</div>
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">Lightweight Rust Bitwarden API hosting credentials &amp; 2FA.</p>
<div class="service-meta">
<span>2FA / AUTH</span>
<span>#secrets</span>
</div>
</div>
<div class="service-card">
<div class="service-head">
<a href="https://git.rooks.dev" target="_blank">Forgejo Git Forge</a>
<span class="badge-online">[PUBLIC]</span>
</div>
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">Self-hosted Git platform for dotfiles, playbooks &amp; CTF code.</p>
<div class="service-meta">
<span>PORT: 3000</span>
<span>#dev-git</span>
</div>
</div>
<div class="service-card">
<div class="service-head">
<a href="https://chef.rooks.dev" target="_blank">CyberChef Workbench</a>
<span class="badge-online">[PUBLIC]</span>
</div>
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">Hex decoding, Base64, hashing &amp; CTF payload analysis.</p>
<div class="service-meta">
<span>OPEN WEB</span>
<span>#security-tool</span>
</div>
</div>
</div>
</section>
<!-- Center Tile: Engineering Resume & Bio -->
<section class="tile">
<div class="tile-header">
<span>~/whoami.md</span>
<span>RESUME</span>
</div>
<div class="tile-body">
<h1 class="hero-title">River Rooks</h1>
<div class="subtitle">SYSTEMS ARCHITECTURE &amp; CYBERSECURITY</div>
<p class="bio-prose">
Cybersecurity student at the University of Alabama College of Engineering.
Focusing on network forensics, self-hosted infrastructure resilience, bare-metal virtualization, and low-level Unix tooling.
</p>
<h2 class="section-title">active_stack</h2>
<div class="tag-cluster">
<span>[#network-forensics]</span>
<span>[#docker-traefik]</span>
<span>[#arch-linux]</span>
<span>[#neovim]</span>
<span>[#wireguard]</span>
<span>[#posix-sh]</span>
<span>[#python]</span>
<span>[#golang]</span>
<span>[#rust]</span>
<span>[#proxmox]</span>
<span>[#truenas]</span>
</div>
<h2 class="section-title">featured_modules</h2>
<div class="project-card">
<div class="project-title">/dev/posix-shell-parser <span style="font-size: 0.75rem; color: var(--text-muted);">[v1.2.0 • #lua]</span></div>
<p style="font-size: 0.85rem; color: var(--text-primary);">
Zero-allocation Lexer and AST parser written in Lua for parsing POSIX shell scripts inside modal terminal buffers.
</p>
</div>
<div class="project-card">
<div class="project-title">/dev/wireguard-mesh <span style="font-size: 0.75rem; color: var(--text-muted);">[v0.8.4 • #wireguard]</span></div>
<p style="font-size: 0.85rem; color: var(--text-primary);">
Automated configuration generator computing key matrices and provisioning full-mesh WireGuard private overlays across cloud and homelab nodes.
</p>
</div>
<div class="project-card">
<div class="project-title">/dev/zero-alloc-logger <span style="font-size: 0.75rem; color: var(--text-muted);">[v2.1.1 • #golang]</span></div>
<p style="font-size: 0.85rem; color: var(--text-primary);">
High-throughput structured JSON logger utilizing sync.Pool byte buffers to eliminate heap allocation GC overhead (>500k ops/sec).
</p>
</div>
</div>
</section>
<!-- Right Tile: Technical Notes & Blog Stream -->
<section class="tile">
<div class="tile-header">
<span>/var/log/articles.log</span>
<span>NOTES</span>
</div>
<div class="tile-body">
<div class="article-item">
<div class="article-date">2026-07-20 | #FIRMWARE</div>
<a href="#" class="article-link">Reverse Engineering IoT Firmware: SPI Flash Extraction</a>
<p style="font-size: 0.78rem; color: var(--text-muted);">Dumping SPI flash chips via Bus Pirate &amp; flashrom to bypass locked bootloaders.</p>
</div>
<div class="article-item">
<div class="article-date">2026-07-15 | #HOMELAB</div>
<a href="#" class="article-link">Building a High-Availability Traefik Router with Docker Compose</a>
<p style="font-size: 0.78rem; color: var(--text-muted);">Dynamic Docker provider discovery &amp; Let's Encrypt automated TLS wildcard routing.</p>
</div>
<div class="article-item">
<div class="article-date">2026-07-10 | #POSIX-SH</div>
<a href="#" class="article-link">POSIX sh vs. Bash: Portability in Modern Scripts</a>
<p style="font-size: 0.78rem; color: var(--text-muted);">Eliminating bashisms and adhering to IEEE Std 1003.1 for high-speed bootstrapping.</p>
</div>
<div class="article-item">
<div class="article-date">2026-06-28 | #CTF</div>
<a href="#" class="article-link">CTF Write-up: Heap Exploitation in glibc 2.35</a>
<p style="font-size: 0.78rem; color: var(--text-muted);">Tcache safe-linking bypass and House of Apple file structure hijacking primitives.</p>
</div>
<div class="article-item">
<div class="article-date">2026-06-14 | #NETWORKING</div>
<a href="#" class="article-link">Zero-Trust Network Isolation with WireGuard &amp; OPNsense VLANs</a>
<p style="font-size: 0.78rem; color: var(--text-muted);">Segregating untrusted IoT devices, homelab servers, and management networks.</p>
</div>
</div>
</section>
</main>
<!-- Interactive Terminal Footer Bar -->
<footer class="cmd-footer">
<span class="prompt-symbol">$</span>
<input type="text" class="cmd-input" placeholder="River Rooks Workspace • Type :help or click links to navigate..." readonly>
</footer>
</body>
</html>