feat: set Gateway 3 as root index and move dispatches to /dispatches/

- Update src/index.njk with Gateway 3 homelab services router and cluster telemetry
- Create src/dispatches.njk for the full-width technical dispatches feed and tag filters
- Update src/_data/site.json navigation hierarchy to reflect root Gateway and /dispatches/
- Update breadcrumbs and return links in post.njk and hero-tile.njk
This commit is contained in:
venus
2026-09-13 01:08:42 -05:00
parent d8fb8a3699
commit b13a50ccee
6 changed files with 174 additions and 174 deletions
+4 -4
View File
@@ -1,18 +1,18 @@
{
"name": "River Rooks",
"title": "River Rooks | Technical Publication",
"title": "River Rooks | Homelab Gateway",
"description": "Engineering Notes, CTF Write-Ups & Systems Architecture",
"status": "SYSTEMS NOMINAL",
"author": "River Rooks",
"systemSpec": "IEEE STD 1003.1",
"nav": [
{
"label": "Dispatches",
"label": "Gateway 3",
"url": "/"
},
{
"label": "Gateway 3",
"url": "/gateway/"
"label": "Dispatches",
"url": "/dispatches/"
},
{
"label": "Git Forge",
+2 -2
View File
@@ -52,7 +52,7 @@
</div>
<div style="padding-top: 10px; border-top: var(--border-width) solid var(--border-color);">
<a href="/" class="filter-tag-btn" style="width: 100%; justify-content: center;">
<a href="/dispatches/" class="filter-tag-btn" style="width: 100%; justify-content: center;">
&larr; Return to Dispatches
</a>
</div>
@@ -63,7 +63,7 @@
<article class="article-tile" aria-labelledby="article-title">
<header class="article-header-block">
<nav class="article-breadcrumbs" aria-label="Breadcrumb">
<a href="/">~/NOTES</a>
<a href="/dispatches/">~/NOTES</a>
<span>/</span>
<span>{{ (tags | filterTagList)[0] | default('DISPATCHES') | upper }}</span>
<span>/</span>
+1 -1
View File
@@ -6,7 +6,7 @@
</p>
<div class="filter-pills-row" aria-label="Topic Filters">
<a href="/" class="filter-tag-btn {% if not currentTag %}active{% endif %}">
<a href="/dispatches/" class="filter-tag-btn {% if not currentTag %}active{% endif %}">
[All Dispatches ({{ collections.posts.length }})]
</a>
{% for tag in collections.tagList %}
+39
View File
@@ -0,0 +1,39 @@
---
layout: layouts/base.njk
title: "River Rooks | Engineering Notes & Systems Architecture"
---
<!-- 1. Lander Hero Tile with Dynamic Filter Tag Buttons -->
{% include "partials/hero-tile.njk" %}
<!-- 2. Asymmetric Split Grid: Featured Lead Post (Left) & Telemetry Sidebar (Right) -->
<div class="split-grid">
<div class="split-lead-col">
{% include "partials/featured-card.njk" %}
</div>
<div class="split-sidebar-col">
{% include "partials/stats-sidebar.njk" %}
</div>
</div>
<!-- 3. Full-Width Chronological Dispatches Feed Tile -->
<section class="tile" aria-label="Dispatches Feed Catalog">
<header class="tile-header">
<div class="tile-title">
<span class="status-indicator"></span>
RECENT DISPATCHES
</div>
<span class="tile-meta">ORDER: CHRONOLOGICAL DESC &bull; TOTAL: {{ collections.posts.length }}</span>
</header>
<div class="feed-list">
{% for post in collections.posts %}
{% include "partials/post-card.njk" %}
{% else %}
<p style="color: var(--text-muted); font-family: var(--font-mono); font-size: 0.85rem; padding: 16px;">
No published dispatches found in repository.
</p>
{% endfor %}
</div>
</section>
-137
View File
@@ -1,137 +0,0 @@
---
layout: layouts/base.njk
title: "River Rooks | Homelab Gateway"
---
<!-- Main Hero Landing Tile -->
<section class="hero-tile" aria-label="Gateway Declaration">
<div class="hero-pretitle">SYSTEM DECLARATION &bull; RACK-01 NODE GATEWAY</div>
<h1 class="hero-main-title">Engineering Sovereign Infrastructure &amp; Technical Notes</h1>
<div class="hero-landing-text">
<p>
My work centers on network forensics, self-hosted system architecture, low-level firmware exploitation, and zero-allocation Unix utilities.
</p>
<p>
This gateway functions as the frontend for my physical homelab cluster. Rather than hosting projects on opaque third-party clouds, everything here runs on bare metal in my personal server rack—orchestrated through Proxmox VE, partitioned across isolated VLANs via OPNsense, and protected by point-to-point WireGuard cryptographic meshes.
</p>
</div>
<div class="hero-directive-box">
<strong>PRIMARY DESTINATIONS:</strong>
<span style="color: var(--accent-cyan); margin-left: 8px;">[1] Technical Blog ({{ collections.posts.length }} Articles)</span> &bull;
<span>[2] Forgejo Git Repos</span> &bull;
<span>[3] Public Tools</span> &bull;
<span>[4] Cluster Telemetry</span>
</div>
</section>
<!-- Split Tiling Columns -->
<div class="split-grid">
<!-- Left Column: Featured Service (Blog) + Dynamic Recent Articles -->
<div style="display: flex; flex-direction: column; gap: var(--tile-gap);">
<section class="tile" aria-label="Featured Service: Technical Blog">
<header class="tile-header">
<div class="tile-title">
<span class="status-indicator"></span>
// PRIMARY SERVICE: THE TECHNICAL BLOG
</div>
<span class="tile-meta">~/notes/ &bull; {{ collections.posts.length }} ARTICLES</span>
</header>
<div class="blog-service-feature">
<div class="blog-feature-top">
<span class="badge-core">[CORE PUBLICATION SERVICE]</span>
<span style="color: var(--text-muted);">{{ collections.posts[0].date | postDate }} LAST SYNC</span>
</div>
<a href="/" class="blog-feature-title">&gt; River Rooks Technical Notes &amp; Research</a>
<p class="blog-feature-desc">
In-depth security post-mortems, CTF write-ups, shell portability benchmarks, and bare-metal homelab architecture guides.
</p>
<div class="blog-sublinks">
{% for post in collections.posts | limit(4) %}
<a href="{{ post.url }}" class="blog-sublink-item">
<span>{{ loop.index }}. {{ post.data.title }}</span>
<span style="color: var(--accent-cyan);">[{{ post.templateContent | readingTime(post.data.readingTime) }}] &rarr;</span>
</a>
{% endfor %}
</div>
</div>
</section>
</div>
<!-- Right Column: Homelab Hosted Services & Node Telemetry -->
<div style="display: flex; flex-direction: column; gap: var(--tile-gap);">
<section class="tile" aria-label="Homelab Services Directory">
<header class="tile-header">
<div class="tile-title">
<span class="status-indicator"></span>
// HOMELAB SERVICES ROUTER
</div>
<span class="tile-meta">4 PUBLIC TOOLS</span>
</header>
<div class="services-mini-grid">
<a href="https://git.rooks.dev" target="_blank" rel="noopener noreferrer" class="service-tile-item">
<div>
<div class="service-item-title">Forgejo Git</div>
<div class="service-item-tag">git.rooks.dev:2222</div>
</div>
<p class="service-item-desc">Self-hosted code repositories &amp; dotfiles.</p>
</a>
<a href="https://chef.rooks.dev" target="_blank" rel="noopener noreferrer" class="service-tile-item">
<div>
<div class="service-item-title">CyberChef</div>
<div class="service-item-tag">chef.rooks.dev:443</div>
</div>
<p class="service-item-desc">Hex decoding, cryptography &amp; forensics.</p>
</a>
<a href="https://pdf.rooks.dev" target="_blank" rel="noopener noreferrer" class="service-tile-item">
<div>
<div class="service-item-title">Stirling PDF</div>
<div class="service-item-tag">pdf.rooks.dev:443</div>
</div>
<p class="service-item-desc">Private document OCR and manipulation.</p>
</a>
<a href="https://status.rooks.dev" target="_blank" rel="noopener noreferrer" class="service-tile-item">
<div>
<div class="service-item-title">Uptime Kuma</div>
<div class="service-item-tag">status.rooks.dev:443</div>
</div>
<p class="service-item-desc">High-frequency ping &amp; latency monitors.</p>
</a>
</div>
</section>
<!-- Infrastructure Telemetry Tile -->
<section class="tile" aria-label="Infrastructure Nodes Telemetry">
<header class="tile-header">
<div class="tile-title">
<span class="status-indicator"></span>
// CLUSTER TELEMETRY
</div>
<span class="tile-meta">3 NODES ONLINE</span>
</header>
<div style="display: flex; flex-direction: column; gap: 8px;">
<div class="node-stat-row">
<span class="node-name">RACK-01 (Proxmox Primary)</span>
<span class="node-load">ONLINE &bull; LOAD: 0.24</span>
</div>
<div class="node-stat-row">
<span class="node-name">NODE-02 (Storage TrueNAS)</span>
<span class="node-load">ONLINE &bull; POOL: 98% HEALTH</span>
</div>
<div class="node-stat-row">
<span class="node-name">OPN-01 (Routing Gateway)</span>
<span class="node-load">ONLINE &bull; WIREGUARD ACTIVE</span>
</div>
</div>
</section>
</div>
</div>
+122 -24
View File
@@ -1,39 +1,137 @@
---
layout: layouts/base.njk
title: "River Rooks | Engineering Notes & Systems Architecture"
title: "River Rooks | Homelab Gateway"
---
<!-- 1. Lander Hero Tile with Dynamic Filter Tag Buttons -->
{% include "partials/hero-tile.njk" %}
<!-- Main Hero Landing Tile -->
<section class="hero-tile" aria-label="Gateway Declaration">
<div class="hero-pretitle">SYSTEM DECLARATION &bull; RACK-01 NODE GATEWAY</div>
<h1 class="hero-main-title">Engineering Sovereign Infrastructure &amp; Technical Notes</h1>
<!-- 2. Asymmetric Split Grid: Featured Lead Post (Left) & Telemetry Sidebar (Right) -->
<div class="hero-landing-text">
<p>
My work centers on network forensics, self-hosted system architecture, low-level firmware exploitation, and zero-allocation Unix utilities.
</p>
<p>
This gateway functions as the frontend for my physical homelab cluster. Rather than hosting projects on opaque third-party clouds, everything here runs on bare metal in my personal server rack—orchestrated through Proxmox VE, partitioned across isolated VLANs via OPNsense, and protected by point-to-point WireGuard cryptographic meshes.
</p>
</div>
<div class="hero-directive-box">
<strong>PRIMARY DESTINATIONS:</strong>
<a href="/dispatches/" style="color: var(--accent-cyan); text-decoration: none; margin-left: 8px;">[1] Technical Blog ({{ collections.posts.length }} Articles)</a> &bull;
<a href="https://git.rooks.dev" target="_blank" rel="noopener noreferrer" style="color: inherit; text-decoration: none;">[2] Forgejo Git Repos</a> &bull;
<span>[3] Public Tools</span> &bull;
<span>[4] Cluster Telemetry</span>
</div>
</section>
<!-- Split Tiling Columns -->
<div class="split-grid">
<div class="split-lead-col">
{% include "partials/featured-card.njk" %}
</div>
<div class="split-sidebar-col">
{% include "partials/stats-sidebar.njk" %}
</div>
</div>
<!-- 3. Full-Width Chronological Dispatches Feed Tile -->
<section class="tile" aria-label="Dispatches Feed Catalog">
<!-- Left Column: Featured Service (Blog) + Dynamic Recent Articles -->
<div style="display: flex; flex-direction: column; gap: var(--tile-gap);">
<section class="tile" aria-label="Featured Service: Technical Blog">
<header class="tile-header">
<div class="tile-title">
<span class="status-indicator"></span>
RECENT DISPATCHES
// PRIMARY SERVICE: THE TECHNICAL BLOG
</div>
<span class="tile-meta">ORDER: CHRONOLOGICAL DESC &bull; TOTAL: {{ collections.posts.length }}</span>
<span class="tile-meta">~/notes/ &bull; {{ collections.posts.length }} ARTICLES</span>
</header>
<div class="feed-list">
{% for post in collections.posts %}
{% include "partials/post-card.njk" %}
{% else %}
<p style="color: var(--text-muted); font-family: var(--font-mono); font-size: 0.85rem; padding: 16px;">
No published dispatches found in repository.
<div class="blog-service-feature">
<div class="blog-feature-top">
<span class="badge-core">[CORE PUBLICATION SERVICE]</span>
<span style="color: var(--text-muted);">{{ collections.posts[0].date | postDate }} LAST SYNC</span>
</div>
<a href="/dispatches/" class="blog-feature-title">&gt; River Rooks Technical Notes &amp; Research</a>
<p class="blog-feature-desc">
In-depth security post-mortems, CTF write-ups, shell portability benchmarks, and bare-metal homelab architecture guides.
</p>
<div class="blog-sublinks">
{% for post in collections.posts | limit(4) %}
<a href="{{ post.url }}" class="blog-sublink-item">
<span>{{ loop.index }}. {{ post.data.title }}</span>
<span style="color: var(--accent-cyan);">[{{ post.templateContent | readingTime(post.data.readingTime) }}] &rarr;</span>
</a>
{% endfor %}
</div>
</section>
</div>
</section>
</div>
<!-- Right Column: Homelab Hosted Services & Node Telemetry -->
<div style="display: flex; flex-direction: column; gap: var(--tile-gap);">
<section class="tile" aria-label="Homelab Services Directory">
<header class="tile-header">
<div class="tile-title">
<span class="status-indicator"></span>
// HOMELAB SERVICES ROUTER
</div>
<span class="tile-meta">4 PUBLIC TOOLS</span>
</header>
<div class="services-mini-grid">
<a href="https://git.rooks.dev" target="_blank" rel="noopener noreferrer" class="service-tile-item">
<div>
<div class="service-item-title">Forgejo Git</div>
<div class="service-item-tag">git.rooks.dev:2222</div>
</div>
<p class="service-item-desc">Self-hosted code repositories &amp; dotfiles.</p>
</a>
<a href="https://chef.rooks.dev" target="_blank" rel="noopener noreferrer" class="service-tile-item">
<div>
<div class="service-item-title">CyberChef</div>
<div class="service-item-tag">chef.rooks.dev:443</div>
</div>
<p class="service-item-desc">Hex decoding, cryptography &amp; forensics.</p>
</a>
<a href="https://pdf.rooks.dev" target="_blank" rel="noopener noreferrer" class="service-tile-item">
<div>
<div class="service-item-title">Stirling PDF</div>
<div class="service-item-tag">pdf.rooks.dev:443</div>
</div>
<p class="service-item-desc">Private document OCR and manipulation.</p>
</a>
<a href="https://status.rooks.dev" target="_blank" rel="noopener noreferrer" class="service-tile-item">
<div>
<div class="service-item-title">Uptime Kuma</div>
<div class="service-item-tag">status.rooks.dev:443</div>
</div>
<p class="service-item-desc">High-frequency ping &amp; latency monitors.</p>
</a>
</div>
</section>
<!-- Infrastructure Telemetry Tile -->
<section class="tile" aria-label="Infrastructure Nodes Telemetry">
<header class="tile-header">
<div class="tile-title">
<span class="status-indicator"></span>
// CLUSTER TELEMETRY
</div>
<span class="tile-meta">3 NODES ONLINE</span>
</header>
<div style="display: flex; flex-direction: column; gap: 8px;">
<div class="node-stat-row">
<span class="node-name">RACK-01 (Proxmox Primary)</span>
<span class="node-load">ONLINE &bull; LOAD: 0.24</span>
</div>
<div class="node-stat-row">
<span class="node-name">NODE-02 (Storage TrueNAS)</span>
<span class="node-load">ONLINE &bull; POOL: 98% HEALTH</span>
</div>
<div class="node-stat-row">
<span class="node-name">OPN-01 (Routing Gateway)</span>
<span class="node-load">ONLINE &bull; WIREGUARD ACTIVE</span>
</div>
</div>
</section>
</div>
</div>