added more samples and identified ideal candidates
This commit is contained in:
@@ -0,0 +1,661 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>River Rooks | Blog Lander (Dual-Lead Grid & Feed)</title>
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,700;1,400&family=Inter:wght@400;500;700&family=JetBrains+Mono:ital,wght@0,400;0,500;1,400&display=swap');
|
||||
|
||||
:root {
|
||||
--bg-canvas: #0d0f12; /* Deep slate/charcoal canvas */
|
||||
--bg-surface: #121417; /* Tile surface */
|
||||
--bg-elevated: #1c1f26; /* Hovered tile surface */
|
||||
--border-color: #2b303b; /* Crisp 1px border */
|
||||
--text-primary: #e0e6f0; /* Light off-white prose */
|
||||
--text-muted: #8a95a5; /* Monospace metadata */
|
||||
--accent-cyan: #00f0ff; /* Primary active accent */
|
||||
--accent-green: #00e676; /* Operational status indicator */
|
||||
--accent-amber: #ffb700; /* Highlight accent */
|
||||
}
|
||||
|
||||
* {
|
||||
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;
|
||||
align-items: center;
|
||||
padding: 24px 16px 48px 16px;
|
||||
}
|
||||
|
||||
.tiling-layout {
|
||||
width: 100%;
|
||||
max-width: 1120px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
/* Top Global Header Bar (Gateway 3 Match) */
|
||||
.global-bar {
|
||||
background-color: var(--bg-surface);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
padding: 10px 18px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.8rem;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.brand-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
color: var(--text-primary);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.status-indicator {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background-color: var(--accent-green);
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.bar-nav {
|
||||
display: flex;
|
||||
gap: 14px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.bar-link {
|
||||
color: var(--text-muted);
|
||||
text-decoration: none;
|
||||
transition: none; /* Instant snap */
|
||||
}
|
||||
|
||||
.bar-link:hover {
|
||||
color: var(--accent-cyan);
|
||||
}
|
||||
|
||||
.bar-link.active {
|
||||
color: var(--text-primary);
|
||||
border-bottom: 1px solid var(--accent-cyan);
|
||||
}
|
||||
|
||||
/* Hero Section Tile */
|
||||
.hero-tile {
|
||||
background-color: var(--bg-surface);
|
||||
border: 1px solid var(--border-color);
|
||||
border-left: 3px solid var(--accent-cyan);
|
||||
border-radius: 4px;
|
||||
padding: 24px 28px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.hero-pretitle {
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.8rem;
|
||||
color: var(--accent-cyan);
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.hero-main-title {
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 2.1rem;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.hero-landing-text {
|
||||
font-size: 0.98rem;
|
||||
color: var(--text-primary);
|
||||
line-height: 1.65;
|
||||
max-width: 84ch;
|
||||
}
|
||||
|
||||
.hero-metadata-badges {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.74rem;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.meta-badge {
|
||||
background-color: var(--bg-canvas);
|
||||
border: 1px solid var(--border-color);
|
||||
padding: 3px 8px;
|
||||
border-radius: 2px;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
/* Dual-Lead Grid: 2 Side-by-Side Featured Cards */
|
||||
.dual-lead-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
@media (max-width: 840px) {
|
||||
.dual-lead-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tile Container Style */
|
||||
.tile {
|
||||
background-color: var(--bg-surface);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
gap: 14px;
|
||||
}
|
||||
|
||||
.tile-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.tile-title {
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.88rem;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.tile-meta {
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.74rem;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.lead-badge-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.74rem;
|
||||
}
|
||||
|
||||
.lead-heading {
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
text-decoration: none;
|
||||
line-height: 1.35;
|
||||
display: inline-block;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.lead-heading:hover {
|
||||
color: var(--accent-cyan);
|
||||
}
|
||||
|
||||
.lead-excerpt {
|
||||
font-size: 0.88rem;
|
||||
color: var(--text-primary);
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
/* Terminal Code Snippet */
|
||||
.code-preview {
|
||||
background-color: var(--bg-canvas);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 3px;
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 0.76rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.code-preview-header {
|
||||
background-color: var(--bg-elevated);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
padding: 4px 10px;
|
||||
font-size: 0.72rem;
|
||||
color: var(--text-muted);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.code-preview-body {
|
||||
padding: 10px;
|
||||
overflow-x: auto;
|
||||
color: var(--text-primary);
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.lead-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-top: 10px;
|
||||
border-top: 1px solid var(--border-color);
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.76rem;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.read-lead-btn {
|
||||
background-color: var(--accent-cyan);
|
||||
color: var(--bg-canvas);
|
||||
padding: 5px 12px;
|
||||
font-weight: 700;
|
||||
border-radius: 2px;
|
||||
text-decoration: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.read-lead-btn:hover {
|
||||
background-color: transparent;
|
||||
color: var(--accent-cyan);
|
||||
box-shadow: inset 0 0 0 1px var(--accent-cyan);
|
||||
}
|
||||
|
||||
/* Archive Dispatches Feed Table */
|
||||
.archive-feed-tile {
|
||||
background-color: var(--bg-surface);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 14px;
|
||||
}
|
||||
|
||||
.archive-table-wrapper {
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.archive-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: 0.82rem;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.archive-table th {
|
||||
padding: 8px 12px;
|
||||
background-color: var(--bg-canvas);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
color: var(--text-muted);
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
}
|
||||
|
||||
.archive-table td {
|
||||
padding: 12px;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
vertical-align: middle;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.archive-row {
|
||||
cursor: pointer;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.archive-row:hover {
|
||||
background-color: var(--bg-elevated);
|
||||
}
|
||||
|
||||
.archive-row.active {
|
||||
background-color: var(--bg-elevated);
|
||||
border-left: 2px solid var(--accent-cyan);
|
||||
}
|
||||
|
||||
.archive-title-link {
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
color: var(--text-primary);
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.archive-row:hover .archive-title-link {
|
||||
color: var(--accent-cyan);
|
||||
}
|
||||
|
||||
/* Interactive Inline Inspection Pane */
|
||||
.inspect-box {
|
||||
background-color: var(--bg-canvas);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 3px;
|
||||
padding: 16px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.inspect-head {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
padding-bottom: 8px;
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.78rem;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.inspect-prose {
|
||||
font-family: 'Inter', sans-serif;
|
||||
font-size: 0.9rem;
|
||||
color: var(--text-primary);
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* Global Footer Tile (Gateway 3 Match) */
|
||||
.footer-tile {
|
||||
background-color: var(--bg-surface);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
padding: 12px 20px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 0.78rem;
|
||||
color: var(--text-muted);
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.footer-links-cluster {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.footer-btn {
|
||||
color: var(--text-primary);
|
||||
text-decoration: none;
|
||||
padding: 2px 4px;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.footer-btn:hover {
|
||||
background-color: var(--accent-cyan);
|
||||
color: var(--bg-canvas);
|
||||
}
|
||||
|
||||
.pipe {
|
||||
color: var(--border-color);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<main class="tiling-layout">
|
||||
|
||||
<!-- Top Global Bar (Gateway 3 Match) -->
|
||||
<header class="global-bar">
|
||||
<div class="brand-group">
|
||||
<span class="status-indicator"></span>
|
||||
<span>RIVER ROOKS // DUAL-LEAD DISPATCH CATALOG</span>
|
||||
</div>
|
||||
<nav class="bar-nav" aria-label="Quick Navigation">
|
||||
<a href="service-gateway-tiling.html" class="bar-link">Gateway 3 ↗</a>
|
||||
<a href="#" class="bar-link active">> Catalog</a>
|
||||
<a href="https://git.rooks.dev" target="_blank" rel="noopener" class="bar-link">Git Forge</a>
|
||||
<a href="feed.xml" class="bar-link">RSS</a>
|
||||
<a href="index.html" class="bar-link">Samples ↗</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- Hero Tile: Mission Statement & Metadata Badges -->
|
||||
<section class="hero-tile" aria-label="Blog Declaration">
|
||||
<div class="hero-pretitle">RESEARCH • DISPATCHES • SPECIFICATIONS</div>
|
||||
<h1 class="hero-main-title">Systems Research & Security Engineering Feed</h1>
|
||||
<p class="hero-landing-text">
|
||||
This catalog organizes field reports across two primary research vectors: hardware firmware reverse engineering and bare-metal self-hosted cloud infrastructure. Full source code, shell bootstrapping scripts, and network topology manifests are included.
|
||||
</p>
|
||||
|
||||
<div class="hero-metadata-badges">
|
||||
<span class="meta-badge">[NODE: gw-node01.lan]</span>
|
||||
<span class="meta-badge">[5 CANONICAL DISPATCHES]</span>
|
||||
<span class="meta-badge">[FORMAT: GHOSTTY / ZED MINIMALISM]</span>
|
||||
<span class="meta-badge">[ENCRYPTED SYNC: WIREGUARD]</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Dual-Lead Grid: 2 Featured Stories Side-by-Side -->
|
||||
<div class="dual-lead-grid">
|
||||
|
||||
<!-- Lead 1: Firmware Reversing -->
|
||||
<section class="tile" aria-label="Lead Article 1">
|
||||
<div class="tile-header">
|
||||
<div class="tile-title">
|
||||
<span>// LEAD: HARDWARE FORENSICS</span>
|
||||
</div>
|
||||
<span class="tile-meta">2026-07-20 • 8 MIN</span>
|
||||
</div>
|
||||
|
||||
<div style="display: flex; flex-direction: column; gap: 10px;">
|
||||
<div class="lead-badge-row">
|
||||
<span style="color: var(--accent-amber); font-weight: 700; font-family: 'IBM Plex Mono', monospace;">[PINNED LEAD]</span>
|
||||
<span style="color: var(--text-muted); font-family: 'IBM Plex Mono', monospace;">~/notes/iot-firmware-spi-extraction.md</span>
|
||||
</div>
|
||||
|
||||
<h2 style="margin: 0;">
|
||||
<a href="#" class="lead-heading">Reverse Engineering IoT Firmware: SPI Flash Extraction</a>
|
||||
</h2>
|
||||
|
||||
<p class="lead-excerpt">
|
||||
Extracting binary firmware from an 8-pin SOP SPI flash chip using a Bus Pirate and flashrom to bypass locked-down UART/JTAG interfaces on production microcontrollers.
|
||||
</p>
|
||||
|
||||
<div class="code-preview">
|
||||
<div class="code-preview-header">
|
||||
<span>extract_firmware.sh</span>
|
||||
<span>POSIX sh</span>
|
||||
</div>
|
||||
<div class="code-preview-body">
|
||||
<pre><code>flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M \
|
||||
-r firmware_dump.bin && md5sum firmware_dump.bin</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="lead-footer">
|
||||
<span style="color: var(--text-muted);">[#firmware] [#hardware]</span>
|
||||
<a href="#" class="read-lead-btn">READ WRITEUP [8 MIN] →</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Lead 2: Traefik Infrastructure -->
|
||||
<section class="tile" aria-label="Lead Article 2">
|
||||
<div class="tile-header">
|
||||
<div class="tile-title">
|
||||
<span>// LEAD: INFRASTRUCTURE ROUTING</span>
|
||||
</div>
|
||||
<span class="tile-meta">2026-07-15 • 12 MIN</span>
|
||||
</div>
|
||||
|
||||
<div style="display: flex; flex-direction: column; gap: 10px;">
|
||||
<div class="lead-badge-row">
|
||||
<span style="color: var(--accent-cyan); font-weight: 700; font-family: 'IBM Plex Mono', monospace;">[PINNED LEAD]</span>
|
||||
<span style="color: var(--text-muted); font-family: 'IBM Plex Mono', monospace;">~/notes/ha-traefik-docker.md</span>
|
||||
</div>
|
||||
|
||||
<h2 style="margin: 0;">
|
||||
<a href="#" class="lead-heading">High-Availability Traefik Router with Docker Compose</a>
|
||||
</h2>
|
||||
|
||||
<p class="lead-excerpt">
|
||||
Architecting automated TLS wildcard certificate propagation, Docker provider label routing, zero-downtime container updates, and backend health-check failover.
|
||||
</p>
|
||||
|
||||
<div class="code-preview">
|
||||
<div class="code-preview-header">
|
||||
<span>docker-compose.traefik.yml</span>
|
||||
<span>YAML</span>
|
||||
</div>
|
||||
<div class="code-preview-body">
|
||||
<pre><code>services:
|
||||
traefik:
|
||||
image: traefik:v3.1
|
||||
command: ["--providers.docker=true", "--entrypoints.websecure.address=:443"]</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="lead-footer">
|
||||
<span style="color: var(--text-muted);">[#homelab] [#docker-traefik]</span>
|
||||
<a href="#" class="read-lead-btn">READ WRITEUP [12 MIN] →</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Archive Dispatches Feed Tile with Interactive Inspector -->
|
||||
<section class="archive-feed-tile" aria-label="Chronological Dispatches Archive">
|
||||
<div class="tile-header">
|
||||
<div class="tile-title">
|
||||
<span>// CHRONOLOGICAL DISPATCHES ARCHIVE</span>
|
||||
</div>
|
||||
<span class="tile-meta">SELECT ROW TO INSPECT NOTES</span>
|
||||
</div>
|
||||
|
||||
<div class="archive-table-wrapper">
|
||||
<table class="archive-table" aria-label="Archive table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">DATE</th>
|
||||
<th scope="col">CATEGORY</th>
|
||||
<th scope="col">TITLE / PATH</th>
|
||||
<th scope="col">READ TIME</th>
|
||||
<th scope="col">ACTION</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<tr class="archive-row active" onclick="inspectRow(0)">
|
||||
<td><span style="color: var(--accent-cyan); font-family: 'IBM Plex Mono', monospace;">2026-07-10</span></td>
|
||||
<td><span style="color: var(--text-muted); font-family: 'IBM Plex Mono', monospace;">[#posix-sh]</span></td>
|
||||
<td><a href="#" class="archive-title-link">> POSIX sh vs. Bash: Portability in Modern Scripts</a></td>
|
||||
<td><span style="color: var(--text-muted); font-family: 'IBM Plex Mono', monospace;">6 min</span></td>
|
||||
<td><span style="color: var(--accent-cyan); font-family: 'IBM Plex Mono', monospace;">[INSPECT ↓]</span></td>
|
||||
</tr>
|
||||
|
||||
<tr class="archive-row" onclick="inspectRow(1)">
|
||||
<td><span style="color: var(--accent-cyan); font-family: 'IBM Plex Mono', monospace;">2026-06-28</span></td>
|
||||
<td><span style="color: var(--text-muted); font-family: 'IBM Plex Mono', monospace;">[#ctf]</span></td>
|
||||
<td><a href="#" class="archive-title-link">> CTF Write-up: Heap Exploitation in glibc 2.35</a></td>
|
||||
<td><span style="color: var(--text-muted); font-family: 'IBM Plex Mono', monospace;">15 min</span></td>
|
||||
<td><span style="color: var(--accent-cyan); font-family: 'IBM Plex Mono', monospace;">[INSPECT ↓]</span></td>
|
||||
</tr>
|
||||
|
||||
<tr class="archive-row" onclick="inspectRow(2)">
|
||||
<td><span style="color: var(--accent-cyan); font-family: 'IBM Plex Mono', monospace;">2026-06-14</span></td>
|
||||
<td><span style="color: var(--text-muted); font-family: 'IBM Plex Mono', monospace;">[#networking]</span></td>
|
||||
<td><a href="#" class="archive-title-link">> Zero-Trust Network Isolation with WireGuard & OPNsense VLANs</a></td>
|
||||
<td><span style="color: var(--text-muted); font-family: 'IBM Plex Mono', monospace;">10 min</span></td>
|
||||
<td><span style="color: var(--accent-cyan); font-family: 'IBM Plex Mono', monospace;">[INSPECT ↓]</span></td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Inspection Details Box -->
|
||||
<div class="inspect-box" id="inspectBox">
|
||||
<div class="inspect-head">
|
||||
<span id="inspectPath" style="color: var(--accent-cyan); font-weight: 700;">~/notes/posix-sh-vs-bash.md</span>
|
||||
<span id="inspectMeta">2026-07-10 • 6 MIN READ • [#posix-sh] [#shell] [#unix]</span>
|
||||
</div>
|
||||
<p class="inspect-prose" id="inspectProse">
|
||||
Analyzing edge-case incompatibilities, syntax overhead, eliminating bashisms, and writing fast, bulletproof bootstrapping scripts for Alpine and embedded targets conforming to IEEE Std 1003.1.
|
||||
</p>
|
||||
<div style="display: flex; justify-content: flex-end;">
|
||||
<a href="#" id="inspectReadBtn" class="read-lead-btn" style="padding: 4px 10px; font-size: 0.76rem;">OPEN ENTRY →</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
<!-- Global Footer Tile (Matching Gateway 3 Exactly) -->
|
||||
<footer class="footer-tile">
|
||||
<div>River Rooks • University of Alabama College of Engineering</div>
|
||||
<nav class="footer-links-cluster" aria-label="Global Footer Links">
|
||||
<a href="service-gateway-tiling.html" class="footer-btn">Gateway Lander</a>
|
||||
<span class="pipe">|</span>
|
||||
<a href="feed.xml" class="footer-btn">RSS</a>
|
||||
<span class="pipe">|</span>
|
||||
<a href="https://git.rooks.dev" target="_blank" rel="noopener" class="footer-btn">Forgejo</a>
|
||||
<span class="pipe">|</span>
|
||||
<a href="mailto:river@rooks.dev" class="footer-btn">river@rooks.dev</a>
|
||||
<span class="pipe">|</span>
|
||||
<a href="#" title="Fingerprint: 0x4A8E92F1C0B3D4E7" class="footer-btn">PGP</a>
|
||||
<span class="pipe">|</span>
|
||||
<a href="index.html" class="footer-btn">Catalog ↗</a>
|
||||
</nav>
|
||||
</footer>
|
||||
|
||||
</main>
|
||||
|
||||
<script>
|
||||
const archiveData = [
|
||||
{
|
||||
path: '~/notes/posix-sh-vs-bash.md',
|
||||
meta: '2026-07-10 • 6 MIN READ • [#posix-sh] [#shell] [#unix]',
|
||||
prose: 'Analyzing edge-case incompatibilities, syntax overhead, eliminating bashisms, and writing fast, bulletproof bootstrapping scripts for Alpine and embedded targets conforming to IEEE Std 1003.1.'
|
||||
},
|
||||
{
|
||||
path: '~/notes/ctf-heap-glibc-2-35.md',
|
||||
meta: '2026-06-28 • 15 MIN READ • [#ctf] [#binary-exploitation] [#security]',
|
||||
prose: 'Deconstructing modern glibc memory allocator defenses: tcache safe-linking pointer mangling, bypass primitives, and House of Apple file structure hijacking for arbitrary code execution.'
|
||||
},
|
||||
{
|
||||
path: '~/notes/zero-trust-wireguard-opnsense.md',
|
||||
meta: '2026-06-14 • 10 MIN READ • [#networking] [#wireguard] [#security]',
|
||||
prose: 'Designing strict zone-based firewall rules across isolated VLANs (Management, Server DMZ, IoT, Trusted Clients) with point-to-point WireGuard cryptographic routing.'
|
||||
}
|
||||
];
|
||||
|
||||
function inspectRow(idx) {
|
||||
document.querySelectorAll('.archive-row').forEach(row => row.classList.remove('active'));
|
||||
const activeRow = document.querySelectorAll('.archive-row')[idx];
|
||||
if (activeRow) activeRow.classList.add('active');
|
||||
|
||||
const data = archiveData[idx];
|
||||
if (data) {
|
||||
document.getElementById('inspectPath').innerText = data.path;
|
||||
document.getElementById('inspectMeta').innerText = data.meta;
|
||||
document.getElementById('inspectProse').innerText = data.prose;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user