added more specs and rebuilt for simpler additions
This commit is contained in:
434
samples/sample-dashboard.html
Normal file
434
samples/sample-dashboard.html
Normal file
@@ -0,0 +1,434 @@
|
||||
<!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>
|
||||
<span class="mode-tag">NORMAL</span>
|
||||
<span class="filepath">/home/river/dashboard.workspace</span>
|
||||
</div>
|
||||
<div class="status-group">
|
||||
<span><span class="status-dot"></span> TRAEFIK: MESH_OK</span>
|
||||
<span>SYS_LOAD: 0.14</span>
|
||||
<span>UPTIME: 99.98%</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Main 3-Tile Dashboard -->
|
||||
<main class="dashboard-grid">
|
||||
|
||||
<!-- Left Tile: Homelab Services Directory -->
|
||||
<section class="tile">
|
||||
<div class="tile-header">
|
||||
<span>/etc/services</span>
|
||||
<span>[4 ACTIVE]</span>
|
||||
</div>
|
||||
<div class="tile-body">
|
||||
|
||||
<div class="service-card">
|
||||
<div class="service-head">
|
||||
<a href="https://grafana.local" target="_blank">grafana.homelab</a>
|
||||
<span class="badge-online">[ONLINE]</span>
|
||||
</div>
|
||||
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">Telemetry & Prometheus monitoring dashboards.</p>
|
||||
<div class="service-meta">
|
||||
<span>PORT: :3000</span>
|
||||
<span>HTTPS</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="service-card">
|
||||
<div class="service-head">
|
||||
<a href="https://vault.local" target="_blank">vault.homelab</a>
|
||||
<span class="badge-online">[ONLINE]</span>
|
||||
</div>
|
||||
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">HashiCorp Vault secret storage & certificates.</p>
|
||||
<div class="service-meta">
|
||||
<span>PORT: :8200</span>
|
||||
<span>mTLS</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="service-card">
|
||||
<div class="service-head">
|
||||
<a href="https://nextcloud.local" target="_blank">cloud.homelab</a>
|
||||
<span class="badge-online">[ONLINE]</span>
|
||||
</div>
|
||||
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">Private encrypted document & data storage.</p>
|
||||
<div class="service-meta">
|
||||
<span>PORT: :443</span>
|
||||
<span>HTTPS</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="service-card">
|
||||
<div class="service-head">
|
||||
<a href="https://wireguard.local" target="_blank">vpn.homelab</a>
|
||||
<span class="badge-internal">[INTERNAL]</span>
|
||||
</div>
|
||||
<p style="font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px;">WireGuard mesh overlay network ingress.</p>
|
||||
<div class="service-meta">
|
||||
<span>UDP: :51820</span>
|
||||
<span>VPN</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 ARCHITECT & CYBERSECURITY RESEARCHER</div>
|
||||
|
||||
<p class="bio-prose">
|
||||
Computer Science & Cybersecurity student at the University of Alabama College of Engineering.
|
||||
Specializing in low-level network forensics, self-hosted infrastructure resilience, and hardened Linux kernel configurations.
|
||||
</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>[#hashicorp-vault]</span>
|
||||
</div>
|
||||
|
||||
<h2 class="section-title">featured_projects</h2>
|
||||
|
||||
<div class="project-card">
|
||||
<div class="project-title">mesh-topology-builder</div>
|
||||
<p style="font-size: 0.85rem; color: var(--text-primary);">
|
||||
Automated WireGuard mesh network provisioner written in POSIX shell and Python. Generates deterministic keypairs and Traefik routing rules.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="project-card">
|
||||
<div class="project-title">pcap-forensics-parser</div>
|
||||
<p style="font-size: 0.85rem; color: var(--text-primary);">
|
||||
High-throughput PCAP packet analyzer built for CTF competitions to detect anomalous TCP handshake flags and hidden ICMP payloads.
|
||||
</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-08-02 | #HOMELAB</div>
|
||||
<a href="#" class="article-link">Hardening Traefik Ingress with HashiCorp Vault mTLS</a>
|
||||
<p style="font-size: 0.78rem; color: var(--text-muted);">Zero-trust certificate auto-renewal pipeline configuration.</p>
|
||||
</div>
|
||||
|
||||
<div class="article-item">
|
||||
<div class="article-date">2026-07-18 | #CTF</div>
|
||||
<a href="#" class="article-link">DEFCON CTF Qualifier: Memory Corruption & Heap Exploitation</a>
|
||||
<p style="font-size: 0.78rem; color: var(--text-muted);">Deconstructing glibc malloc chunk metadata manipulation.</p>
|
||||
</div>
|
||||
|
||||
<div class="article-item">
|
||||
<div class="article-date">2026-06-29 | #LINUX</div>
|
||||
<a href="#" class="article-link">Custom Linux Kernel Compilation for BPF Network Tracing</a>
|
||||
<p style="font-size: 0.78rem; color: var(--text-muted);">Configuring eBPF probe hooks for real-time socket inspection.</p>
|
||||
</div>
|
||||
|
||||
<div class="article-item">
|
||||
<div class="article-date">2026-05-14 | #HYPRLAND</div>
|
||||
<a href="#" class="article-link">Minimalist Dotfiles & Hyprland Keybindings Optimization</a>
|
||||
<p style="font-size: 0.78rem; color: var(--text-muted);">Ergonomic modal editing & window tiling configuration setup.</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="Type :help, :open <service>, or press Ctrl+K for commands..." readonly>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user