Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35698bfac5 |
@@ -1,131 +1,269 @@
|
|||||||
# Hi, I'm Chase (Ced) Dumphord
|
<h1>Hi, I'm Chase! <br/>
|
||||||
### DevOps Engineer | Platform & Cloud Infrastructure Engineer | Industrial Systems
|
Digital Systems | Infrastructure | RF Edge Systems
|
||||||
|
</h1>
|
||||||
|
|
||||||
> **Live Portfolio:** https://chasedumphord.com
|
<h3>
|
||||||
> **Live NOC Dashboard:** https://noc.chasedumphord.com
|
I build real-world systems that combine data, automation, and infrastructure.
|
||||||
|
From dashboards and full-stack apps to homelab environments, everything I create is designed to solve practical problems and scale.
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<img align="right" alt="Coding Gorilla" width="400px" style="padding-right:10px;" src="https://gifdb.com/images/thumbnail/monkey-laptop-coding-miys12p5izw3s11s.gif" />
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>🚀 Currently building data dashboards & system monitoring tools</li>
|
||||||
|
<li>🖥️ Running a full homelab (Proxmox, Kubernetes, Docker)</li>
|
||||||
|
<li>⚙️ Focused on automation, infrastructure, and real-world systems</li>
|
||||||
|
<li>🧠 Ask me about Raspberry Pi clusters, K3s, or system design</li>
|
||||||
|
<li>📫 Reach me: Chasedumphord@gmail.com</li>
|
||||||
|
<li>⚡ Fun fact: I have ball pythons 🐍 along with dogs</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## About
|
# 🧠 Ced’s Portfolio System
|
||||||
|
|
||||||
DevOps and Cloud Infrastructure Engineer with 10+ years of experience across industrial automation, manufacturing data systems, field service engineering, and infrastructure operations. Currently part of GE Aerospace's Digital Team building data pipelines, dashboards, and digital inspection systems using MTConnect and OPS Vision. Hands-on infrastructure engineer running an 18-node production environment consisting of a 6-node Proxmox VE cluster and a 12-node K3s Kubernetes cluster with TrueNAS, full observability stack, and VLAN-segmented networking. Built from the ground up and running in production every day. The infrastructure on this page is live. Not a demo.
|
👉 **Live Site:** https://chasedumphord.com
|
||||||
|
|
||||||
|
This repository represents a **live system portfolio**, not just static projects.
|
||||||
|
|
||||||
|
It showcases:
|
||||||
|
|
||||||
|
* 📊 **Ced’s NOC Dashboard** (live system monitoring)
|
||||||
|
* 🧠 **HomeLab Infrastructure** (Proxmox, VLANs, services)
|
||||||
|
* ☸️ **K3s Cluster** (distributed compute)
|
||||||
|
* 📡 **APRS iGate (RF Edge System)**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Live Sites
|
# 📊 Ced’s NOC Dashboard
|
||||||
|
|
||||||
| Site | URL | Description |
|
A central visibility layer for all systems.
|
||||||
|------|-----|-------------|
|
|
||||||
| Portfolio | https://chasedumphord.com | Personal portfolio, projects, stack, resume |
|
<b>Live:</b> <a href="https://noc.chasedumphord.com">noc.chasedumphord.com</a>
|
||||||
| NOC Dashboard | https://noc.chasedumphord.com | Live infrastructure visibility — 28 systems |
|
|
||||||
|
### 🔍 What it shows:
|
||||||
|
|
||||||
|
* Infrastructure health
|
||||||
|
* Service availability
|
||||||
|
* Network segmentation
|
||||||
|
* RF edge system status
|
||||||
|
|
||||||
|
### 🧠 Why it matters:
|
||||||
|
|
||||||
|
This demonstrates:
|
||||||
|
|
||||||
|
* System monitoring mindset
|
||||||
|
* Operational visibility
|
||||||
|
* Real-world infrastructure awareness
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Ced's NOC — Live Infrastructure Observability
|
## 🖼️ Live Dashboard Preview
|
||||||
|
|
||||||
Real time network operations center dashboard monitoring 28 homelab systems across 6 infrastructure layers.
|
### 📊 Metrics Overview
|
||||||
|
|
||||||
### How It Works
|

|
||||||
|
|
||||||
|
### 🖥️ Systems Overview
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔴 Live System Status
|
||||||
|
|
||||||
|
🔴 **Live NOC Dashboard:** [noc.chasedumphord.com](https://noc.chasedumphord.com)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🧠 Featured System — Ced’s NOC (Network Operations Center)
|
||||||
|
|
||||||
|
A real-time monitoring and observability platform built on top of my homelab infrastructure.
|
||||||
|
|
||||||
|
### 🔍 What it demonstrates:
|
||||||
|
|
||||||
|
* Live system monitoring (services, nodes, edge systems)
|
||||||
|
* Infrastructure visibility across VLANs and clusters
|
||||||
|
* Custom dashboard UI (portfolio + operational view)
|
||||||
|
* Service health tracking (latency, uptime, status)
|
||||||
|
* Real data ingestion (not simulated)
|
||||||
|
|
||||||
|
### ⚙️ Stack:
|
||||||
|
|
||||||
|
* Python (health checks / data generation)
|
||||||
|
* JSON API (status feed)
|
||||||
|
* JavaScript (dynamic UI rendering)
|
||||||
|
* Future: Grafana + Prometheus integration
|
||||||
|
|
||||||
|
👉 This is the **core system** that ties everything together.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🧱 Foundation — Ced’s Home Lab (Infrastructure + Monitoring)
|
||||||
|
|
||||||
|
Real-world environment used to simulate production systems and host services.
|
||||||
|
|
||||||
|
* Proxmox virtualization platform
|
||||||
|
* K3s Kubernetes cluster (Raspberry Pi)
|
||||||
|
* TrueNAS storage system
|
||||||
|
* Nginx Proxy Manager (external access layer)
|
||||||
|
* VLAN segmentation (Main / IoT / HomeLab / Guest)
|
||||||
|
* Monitoring stack (Grafana, Prometheus, Uptime Kuma)
|
||||||
|
|
||||||
|
👉 The NOC dashboard is built directly on top of this environment.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 📡 Edge System — APRS iGate (RF → Internet Gateway)
|
||||||
|
|
||||||
|
A real-world RF system that feeds live data into infrastructure.
|
||||||
|
|
||||||
|
* Raspberry Pi + Direwolf APRS TNC
|
||||||
|
* Audio chain tuning (critical for decode accuracy)
|
||||||
|
* APRS-IS integration
|
||||||
|
* Real beacon ingestion from handheld radios
|
||||||
|
|
||||||
|
🔗 **Project:**
|
||||||
|
https://github.com/ced4568/ceds-aprs-igate
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔥 Key Insight
|
||||||
|
|
||||||
|
This system bridges:
|
||||||
|
|
||||||
```
|
```
|
||||||
Proxmox Biggie (Cron every 5min)
|
RF (radio signals) → Digital Infrastructure → Internet (APRS-IS)
|
||||||
→ noc_update.py pings 28 systems
|
|
||||||
→ writes data/noc-status.json
|
|
||||||
→ git push to ced-portfolio
|
|
||||||
→ GitHub Pages deploys (~30s)
|
|
||||||
→ Browser fetches every 30s
|
|
||||||
→ Live dashboard updates
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Systems Monitored
|
---
|
||||||
|
|
||||||
- **6-node Proxmox Cluster** — BigWorld, Biggie, Snoop, TooShort, Tupac, DrDre
|
## 🎯 Key Tuning Insight
|
||||||
- **12-node K3s Cluster** — 3 control plane (django-1/2/3) + 9 workers (ingress, data, monitoring groups)
|
|
||||||
- **TrueNAS** — Network attached storage
|
|
||||||
- **Nginx Proxy Manager** — Reverse proxy layer
|
|
||||||
- **Prometheus + Grafana + Uptime Kuma** — Full observability stack with Prometheus actively scraping
|
|
||||||
- **Portainer** — Container management and deployment UI
|
|
||||||
- **Dashy + Home Assistant + PrimeStation** — Services layer
|
|
||||||
- **Hermes Agent** — AI-assisted ops automation agent
|
|
||||||
- **Hetzner VPS** — Cloud-hosted production node
|
|
||||||
- **Tailscale** — Zero-config VPN mesh networking
|
|
||||||
- **Restdesk** — Self-hosted helpdesk and ticketing
|
|
||||||
- **PaperClip Agents** — Document automation and processing agents
|
|
||||||
- **APRS iGate x2** — RF edge systems (home + mobile)
|
|
||||||
|
|
||||||
### Automation
|
* Target audio level: **~50–60**
|
||||||
|
* Too high → clipping / decode failure
|
||||||
|
* Too low → missed packets
|
||||||
|
|
||||||
- Script: `~/scripts/noc_update.py` running on Biggie
|
This was tuned using:
|
||||||
- Cron: `*/5 * * * *` — every 5 minutes
|
|
||||||
- Log: `/var/log/noc_update.log`
|
* Direwolf audio level output
|
||||||
- Auth: GitHub Personal Access Token via baked remote URL
|
* Real beacon testing from handheld radios
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Infrastructure Overview
|
# 🧠 Featured Projects
|
||||||
|
|
||||||
| Layer | Systems | Count |
|
<ul>
|
||||||
|-------|---------|-------|
|
<li>
|
||||||
| Compute | Proxmox VE cluster | 6 nodes |
|
<b>🧠 Ced’s NOC Dashboard</b><br/>
|
||||||
| Orchestration | K3s Kubernetes | 12 nodes |
|
Real-time monitoring system providing visibility into infrastructure, services, and edge systems.<br/>
|
||||||
| Total Nodes | Combined infrastructure | 18 nodes |
|
<b>Highlights:</b> Live status tracking, latency monitoring, alert panel, dynamic UI updates.<br/>
|
||||||
| Storage | TrueNAS | 1 |
|
<b>Live:</b> <a href="https://noc.chasedumphord.com">noc.chasedumphord.com</a><br/>
|
||||||
| Networking | Nginx Proxy Manager, Cloudflare Tunnels, UniFi VLANs | 4 VLANs |
|
<b>Source:</b> <a href="https://github.com/ced4568/ceds-homelab">ceds-homelab</a>
|
||||||
| Monitoring | Prometheus, Grafana, Uptime Kuma, Custom NOC | 4 services |
|
</li>
|
||||||
| Edge | APRS iGate (home + mobile), Direwolf TNC | 2 nodes |
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<b>🧱 Ced’s Home Lab</b><br/>
|
||||||
|
Full infrastructure environment simulating production systems using virtualization and Kubernetes.<br/>
|
||||||
|
<b>Highlights:</b> Proxmox VE, K3s cluster (12-node Pi cluster), VLAN segmentation, reverse proxy, monitoring stack.<br/>
|
||||||
|
<b>Source:</b> <a href="https://github.com/ced4568/ceds-homelab">ceds-homelab</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<b>📡 APRS iGate (RF Edge System)</b><br/>
|
||||||
|
RF-to-internet gateway ingesting real-world radio data into digital systems.<br/>
|
||||||
|
<b>Highlights:</b> Audio tuning, Direwolf APRS TNC, APRS-IS integration, live beacon ingestion.<br/>
|
||||||
|
<b>Source:</b> <a href="https://github.com/ced4568/ceds-aprs-igate">ceds-aprs-igate</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Featured Projects
|
# 🧰 Tech Stack
|
||||||
|
|
||||||
### Ced's NOC Dashboard
|
### ⚡ Core Technologies
|
||||||
|
|
||||||
Real time monitoring system with live system health, latency tracking, severity based alerts, and layer filtering.
|
<img align="left" alt="TypeScript" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-plain.svg" />
|
||||||
|
<img align="left" alt="Git" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/git/git-original.svg" />
|
||||||
|
<img align="left" alt="Linux" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/linux/linux-original.svg" />
|
||||||
|
<img align="left" alt="HTML" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/html5/html5-plain.svg" />
|
||||||
|
<img align="left" alt="JavaScript" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-plain.svg" />
|
||||||
|
<img align="left" alt="React" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original.svg" />
|
||||||
|
<img align="left" alt="NodeJS" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nodejs/nodejs-original.svg" />
|
||||||
|
<img align="left" alt="Python" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-plain.svg" />
|
||||||
|
<img align="left" alt="Docker" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/docker/docker-original.svg" />
|
||||||
|
<img align="left" alt="Kubernetes" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/kubernetes/kubernetes-plain.svg" />
|
||||||
|
<img align="left" alt="Grafana" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/grafana/grafana-original.svg" />
|
||||||
|
<img align="left" alt="Prometheus" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/prometheus/prometheus-original.svg" />
|
||||||
|
<img align="left" alt="Bash" width="30px" style="padding-right:10px;" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/bash/bash-original.svg" />
|
||||||
|
|
||||||
- **Live:** https://noc.chasedumphord.com
|
<br /><br />
|
||||||
- **Source:** https://github.com/ced4568/ceds-noc
|
|
||||||
|
|
||||||
### Ced's HomeLab
|
|
||||||
|
|
||||||
Full enterprise style homelab with Proxmox clustering, K3s orchestration, VLAN segmentation, and full observability stack including Prometheus scraping.
|
|
||||||
|
|
||||||
- **Source:** https://github.com/ced4568/ceds-homelab
|
|
||||||
|
|
||||||
### APRS iGate (RF Edge System)
|
|
||||||
|
|
||||||
Dual node RF to internet gateway. Raspberry Pi + Direwolf TNC. Live on aprs.fi.
|
|
||||||
|
|
||||||
- **Source:** https://github.com/ced4568/ceds-aprs-igate
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Tech Stack
|
### 🖥️ Infrastructure & Systems
|
||||||
|
|
||||||
**Infrastructure:** Proxmox VE • K3s • Docker • TrueNAS • Helm • Terraform • Nginx Proxy Manager • Cloudflare Tunnels
|
* Proxmox VE (Virtualization)
|
||||||
|
* K3s Kubernetes (Raspberry Pi Cluster)
|
||||||
|
* Docker / Containerized Services
|
||||||
|
* TrueNAS (Storage)
|
||||||
|
|
||||||
**Monitoring:** Prometheus • Grafana • Uptime Kuma • Custom NOC Dashboard
|
### 📊 Monitoring & Observability
|
||||||
|
|
||||||
**Networking:** UniFi • VLAN Segmentation • Tailscale • Cloudflare DNS
|
* Grafana (Dashboards)
|
||||||
|
* Prometheus (Metrics - in progress)
|
||||||
|
* Uptime Kuma (Service Monitoring)
|
||||||
|
* Custom NOC Dashboard (Python + JSON + JS)
|
||||||
|
|
||||||
**GitOps & CI/CD:** GitHub Actions • Docker Compose • Manifest-driven Config
|
### 🌐 Networking & Access
|
||||||
|
|
||||||
**Edge / RF:** Direwolf • APRS-IS • Raspberry Pi • RTL-SDR
|
* Nginx Proxy Manager (Reverse Proxy)
|
||||||
|
* Cloudflare Tunnels (Secure External Access)
|
||||||
|
* VLAN Segmentation (UniFi Network)
|
||||||
|
|
||||||
**Development:** Python • Bash • JavaScript • HTML/CSS • Git
|
### 📡 Edge & RF Systems
|
||||||
|
|
||||||
**AI & Automation:** n8n • OpenRouter • Telegram Bots • ChatGPT • Claude (Anthropic) •Crew AI Agent • Gemini • Hermes Agent • LLM-assisted Documentation • AI-driven Diagnostics
|
* Direwolf (APRS TNC)
|
||||||
|
* APRS-IS Integration
|
||||||
|
* Raspberry Pi iGate Systems
|
||||||
|
* Audio Signal Processing / Tuning
|
||||||
|
|
||||||
|
### 💻 Development
|
||||||
|
|
||||||
|
* Python (Automation / Data Collection)
|
||||||
|
* JavaScript (Frontend Dashboard UI)
|
||||||
|
* HTML / CSS (UI Design)
|
||||||
|
* Bash (System Automation)
|
||||||
|
* Git / GitHub (Version Control)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Connect
|
# 📈 Roadmap
|
||||||
|
|
||||||
[](https://www.linkedin.com/in/chase-dumphord/)
|
* [ ] Grafana + Prometheus integration
|
||||||
[](https://github.com/ced4568)
|
* [ ] Real-time metrics ingestion
|
||||||
[](https://chasedumphord.com)
|
* [ ] NOC alerting system
|
||||||
[](https://noc.chasedumphord.com)
|
* [ ] Mobile APRS iGate deployment
|
||||||
|
* [ ] Advanced system dashboards
|
||||||
📧 chasedumphord@gmail.com | Oxford, MS
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> Built from the ground up and running in production every day. The infrastructure on this page is live. Not a demo.
|
# 👤 Connect With Me
|
||||||
|
|
||||||
|
[LinkedIn](https://www.linkedin.com/in/toochase-dumphord/)
|
||||||
|
[GitHub](https://github.com/ced4568)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚡ Final Note
|
||||||
|
|
||||||
|
> This is not a static portfolio — it is a **live representation of working systems.**
|
||||||
|
|||||||
@@ -1,112 +0,0 @@
|
|||||||
%PDF-1.4
|
|
||||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
|
||||||
1 0 obj
|
|
||||||
<<
|
|
||||||
/F1 2 0 R /F2 3 0 R
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
2 0 obj
|
|
||||||
<<
|
|
||||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
3 0 obj
|
|
||||||
<<
|
|
||||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
4 0 obj
|
|
||||||
<<
|
|
||||||
/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 9 0 R /Resources <<
|
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
|
||||||
>> /Rotate 0 /Trans <<
|
|
||||||
|
|
||||||
>>
|
|
||||||
/Type /Page
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
5 0 obj
|
|
||||||
<<
|
|
||||||
/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 9 0 R /Resources <<
|
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
|
||||||
>> /Rotate 0 /Trans <<
|
|
||||||
|
|
||||||
>>
|
|
||||||
/Type /Page
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
6 0 obj
|
|
||||||
<<
|
|
||||||
/Contents 12 0 R /MediaBox [ 0 0 612 792 ] /Parent 9 0 R /Resources <<
|
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
|
||||||
>> /Rotate 0 /Trans <<
|
|
||||||
|
|
||||||
>>
|
|
||||||
/Type /Page
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
7 0 obj
|
|
||||||
<<
|
|
||||||
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
8 0 obj
|
|
||||||
<<
|
|
||||||
/Author (anonymous) /CreationDate (D:20260602024727+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20260602024727+00'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
|
||||||
/Subject (unspecified) /Title (untitled) /Trapped /False
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
9 0 obj
|
|
||||||
<<
|
|
||||||
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
10 0 obj
|
|
||||||
<<
|
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2779
|
|
||||||
>>
|
|
||||||
stream
|
|
||||||
GauHM>BALh(4OT53)@/S)3E5\fV^%JM4OEBJRiMro$U&<oN:BZ[3Wddm>p/.>KtF/:?#+9<#L=We).]ak7XD5pugDhBgMB'8geP*ncP?+acF)jVO)B_IHC9U+"'GH_QY-#0mRaY$mVD:ig%G`P<kfRI*(irUcH\LIg$^#+'XR&"gO1,p7+6mlFX+WK_e!,V?OXS03Q9YZmj.odb/OqrJRPfgZq6(6f)5'o7mWYK+J#@no7aWZT%Z1QQ3`Wn(Bctq>F#jd@"5Fagn;KdV[:p\^CZ[K>tH:1:iQgc)Or+C#)%DSYHuVC[aTnS0k;:k!cZc14b8d!!`m#6\DWc`Vp@eJV2VHJqFUJBP&A68^IqEW#Gl5O%XC4J1g07eHBegA"q1Mkhh;MM;1a(JLA!iG<?Pe]KHkt`1H=uO5drAeB;H9+/_5ZJG$00o5%JOh\b+'dsJtu07qYW05S>UD`&FS<[VT5IW@c=:KLVmO8mmqm0*3H[7K9d%Z?,E/)jU13Njp+Up5;G'MP_(J4;79Or(JP?\]#>54cj@Aa$P<mX)Y20F/Jc/om?'^(Vl$@;'o]%pEtM.oLHJ%jfhZbENZ5[Ak\hgIPdJXU8)r\IK?J2KNKk$+Z^feSO,T]<I7]!39i:YsWTKo8G0%mfi.<%LqK@/7u/J<WS>r[.7ncB[(+ZYGc!C2Ls\Ud>.m<a\r,aMG=>,#>h=g'f9\oN]:6*NND;IA-P5_U>uSS%Y,FtQ8?L%<jd`=-WS6fjJfs^:)RdrU]8kdXJEcZHi3#L6D&r<!ftXs6.Npjp9f2Z;EPdu88G8fDPT*j0M28:.ojTge1,6;(gPo*X^hI-[,,>X["f3L%u#>&cY&L)n/t+:C^e82*r$:IoV%[m/U>UAVZHI#$YV-1hD3Uj^E-,-asPG+c&==/9]VpS;,sspY-m$IbL(IAiX5jLB7u2W.X_P=4Sm.W>%I.s8F'O@bFMJQ&84Bo%4Z)@c%^!c^r>HI!buEUFV44N,PHR>\gV-d"6o48ADci';'0U67-VMQ+MgjG5/%+rdT;YBF!2#-'YD,Ag:tcjZ--.b3RcCN_bW&uaJ(7T$AP)+M*.t<(T'<#8sQH2fQ6:1n4iu?#p&L0LFZC^N#WO7_eWLYO0p_'jh$[24A\uS6*uc[NCj!;)F=5][gnt/oT&5ISb'[email protected]\m"3cg3c^Hs$:LO=J^K4Sr76ep'9,gP.(2=Th?PuLX%f952Y@dV<W>Dnm[KHk;gV]iq^7!<0bQHa-XhIeCD:A:ola;QT<EL)Z;[IkK_(u;/G$]O/L?B&pEJJFG4q=WHfI%YFb@^Da_cYooH1^'O"Hp]-R%nopd-aZJbD=2t5-Tc/q^*%XfgB;1MT7!cM1Y8-ssU;c6LI)nM[-S+3qu**L[^D9B"?/GgVCSWloJ]G2I1i0<b(/5YrA6)>+#YcR$qC+i7Q:,V'Q!Q*Id*gprIe&)MAHbJUlc=&?7=#q[tNc.]GDNARtcul?)C^bJ,D&[email protected]/EtM#\?\K2X*SK+,!!HBGG79>Ai-gd\QVoJNE&iUlH$4Np05`!:=J]@/@[YWT>!k*Xe\,PGi,'[`Z%3?k%`F))@3NlY.drF%2<K#lY`RsD,GYFS;Th2*uk"mb.=%V*Go,YW0=OOfK)+])I.PJ#'Z'tSBL=>c*EiaPUD&MDd/%CY:`Qsj3d)sZ)ne)5Fd,Z/(6+8*St5S2Gj/A$JKU<L5lsN],d<g__>3=!BaG[n_&goji"7<]++K.m%-pL/P9.5I!Tp\17h0US/bZ:^U;eZ_WC0C1iPct@c!>Sg>W4_]"G]@15oqUY\&J=,\jDOiK\P%mgV?WT(@Xo'8<HeT5>U$@I./fo@FRXa1uiYBH;"UhRl&l:FAB_4U,o\Q+Z5&1cCb1otQRts1bEcE"hi1B:.FI?0n:=6HB(==P^%4FF(075%i0cQ,19%%=A&u`J3F@pB^TlCCrXY&&#f1q)aE]#hoPSWmpoX>sVhFFFrDQ2U#rj*j=K^S,G_b))su"s2b9hpOUA'B1[IA)[sV$:JmulhR1Uc)om++CeDsFVG.B3(M7]bgj$akQa=Gg[FuWi%;l7:a$[J0&qg0*LM>[email protected]\q62Zn/m"l0<[j"Z27)Up+>l.Jd<<#&[6b/1PBI5nfn-D1pUKqiLS5N$/c:'<F1n`/G,$bSQ<gLGB<00@0]R.i>"<\gW#Me_Ae22#A*RW`fliHfMVQ)%da1imo==#6dQ$C<KfSq(H2W<_q&Aq"0n](&+`CqYbY/k\,LN#bRDigX;8okOgF=(c443i3an$7Er3UIU!Maejb]8j*F-`\8M)N8%a(dZ*:)QR/+Q/V)'Xo$D/pKG3=W0Hk&p>G;M&/5m\]?RM&/&-/\%@:;EojgMbmtJ+Qi53((0r,B\o_NsYgd9]nV@H(+47u%Ol#fOj3sSA6r*H"fWD!ck81\D*b^#\d+I(_m*,1&l<ac3Am;FkYfrHcDoCX2V=P+TOB=%:fOZ7l.a]7b21[CDLSdefdO-@^5T:3HTo6BYIB*+0hk",qdGE"tj-`H+8JPcKX]8,h'aYS1=er:X>1Te8(1E\GIaNc.#L#<oHc^^t+'Jba[[.5SAcm0gE,P?URCBYU4YTSp7t(?g$hk$eUK6k5+PC%8>?r(2gZic`dj3o'0S_T[W2P[AK\bo%`\eXZ+5h#-*sXCtfi-dGKrit];1*<CIaT?YDc:A<:7%^;/YT9!f/:*XeP)r(\+6-GgnGiGd;JRfUm:JKbhs.>a,il>1Cq1q*ro0%Zi~>endstream
|
|
||||||
endobj
|
|
||||||
11 0 obj
|
|
||||||
<<
|
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2872
|
|
||||||
>>
|
|
||||||
stream
|
|
||||||
Gatm<?'j9R(4FN43)<iI?/T,N&*VbY1.bT=FCkuXm6b35/O5<#Hn?4&J,S2dKl*3N[qSB6_MeN[S:/]9HV6P^nCP/LVd#lS$[Vcs-U49CMYtg/BlQpmMcZJl7\f4$]HBb^a<tnBs%p-&]=7-A!DU84?-`3BfWBpQI(+54;\EQS/cBqcpbXAgSnUskK@5-?6[F&KGM2ifi$V_+8W3U*+cZD6D"bd7UQE-e^Mg`10_%W];:=ioC9cgtF^dRm-S]m<&;='R-;>E!n9paM(6,:P$(j^0LQm`fG3--YRsO=qEr.oZ=boMkWuA:L;F@]Y<[Z;p4_eT`WC:[b`KTK^-J6qBfR6!]8O@?2Q4F@kE<%oHE[V:>X+G+BqsN-gC*e`p4Y]qhGuYmK;%P65H7LJZQhcLip5<9r8X@"u>0)<W#(0:L.].;fVn0#jR<@,+T4biJcJfa2?=G-(g&i"W4VAslbNb!(:gN4Xpd.&KM3[!:jerC*Jdb9.8mE1,GWI`7Hj&\./TM;6No<gRQ,j+^;Z8J#OBYKSCe;C"iB'>:?7XaPV8tZ6UfO>AZsk5GLtj3;hHOI6XNC'OnR;3,ratrae!o<cLHdBm'MgCh%NtbYA;(*=[#u.)&M2L65kWMqr$2ac[-9F:,J6c\r(6,:4Z\u(Y6m'VEBNe=[&'`"3N)]QR1qHNM&4h\IrRO0cn&_EIJoW&rcl)&RbdpgHZtpM=iCng2.H$.@[M:i^od31aV@mWl*7k(8CuGNT@NoJHkVPR(WfmqHRKX-J2tF?,+=6u'\sL>;/fj4BB`oKh_j4HGeSJ`NP2S]p3V,hUEBW#4egVSTtb_9&54nih,<_1k_</:Pq;$6a:$;%cW:9c2)Y&e<V8gUa.0o9&S=]KqU61:<LW!+o]C6WatPg@_D$ibKoDA/4IG"]VV*Z(0[g1S#Gl-Nejd>a7D3/b9[)\3<i>nNK3q5JEY&?Y:M@#pf?Gf`REe'(2J@b9/5>GfV$G/YK;m-,,dmtW;d%3NP\12!D^nnn2eB,)De,akEeTKZA>^iEG^Tq.R">rFF9j,S>P&;Ps1#S(7=jraXms?DcSAOQiENr/Qp`/4D,@>o`5'/YR[[;6pjQ5b/_u$9na27Y'SWfMLqrY_j:)1g^U5Ia0S]R<+.KA`KU0'2Y1s-=7:m5>03pHs^>P:1LpDkIbL2AqC_B31BmD_5ES*aF0st.V<^ARpiFFdK;2gg33iQe;SfqhGj4T8G[_XBhWJ[%JZJ]LIF62KViGhW-#t&e:>)Sqs`#Z*&BBM^h57>^X[2@tpAI_;4S3*e^*>84qe>=a]dST0o^K@OAmKZJ\'QVA>I-S9[L=;?@^8Wuu0cb(bhI;5%94a^,^-ZWbFF^-#.ZPnd-CYnq#)IE5.4%kiaNO.8rGpXhDFQ*i6#FYEXtHFc::f<MG;,m]Ut5ep$2[!3>18.8Z5RUQ!0+-\Nf$)aMB3Nk\(RKiEgo7f^VHJZ$r^]7qNO?mYnNBRlq.I1`Qib8+'BSj-rb_[\`P?/2MMf%%0"JjM:p1u'=h)Tg)WD5Y"HH6)m*f'8*cAY<du9IS)<CNG8jXHIXA`p-ebLk=n,q(PW&6"25JK^5*"8*Xe%D2QQ4oC:9YYTU`H8SJ;kp.@&LNDKQgr4o<9#@TQ6\W0q:kuXPjCP7`Kl=P%D)7BeJ`<b\2J._Z.F@KY^O5hoWGp=lFU;VoJ_J%8XG<$r?e,L*mr]0qTNp]ohSnbH>Rb`ma,S'[U=T=o'\/"!'N#TlKqk_9Hf;i*M[4PD%BlH?>A6m=NQ*>pJh@f72q\B57@X8PMP7EEq*SZcj>qk]LO12;D0,js[$>K:(_7F_.m8:+kaGK-2#%r1H'dr\@OH9>.^q<u@D@-S]+Rlkp1B1*_g\;H`3UjuB<E!]l+RT\hG_L.hj?K[uS*ZgPdE+30qdQ:AOmoNl4$$]\!5md)hkm[Jiu#GcTJENg%B!T)%N3C)K^,RG['kJq'8:3To2XNTu&6JsDjY[\]k'h5d<bduhSI*m?`qpY7fN[gQ+"#Mc@8[ptc/jK:)Zc1&=-@DO[2^#fr;ZHmG)(*"dI*d/Qf&$t9QkUPV%A'J]W3#a!XH1K(lG><^.!f`[AI/6uT"[L^6GqRIo>oWQ:'Zl%Le)92,?8XZ_3UBb]?D<g?9H?`oR1rFdPPFb?^D?EFWGm`gD6hO)4Zq.%se;s=73;#Ed#0:9kAGFfsMHigle]MI+*5G0s=(>h-H#2+cIAI(Q,fDOfUAk[M%o;D(IJO"M(a5n`<2aJu#`)IFHOs%/=>S'W36\*/>AHTm,)+]BO!`*POioRg[)`\i65Qp3q0jkmjHP;5NX@cl?XkUn(gZB^bbWk;8[Q^/\pC;<!9VSo,3T[uVi[S]/>Tm[u^-p+5Z:^>]=cquO(7o$(`P2ZrUGa4]5CS6jYaD(nagnbK)`l<u@f]80XTkQ6iX5'lq8GQ'IRD-QJ-kUf:CH#9`D)YRt[mebOcZ0'Z_$jY?Qkr3'gpsn1A2D2n,7)`7$Y[odKgT_qk]MPeXR<,cuZF.cpRtG]9HZ3f(hRb"Ziu$tR2o?=8?s%HunsQ]s]Wt6;r0+J&_qkf-mmc94i%#(O-CPO4/#QNW0@]Pp^*]iAg?3$u3"=*(:3srNE$b>qp`^,==fkBZ=agA2%hM!;<],W4i[#7<6VXVmon2Dd)8:W,?]t?/M5l&I<!<7Y7+$.r$bQd'5lYasL\/ncJFg\!RJk(arTsno._3ts2i\-pD4PGCi15k?$tRec]+W-A.:Kpu(FO!`+0LPmHm6tI&4#("G^H[tdG>SGYqqg!Amh)J4'?<190(;=jk?(dfGZ!sWH"IDgZ*?M]h\XBN'oMfS]/u63"Dt"4C0<+q^!%/SfZ=MpRGi6?$c0.LHGS;~>endstream
|
|
||||||
endobj
|
|
||||||
12 0 obj
|
|
||||||
<<
|
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2492
|
|
||||||
>>
|
|
||||||
stream
|
|
||||||
Gatm<?$"a[&q&$/R&[40m;>K(8Wfb>kfDUDDsXgV<q[sq&.(ofP6;C!jX>79rYbbcd9>cIHf`0fU*sEr1YpNtJ:.8&m*E$]qDbA`^BPC*1ga,lGnJ;>k\C+B$_l:G:<3g\,`2]p7eVbilMnP/<sra-NU1\:(Q@,An4q>J*KMY+Y[9[\h*%*0d<iIIH)d,\79\1#[ar*il)J!FP&p:Pc2UN0?eRqBYZ!3ZbPU-Q4L2VlG`di\gEcDYT8&#+j4CFkN[P43G*Nrko/TUuFS5.d<@2#hRq8JR[):33j"$h@h[ZGG'F#b_s/TtYN+^)ON+BmBe)ggJC^F3G:,Q)lOn+qV9atLqRd,d.K&u!]-s%Zd@bHL$.6bauE%50KU$T(=8<ouSjr%7qaFGPoa!Q)Ghr_Rao-5osVgF`pBpm0-HI*^.a:`u<.J%Z+6ohIPC<d/9=NOUVi2--n_0iHM9Un]0VDA-l-Bj8*dufXO99:E@a_S.2&+S4d:<P!1LFq0.`D,-@-dAgqT[rId%k&*-<Q\M'+:dK6rTh=k,a2qPNaNBT93%6q!VoB1qlris)]MYV<Kl];+e#uRJmOB+alF9>0NsCbRPmhG[Lg!rgKoa+E[-ZhZgjHW)c-4Th/fugW^)*6/1Oe3[pdQ@4?kANMo7q;Q'$F."\cP>r(eR(?'R_of:5[Bbp)?D>"WY7)a5ZRj5\HZn^Gk(8IJg]RaMPnUhb8lH;15(2(?TP+^j;%8bEEqIR(rnO`0uCO:,bu20ZSBXF.?jF_gDV.sQ\_NC/KDULpN4MonI8F1Dpr4tFaq6"G2N28J7AB7#N2-J+dL8;/Jr`UdB_asBZ*Q-0>K@?$SL/7_[XL0HQ@D+PU5Bpj%F#J1o<(XN/)[ab$96/`6tHTXN/2,'6-`HLmLVHPF7nbNOMcR`>k1t]/'(:(*>C6bjPKAM2o+_ss492nPR`Bhe/H*r:S>i$VQlFK9:@A#@O9."U]Z"Teh-eT:`e!>Eq/9\mA8XKhR>BfJ8<<>Nf#QRB,Wm;+)38&q,e+QVF'bjn`">hq3bDPS^Whe(Gmi3_d>#<+WAG/GmTu0R5a2q2P4DRWs'kJjMguH1ebakZZMW5I(/IHAq$*,r+lJRh^g_<f.[-"B9%5'jf<Ujb.V^X9Y;<Xto?!k?LYe$)e5F=LJo%tQlETj(+kY02qYdX2V=e@?3?-FD*r-VOsa+:RRf4EO#H3]4_*_(I:Og/#sr=7Kb\a#u,a\i[jCC*hI9'J3B;\j&0[6T;rKKjH_R<4q\RIdW<`st-'=&7rTX__!0U/5]/*A:DkQ3cHn1)3NDRY4"<6S4)k/"2'-l+^&b4Umb;X/-mH^]m=qpg5/)J<)tMSH6+@S'1kXIkrn$o`ljY(F>V@5W]+tL#)I&Wj/.41o?b8`h3eK;;`2]Bu@F$<kFn9q=QXEXN<ob>s:&pj*2*m"Y?DKI.ru:G45<4._&g.XR4t0!8q$\J[-!o>?P=jjKLqXnc(#pg@dqHL<0_h;ij"3=]6:4BDE;Q(<Uk?]m/&$f-ZB$-.Rn(RDgWo\Y85AZ`G/Ws-fqP(5,.'<hk92)`0#O*>4u;@oDUCa5!D)Rf?A6c<Lm2h]#[&-ZAmrRl>McSot'(mBS0X>';J[AOY.:>3T7X_9Or@RpGE-&a3gP9c+("hH\U'XGbJJdaj,Q$N+RDe>4$6R9o%rIa-\iB#9KRj#oYOG*oDm1PQ+\(KK?pFiLtnAo@f/fI?M[:sPtdj-X,Zb[Fe:qD^TB8)=W'D'm$/DfALiP=-ERD]6fJJ0q%7oJtdWhb9>R=g0/pA4bWCQ;Q_gs+`Gpp:BRmRh'3c[o,#NhqifCF(L;VQMH(b)Nj>Q_gM"/+5dC:(K^K2>BVaogSVt<iKq@c2liC*"`S'klo+2'G\EZdS?@aBo?2Q'gp=o,nBgl&2seMFRn#YT`lLr9p$3#T%p^]@WSqd1+eS6g]dWclVglF5K=%(g&u9L#fjpDGZ9c@_<rMV;5r+I.J<FU`TO,<g1I;Ve^%989r2qmS#a5Q00\u.M<$#G"nrF5b!7-_IM[rCGGg:=M-!V9KantRYXtDrb0':c0s#d)H87itKmUL0UI$&Tf^B,\+e%DRr]TH;'p\G-dr;@7q[eW-#LI!refo;&<__KK3A^"[^1o3e1qbBg]e2*NUI)WqTMn549(X;tddj72qq5_[/4#+-Tgr=Ga5O3hc>s>\m4)9fuTHQcsr^ID/O$a1P@'U^HnJO\#VEI#Q&*"FR'S>l5*inu]W$.R!`#mfVTU&>JO]C.MB:oEXbnI&EL=ksET:,qU.CM)&>k6-F<?m(WU+/0.+;FUij,72BG%*N`E(TLYlOB)m1p5rWbW$&^A!rF#B,`7`DFgCKO+3eXp%KO5nJEYFOt_on@($H<Veg5t3mnZD5P@G9T(\;rBCF6C)%=bK?IF=cZU/E:T7:Yn8n8%@p35U02NHflW&__2MJ=_Ck$^4o)h0;8n&/E\#[F\iY<QE$N=^1"&G5C?1SG@X~>endstream
|
|
||||||
endobj
|
|
||||||
xref
|
|
||||||
0 13
|
|
||||||
0000000000 65535 f
|
|
||||||
0000000073 00000 n
|
|
||||||
0000000114 00000 n
|
|
||||||
0000000221 00000 n
|
|
||||||
0000000333 00000 n
|
|
||||||
0000000527 00000 n
|
|
||||||
0000000721 00000 n
|
|
||||||
0000000915 00000 n
|
|
||||||
0000000983 00000 n
|
|
||||||
0000001279 00000 n
|
|
||||||
0000001350 00000 n
|
|
||||||
0000004221 00000 n
|
|
||||||
0000007185 00000 n
|
|
||||||
trailer
|
|
||||||
<<
|
|
||||||
/ID
|
|
||||||
[<e07209f969febd6b4750ac978e60af12><e07209f969febd6b4750ac978e60af12>]
|
|
||||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
|
||||||
|
|
||||||
/Info 8 0 R
|
|
||||||
/Root 7 0 R
|
|
||||||
/Size 13
|
|
||||||
>>
|
|
||||||
startxref
|
|
||||||
9769
|
|
||||||
%%EOF
|
|
||||||
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 561 KiB |
@@ -1,321 +1,101 @@
|
|||||||
{
|
{
|
||||||
"nocName": "Ced's NOC",
|
"nocName": "Ced's NOC",
|
||||||
"status": "2 System(s) Degraded",
|
"status": "Operational",
|
||||||
"lastUpdated": "2026-10-16T01:50:01Z",
|
"lastUpdated": "2025-05-01T00:00:00Z",
|
||||||
"summary": {
|
"summary": {
|
||||||
"nodes": "12+ Pi",
|
"nodes": 12,
|
||||||
"services": "26/28",
|
"services": 10,
|
||||||
"vlans": 4,
|
"vlans": 4,
|
||||||
"edgeSystems": 0
|
"edgeSystems": 2
|
||||||
},
|
},
|
||||||
"systems": [
|
"systems": [
|
||||||
{
|
{
|
||||||
"name": "Proxmox \u2014 BigWorld",
|
"name": "Proxmox Primary",
|
||||||
"type": "Proxmox VE Hypervisor",
|
"type": "Virtualization Host",
|
||||||
"layer": "Infrastructure",
|
"layer": "Infrastructure",
|
||||||
"label": "Compute",
|
"label": "Compute",
|
||||||
"address": "10.10.30.250",
|
"address": "proxmox.local",
|
||||||
"status": "Online",
|
"status": "Online",
|
||||||
"severity": "Healthy",
|
"severity": "Healthy",
|
||||||
"latency": "0.2ms",
|
"latency": "2ms",
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
"lastCheck": "Manual"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Proxmox \u2014 Biggie",
|
|
||||||
"type": "Proxmox VE Hypervisor",
|
|
||||||
"layer": "Infrastructure",
|
|
||||||
"label": "Compute",
|
|
||||||
"address": "10.10.30.192",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.0ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Proxmox \u2014 Snoop",
|
|
||||||
"type": "Proxmox VE Hypervisor",
|
|
||||||
"layer": "Infrastructure",
|
|
||||||
"label": "Compute",
|
|
||||||
"address": "10.10.30.153",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Proxmox \u2014 TooShort",
|
|
||||||
"type": "Proxmox VE Hypervisor",
|
|
||||||
"layer": "Infrastructure",
|
|
||||||
"label": "Compute",
|
|
||||||
"address": "10.10.30.120",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.3ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Proxmox \u2014 Tupac",
|
|
||||||
"type": "Proxmox VE Hypervisor",
|
|
||||||
"layer": "Infrastructure",
|
|
||||||
"label": "Compute",
|
|
||||||
"address": "10.10.30.74",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.1ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Proxmox \u2014 DrDre",
|
|
||||||
"type": "Proxmox VE Hypervisor",
|
|
||||||
"layer": "Infrastructure",
|
|
||||||
"label": "Compute",
|
|
||||||
"address": "10.10.30.227",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Proxmox \u2014 soc-01",
|
|
||||||
"type": "Proxmox VE Hypervisor",
|
|
||||||
"layer": "Infrastructure",
|
|
||||||
"label": "Compute",
|
|
||||||
"address": "10.10.40.205",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.6ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Control \u2014 django-1",
|
|
||||||
"type": "K3s Control Plane",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.72",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Control \u2014 django-2",
|
|
||||||
"type": "K3s Control Plane",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.245",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.3ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Control \u2014 django-3",
|
|
||||||
"type": "K3s Control Plane",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.128",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Ingress \u2014 node-1",
|
|
||||||
"type": "K3s Worker / Ingress",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.219",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Ingress \u2014 node-2",
|
|
||||||
"type": "K3s Worker / Ingress",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.134",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Ingress \u2014 node-3",
|
|
||||||
"type": "K3s Worker / Ingress",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.222",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Data \u2014 node-4",
|
|
||||||
"type": "K3s Worker / Data",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.126",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Data \u2014 node-5",
|
|
||||||
"type": "K3s Worker / Data",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.239",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Data \u2014 node-6",
|
|
||||||
"type": "K3s Worker / Data",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.208",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Monitor \u2014 node-7",
|
|
||||||
"type": "K3s Worker / Monitoring",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.198",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Monitor \u2014 node-8",
|
|
||||||
"type": "K3s Worker / Monitoring",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.216",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "K3s Monitor \u2014 node-9",
|
|
||||||
"type": "K3s Worker / Monitoring",
|
|
||||||
"layer": "Orchestration",
|
|
||||||
"label": "K3s",
|
|
||||||
"address": "10.10.30.29",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "TrueNAS",
|
"name": "TrueNAS",
|
||||||
"type": "Network Attached Storage",
|
"type": "Network Storage",
|
||||||
"layer": "Infrastructure",
|
"layer": "Infrastructure",
|
||||||
"label": "Storage",
|
"label": "Storage",
|
||||||
"address": "10.10.30.143",
|
"address": "truenas.local",
|
||||||
"status": "Online",
|
"status": "Online",
|
||||||
"severity": "Healthy",
|
"severity": "Healthy",
|
||||||
"latency": "0.3ms",
|
"latency": "3ms",
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
"lastCheck": "Manual"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Prometheus",
|
"name": "K3s Cluster",
|
||||||
"type": "Metrics Collection",
|
"type": "Kubernetes (12-node Pi)",
|
||||||
"layer": "Monitoring",
|
"layer": "Orchestration",
|
||||||
"label": "Observability",
|
"label": "Containers",
|
||||||
"address": "10.10.30.140",
|
"address": "k3s.local",
|
||||||
"status": "Online",
|
"status": "Online",
|
||||||
"severity": "Healthy",
|
"severity": "Healthy",
|
||||||
"latency": "0.1ms",
|
"latency": "5ms",
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
"lastCheck": "Manual"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Grafana",
|
"name": "Nginx Proxy Manager",
|
||||||
"type": "Metrics Dashboard",
|
"type": "Reverse Proxy",
|
||||||
"layer": "Monitoring",
|
"layer": "Networking",
|
||||||
"label": "Observability",
|
"label": "Access",
|
||||||
"address": "10.10.30.68",
|
"address": "npm.local",
|
||||||
"status": "Online",
|
"status": "Online",
|
||||||
"severity": "Healthy",
|
"severity": "Healthy",
|
||||||
"latency": "0.1ms",
|
"latency": "1ms",
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
"lastCheck": "Manual"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Uptime Kuma",
|
"name": "Uptime Kuma",
|
||||||
"type": "Service Monitor",
|
"type": "Service Monitor",
|
||||||
"layer": "Monitoring",
|
"layer": "Monitoring",
|
||||||
"label": "Observability",
|
"label": "Observability",
|
||||||
"address": "10.10.30.14",
|
"address": "uptime.local",
|
||||||
"status": "Online",
|
"status": "Online",
|
||||||
"severity": "Healthy",
|
"severity": "Healthy",
|
||||||
"latency": "0.2ms",
|
"latency": "2ms",
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
"lastCheck": "Manual"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Dashy",
|
"name": "APRS iGate — Home",
|
||||||
"type": "HomeLab Dashboard",
|
|
||||||
"layer": "Services",
|
|
||||||
"label": "Dashboard",
|
|
||||||
"address": "10.10.30.61",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.2ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Home Assistant",
|
|
||||||
"type": "Home Automation",
|
|
||||||
"layer": "Services",
|
|
||||||
"label": "Automation",
|
|
||||||
"address": "10.10.30.104",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.7ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "PrimeStation",
|
|
||||||
"type": "Media / Game Server",
|
|
||||||
"layer": "Services",
|
|
||||||
"label": "Media",
|
|
||||||
"address": "10.10.30.233",
|
|
||||||
"status": "Online",
|
|
||||||
"severity": "Healthy",
|
|
||||||
"latency": "0.1ms",
|
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "APRS iGate \u2014 Home",
|
|
||||||
"type": "RF Edge / APRS-IS Gateway",
|
"type": "RF Edge / APRS-IS Gateway",
|
||||||
"layer": "Edge",
|
"layer": "Edge",
|
||||||
"label": "RF",
|
"label": "RF",
|
||||||
"address": "10.10.30.129",
|
"address": "aprs-home.local",
|
||||||
"status": "Offline",
|
"status": "Active",
|
||||||
"severity": "Degraded",
|
"severity": "Healthy",
|
||||||
"latency": "N/A",
|
"latency": "N/A",
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
"lastCheck": "Manual"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "APRS iGate \u2014 Mobile",
|
"name": "APRS iGate — Mobile",
|
||||||
"type": "RF Edge / Mobile Node",
|
"type": "RF Edge / Mobile Node",
|
||||||
"layer": "Edge",
|
"layer": "Edge",
|
||||||
"label": "RF",
|
"label": "RF",
|
||||||
"address": "10.10.30.35",
|
"address": "aprs-mobile.local",
|
||||||
"status": "Offline",
|
"status": "Building",
|
||||||
"severity": "Degraded",
|
"severity": "Degraded",
|
||||||
"latency": "N/A",
|
"latency": "N/A",
|
||||||
"lastCheck": "2026-10-16 01:50 UTC"
|
"lastCheck": "Manual"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Grafana",
|
||||||
|
"type": "Metrics Dashboard",
|
||||||
|
"layer": "Monitoring",
|
||||||
|
"label": "Observability",
|
||||||
|
"address": "grafana.local",
|
||||||
|
"status": "Online",
|
||||||
|
"severity": "Healthy",
|
||||||
|
"latency": "4ms",
|
||||||
|
"lastCheck": "Manual"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,37 +1,22 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Google tag (gtag.js) -->
|
|
||||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-EQJFN7CX4Y"></script>
|
|
||||||
<script>
|
|
||||||
window.dataLayer = window.dataLayer || [];
|
|
||||||
function gtag(){dataLayer.push(arguments);}
|
|
||||||
gtag('js', new Date());
|
|
||||||
gtag('config', 'G-EQJFN7CX4Y');
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
<title>Chase Dumphord | DevOps & Cloud Infrastructure Engineer</title>
|
<title>Chase Dumphord | Digital Systems & Infrastructure</title>
|
||||||
|
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="Chase Dumphord DevOps and Cloud Infrastructure Engineer running an 18 node production environment with K3s, Proxmox, Prometheus, Grafana, and APRS RF edge systems out of Oxford, MS."
|
content="Chase Dumphord — digital systems builder focused on infrastructure, Linux, K3s, Proxmox, APRS RF edge systems, and real-world technical problem solving."
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Open Graph for LinkedIn / Discord sharing -->
|
<!-- Open Graph for LinkedIn / Discord sharing -->
|
||||||
<meta property="og:title" content="Chase Dumphord | DevOps & Cloud Infrastructure Engineer" />
|
<meta property="og:title" content="Chase Dumphord | Digital Systems & Infrastructure" />
|
||||||
<meta property="og:description" content="DevOps & Cloud Infrastructure Engineer. 18 nodes. 28 services. Always running. Based in Oxford, MS." />
|
<meta property="og:description" content="Hands-on systems builder. Proxmox • K3s • APRS • HomeLab. Based in Oxford, MS." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://chasedumphord.com" />
|
<meta property="og:url" content="https://chasedumphord.com" />
|
||||||
|
|
||||||
<meta property="og:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
|
|
||||||
<meta property="og:image:width" content="1536" />
|
|
||||||
<meta property="og:image:height" content="650" />
|
|
||||||
<meta property="twitter:card" content="summary_large_image" />
|
|
||||||
<meta property="twitter:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
|
|
||||||
|
|
||||||
<!-- ── Favicon set (from ced-logo-pack) ── -->
|
<!-- ── Favicon set (from ced-logo-pack) ── -->
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicons/favicon-32x32.png" />
|
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicons/favicon-32x32.png" />
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="assets/favicons/favicon-16x16.png" />
|
<link rel="icon" type="image/png" sizes="16x16" href="assets/favicons/favicon-16x16.png" />
|
||||||
@@ -47,7 +32,7 @@
|
|||||||
<meta name="author" content="Chase Dumphord" />
|
<meta name="author" content="Chase Dumphord" />
|
||||||
|
|
||||||
<!-- ── Social verification (rel=me) ── -->
|
<!-- ── Social verification (rel=me) ── -->
|
||||||
<link rel="me" href="https://www.linkedin.com/in/chase-dumphord/" />
|
<link rel="me" href="https://www.linkedin.com/in/chase-dumphord" />
|
||||||
<link rel="me" href="https://github.com/ced4568" />
|
<link rel="me" href="https://github.com/ced4568" />
|
||||||
|
|
||||||
<!-- Fonts: JetBrains Mono for terminal/code feel, Syne for headings -->
|
<!-- Fonts: JetBrains Mono for terminal/code feel, Syne for headings -->
|
||||||
@@ -87,13 +72,14 @@
|
|||||||
<div class="hero-text">
|
<div class="hero-text">
|
||||||
<p class="eyebrow">
|
<p class="eyebrow">
|
||||||
<span class="eyebrow-dot"></span>
|
<span class="eyebrow-dot"></span>
|
||||||
DevOps • Platform Engineering • Cloud Infrastructure • Kubernetes • Observability
|
Digital Systems • Infrastructure • Networking • Automation • Edge Systems
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h1>I build systems that <span class="accent-word">connect</span> hardware, networks, and operations.</h1>
|
<h1>I build systems that <span class="accent-word">connect</span> hardware, networks, and operations.</h1>
|
||||||
|
|
||||||
<p class="lead">
|
<p class="lead">
|
||||||
Chase Dumphord DevOps and Cloud Infrastructure Engineer running an 18 node production environment out of Oxford, MS. 6 node Proxmox VE cluster, 12 node K3s Kubernetes cluster, full observability stack, and VLAN-segmented networking. I build things that actually run, then document how they work.
|
Chase Dumphord — infrastructure builder running Proxmox, K3s, TrueNAS, and APRS RF edge systems out of Oxford, MS.
|
||||||
|
I build things that actually work, then document how they work.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="hero-actions">
|
<div class="hero-actions">
|
||||||
@@ -108,18 +94,18 @@
|
|||||||
<li>📍 Oxford, MS</li>
|
<li>📍 Oxford, MS</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">
|
<a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">
|
||||||
github/ced4568
|
⌥ github/ced4568
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="mailto:[email protected]">[email protected]</a>
|
<a href="mailto:[email protected]">✉ [email protected]</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<!-- LinkedIn badge — prominent social proof row -->
|
<!-- LinkedIn badge — prominent social proof row -->
|
||||||
<div class="hero-badges">
|
<div class="hero-badges">
|
||||||
<a
|
<a
|
||||||
href="https://www.linkedin.com/in/chase-dumphord/"
|
href="https://www.linkedin.com/in/chase-dumphord"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="badge-link linkedin-badge"
|
class="badge-link linkedin-badge"
|
||||||
@@ -127,7 +113,7 @@
|
|||||||
<svg class="badge-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
<svg class="badge-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
||||||
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
||||||
</svg>
|
</svg>
|
||||||
Connect on LinkedIn
|
LinkedIn
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
href="https://github.com/ced4568"
|
href="https://github.com/ced4568"
|
||||||
@@ -157,21 +143,21 @@
|
|||||||
<span class="dot red"></span>
|
<span class="dot red"></span>
|
||||||
<span class="dot yellow"></span>
|
<span class="dot yellow"></span>
|
||||||
<span class="dot green"></span>
|
<span class="dot green"></span>
|
||||||
<span class="terminal-title">ced's@homelab ~ $</span>
|
<span class="terminal-title">ced@homelab ~ $</span>
|
||||||
</div>
|
</div>
|
||||||
<pre><code><span class="t-prompt">ced's@homelab:~$</span> whoami
|
<pre><code><span class="t-prompt">ced@homelab:~$</span> whoami
|
||||||
<span class="t-val">devops_engineer</span>
|
<span class="t-val">systems_builder</span>
|
||||||
|
|
||||||
<span class="t-prompt">ced's@homelab:~$</span> uptime
|
<span class="t-prompt">ced@homelab:~$</span> uptime
|
||||||
<span class="t-val">18 nodes • 28 services • always_on</span>
|
<span class="t-val">12+ nodes • 10+ services • always_on</span>
|
||||||
|
|
||||||
<span class="t-prompt">ced's@homelab:~$</span> cat focus.txt
|
<span class="t-prompt">ced@homelab:~$</span> cat focus.txt
|
||||||
<span class="t-val">kubernetes
|
<span class="t-val">infrastructure
|
||||||
devops
|
networking
|
||||||
observability
|
automation
|
||||||
cloud_infrastructure</span>
|
rf_edge_systems</span>
|
||||||
|
|
||||||
<span class="t-prompt">ced's@homelab:~$</span> systemctl status life
|
<span class="t-prompt">ced@homelab:~$</span> systemctl status life
|
||||||
<span class="t-val">● building_real_systems.service</span>
|
<span class="t-val">● building_real_systems.service</span>
|
||||||
<span class="t-muted"> Active: active (running)</span><span class="t-cursor">▌</span></code></pre>
|
<span class="t-muted"> Active: active (running)</span><span class="t-cursor">▌</span></code></pre>
|
||||||
</div>
|
</div>
|
||||||
@@ -192,14 +178,14 @@ cloud_infrastructure</span>
|
|||||||
|
|
||||||
<div class="stats-grid">
|
<div class="stats-grid">
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<h3>18</h3>
|
<h3>12+</h3>
|
||||||
<p>Nodes</p>
|
<p>Nodes</p>
|
||||||
<span>6-node Proxmox VE • 12 node K3s</span>
|
<span>K3s cluster • Raspberry Pi</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<h3>28+</h3>
|
<h3>10+</h3>
|
||||||
<p>Services</p>
|
<p>Services</p>
|
||||||
<span>Self-hosted production stack</span>
|
<span>Self-hosted stack</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<h3>4</h3>
|
<h3>4</h3>
|
||||||
@@ -271,7 +257,7 @@ cloud_infrastructure</span>
|
|||||||
<!-- Fallback shown when data can't load -->
|
<!-- Fallback shown when data can't load -->
|
||||||
<div id="noc-fallback" class="noc-fallback" style="display:none;">
|
<div id="noc-fallback" class="noc-fallback" style="display:none;">
|
||||||
<p class="noc-fallback-msg">
|
<p class="noc-fallback-msg">
|
||||||
NOC feed unavailable from this context systems run locally.<br/>
|
📡 NOC feed unavailable from this context — systems run locally.<br/>
|
||||||
<a href="https://noc.chasedumphord.com" target="_blank" rel="noopener noreferrer">
|
<a href="https://noc.chasedumphord.com" target="_blank" rel="noopener noreferrer">
|
||||||
View the live NOC dashboard →
|
View the live NOC dashboard →
|
||||||
</a>
|
</a>
|
||||||
@@ -285,35 +271,34 @@ cloud_infrastructure</span>
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-heading">
|
<div class="section-heading">
|
||||||
<p class="section-label">// about</p>
|
<p class="section-label">// about</p>
|
||||||
<h2>DevOps and Cloud Infrastructure Engineer with 10+ years of real systems ownership</h2>
|
<h2>Hands-on systems builder with a digital infrastructure mindset</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="content-grid">
|
<div class="content-grid">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<p>
|
<p>
|
||||||
I'm a DevOps and Cloud Infrastructure Engineer focused on reliable delivery, container
|
I'm a technical professional focused on digital systems, infrastructure, networking,
|
||||||
orchestration, and cloud native infrastructure built for production conditions. I run an
|
automation, and hands-on system integration. I build things that are practical,
|
||||||
18 node environment every day consisting of a 6 node Proxmox VE hypervisor cluster and
|
reliable, and well-documented — from homelab services and live dashboards to Raspberry Pi
|
||||||
a 12 node K3s Kubernetes cluster with Prometheus monitoring, Grafana dashboards, and
|
deployments, APRS iGates, and complex troubleshooting workflows.
|
||||||
VLAN segmented networking. Not a lab. A production system.
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
I come from 10+ years in industrial digital systems at GE Aerospace and in the field
|
My background blends field engineering, industrial technology, and infrastructure
|
||||||
as a Level III engineer on aerospace inspection equipment. I understand what production
|
problem solving. Increasingly I'm integrating AI tooling — using LLMs for system
|
||||||
failure actually costs. That same operational discipline is what I bring to cloud native
|
documentation, automated diagnostics, and workflow acceleration — as part of how
|
||||||
infrastructure. I don't simulate environments. I run them.
|
modern infrastructure gets built and maintained.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3>Core Focus Areas</h3>
|
<h3>Core Focus Areas</h3>
|
||||||
<ul class="clean-list">
|
<ul class="clean-list">
|
||||||
<li>Kubernetes orchestration and container infrastructure</li>
|
<li>Digital systems and infrastructure engineering</li>
|
||||||
<li>DevOps automation and CI/CD pipeline workflows</li>
|
<li>Linux systems and service management</li>
|
||||||
<li>Observability with Prometheus, Grafana, and alerting pipelines</li>
|
<li>Networking, VLANs, failover, and connectivity troubleshooting</li>
|
||||||
<li>Cloud native infrastructure design and deployment</li>
|
<li>Raspberry Pi and edge-device deployments</li>
|
||||||
<li>Networking, VLANs, reverse proxy, and Cloudflare edge configuration</li>
|
<li>AI-assisted automation, documentation, and diagnostic workflows</li>
|
||||||
<li>AI assisted automation, documentation, and diagnostic workflows</li>
|
<li>Documentation, process building, and reproducible project design</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -325,8 +310,8 @@ cloud_infrastructure</span>
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-heading">
|
<div class="section-heading">
|
||||||
<p class="section-label">// projects</p>
|
<p class="section-label">// projects</p>
|
||||||
<h2>Infrastructure & Systems Projects</h2>
|
<h2>Infrastructure & Systems Projects</h2>
|
||||||
<p class="section-intro">Built on real systems. Not demos, not tutorials running infrastructure.</p>
|
<p class="section-intro">Built on real systems. Not demos, not tutorials — running infrastructure.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="projects-grid">
|
<div class="projects-grid">
|
||||||
@@ -343,7 +328,7 @@ cloud_infrastructure</span>
|
|||||||
<ul class="clean-list">
|
<ul class="clean-list">
|
||||||
<li>Proxmox VE virtualization platform</li>
|
<li>Proxmox VE virtualization platform</li>
|
||||||
<li>VLAN segmentation via UniFi (Main / IoT / HomeLab / Guest)</li>
|
<li>VLAN segmentation via UniFi (Main / IoT / HomeLab / Guest)</li>
|
||||||
<li>Self hosted services behind Nginx Proxy Manager + Cloudflare Tunnels</li>
|
<li>Self-hosted services behind Nginx Proxy Manager + Cloudflare Tunnels</li>
|
||||||
<li>Uptime Kuma + Grafana monitoring stack</li>
|
<li>Uptime Kuma + Grafana monitoring stack</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer" class="project-link">
|
<a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer" class="project-link">
|
||||||
@@ -358,12 +343,12 @@ cloud_infrastructure</span>
|
|||||||
</div>
|
</div>
|
||||||
<p class="tags">Kubernetes • Containers • Linux • Automation</p>
|
<p class="tags">Kubernetes • Containers • Linux • Automation</p>
|
||||||
<p class="project-impact">
|
<p class="project-impact">
|
||||||
12 node K3s cluster on Raspberry Pi running distributed infrastructure and container orchestration in production with dedicated control plane, ingress, data, and monitoring node pools.
|
12-node K3s cluster on Raspberry Pi built to simulate distributed infrastructure and container orchestration at scale.
|
||||||
</p>
|
</p>
|
||||||
<ul class="clean-list">
|
<ul class="clean-list">
|
||||||
<li>Multi node cluster setup and management</li>
|
<li>Multi-node cluster setup and management</li>
|
||||||
<li>Containerized workload deployment</li>
|
<li>Containerized workload deployment</li>
|
||||||
<li>Infrastructure automation via manifest driven configuration</li>
|
<li>Infrastructure automation via manifest-driven configuration</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="https://github.com/ced4568/ced-k3s-homelab" target="_blank" rel="noopener noreferrer" class="project-link">
|
<a href="https://github.com/ced4568/ced-k3s-homelab" target="_blank" rel="noopener noreferrer" class="project-link">
|
||||||
View on GitHub →
|
View on GitHub →
|
||||||
@@ -377,7 +362,7 @@ cloud_infrastructure</span>
|
|||||||
</div>
|
</div>
|
||||||
<p class="tags">RF • Linux • Raspberry Pi • APRS-IS • Edge Systems</p>
|
<p class="tags">RF • Linux • Raspberry Pi • APRS-IS • Edge Systems</p>
|
||||||
<p class="project-impact">
|
<p class="project-impact">
|
||||||
Operational dual-node RF to internet gateway. Decodes real beacon packets and uplinks live to aprs.fi.
|
Operational dual-node RF-to-internet gateway. Decodes real beacon packets and uplinks live to aprs.fi.
|
||||||
</p>
|
</p>
|
||||||
<ul class="clean-list">
|
<ul class="clean-list">
|
||||||
<li>Direwolf APRS TNC with tuned audio chain (target: 50–60 level)</li>
|
<li>Direwolf APRS TNC with tuned audio chain (target: 50–60 level)</li>
|
||||||
@@ -401,7 +386,7 @@ cloud_infrastructure</span>
|
|||||||
<p class="section-label">// noc roadmap</p>
|
<p class="section-label">// noc roadmap</p>
|
||||||
<h2>Ced's NOC Vision</h2>
|
<h2>Ced's NOC Vision</h2>
|
||||||
<p class="section-intro">
|
<p class="section-intro">
|
||||||
Staged monitoring and systems visibility platform built on real infrastructure.
|
Staged monitoring and systems-visibility platform built on real infrastructure.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -410,24 +395,24 @@ cloud_infrastructure</span>
|
|||||||
<div class="noc-card-badge done">✅ Live</div>
|
<div class="noc-card-badge done">✅ Live</div>
|
||||||
<h3>Portfolio NOC</h3>
|
<h3>Portfolio NOC</h3>
|
||||||
<p>
|
<p>
|
||||||
JSON driven dashboard showing real inventory, online/offline checks, service labels,
|
JSON-driven dashboard showing real inventory, online/offline checks, service labels,
|
||||||
latency, and last check timestamps across 18 nodes and 28 services.
|
latency, and last-check timestamps.
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="noc-card">
|
|
||||||
<div class="noc-card-badge done">✅ Live</div>
|
|
||||||
<h3>Grafana + Prometheus Observability Stack</h3>
|
|
||||||
<p>
|
|
||||||
Full observability stack running across Proxmox, TrueNAS, K3s nodes, Uptime Kuma,
|
|
||||||
and APRS edge systems with real time metrics ingestion and live alerting pipelines.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="noc-card">
|
<div class="noc-card">
|
||||||
<div class="noc-card-badge next">⚙️ Next</div>
|
<div class="noc-card-badge next">⚙️ Next</div>
|
||||||
<h3>Automated Incident Response</h3>
|
<h3>Automated Data Updates</h3>
|
||||||
<p>
|
<p>
|
||||||
AI assisted ops automation using n8n, Telegram bots, and OpenRouter integrated with
|
Scheduled local scripts will auto-refresh system status and push dashboard-ready
|
||||||
Prometheus alerting for automated triage and remediation workflows.
|
JSON on a cron interval — no manual updates.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="noc-card">
|
||||||
|
<div class="noc-card-badge future">📈 Future</div>
|
||||||
|
<h3>Grafana + Prometheus</h3>
|
||||||
|
<p>
|
||||||
|
Full observability stack for Proxmox, TrueNAS, K3s, Raspberry Pi nodes, Uptime Kuma,
|
||||||
|
and APRS edge systems with real-time metrics ingestion.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -442,7 +427,7 @@ cloud_infrastructure</span>
|
|||||||
>
|
>
|
||||||
<span class="btn-dot"></span> View Live NOC Dashboard
|
<span class="btn-dot"></span> View Live NOC Dashboard
|
||||||
</a>
|
</a>
|
||||||
<span class="noc-cta-sub">noc.chasedumphord.com live infrastructure visibility</span>
|
<span class="noc-cta-sub">noc.chasedumphord.com — live infrastructure visibility</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -452,7 +437,7 @@ cloud_infrastructure</span>
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-heading">
|
<div class="section-heading">
|
||||||
<p class="section-label">// tech stack</p>
|
<p class="section-label">// tech stack</p>
|
||||||
<h2>Tools & Technologies</h2>
|
<h2>Tools & Technologies</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stack-groups">
|
<div class="stack-groups">
|
||||||
@@ -464,20 +449,17 @@ cloud_infrastructure</span>
|
|||||||
<span class="stack-pill">K3s</span>
|
<span class="stack-pill">K3s</span>
|
||||||
<span class="stack-pill">Docker</span>
|
<span class="stack-pill">Docker</span>
|
||||||
<span class="stack-pill">TrueNAS</span>
|
<span class="stack-pill">TrueNAS</span>
|
||||||
<span class="stack-pill">Helm</span>
|
|
||||||
<span class="stack-pill">Terraform</span>
|
|
||||||
<span class="stack-pill">Nginx Proxy Manager</span>
|
<span class="stack-pill">Nginx Proxy Manager</span>
|
||||||
<span class="stack-pill">Cloudflare Tunnels</span>
|
<span class="stack-pill">Cloudflare Tunnels</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stack-group">
|
<div class="stack-group">
|
||||||
<h4 class="stack-group-label">Monitoring & Observability</h4>
|
<h4 class="stack-group-label">Monitoring & Observability</h4>
|
||||||
<div class="stack-pills">
|
<div class="stack-pills">
|
||||||
<span class="stack-pill">Grafana</span>
|
<span class="stack-pill">Grafana</span>
|
||||||
<span class="stack-pill">Prometheus</span>
|
<span class="stack-pill">Prometheus</span>
|
||||||
<span class="stack-pill">Uptime Kuma</span>
|
<span class="stack-pill">Uptime Kuma</span>
|
||||||
<span class="stack-pill">Alerting Pipelines</span>
|
|
||||||
<span class="stack-pill">Custom NOC Dashboard</span>
|
<span class="stack-pill">Custom NOC Dashboard</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -487,23 +469,13 @@ cloud_infrastructure</span>
|
|||||||
<div class="stack-pills">
|
<div class="stack-pills">
|
||||||
<span class="stack-pill">UniFi</span>
|
<span class="stack-pill">UniFi</span>
|
||||||
<span class="stack-pill">VLAN Segmentation</span>
|
<span class="stack-pill">VLAN Segmentation</span>
|
||||||
<span class="stack-pill">Nginx</span>
|
<span class="stack-pill">pfSense</span>
|
||||||
<span class="stack-pill">Traefik</span>
|
|
||||||
<span class="stack-pill">Cloudflare DNS</span>
|
<span class="stack-pill">Cloudflare DNS</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stack-group">
|
<div class="stack-group">
|
||||||
<h4 class="stack-group-label">GitOps & CI/CD</h4>
|
<h4 class="stack-group-label">RF & Edge</h4>
|
||||||
<div class="stack-pills">
|
|
||||||
<span class="stack-pill">GitHub Actions</span>
|
|
||||||
<span class="stack-pill">Docker Compose</span>
|
|
||||||
<span class="stack-pill">Manifest driven Config</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="stack-group">
|
|
||||||
<h4 class="stack-group-label">RF & Edge</h4>
|
|
||||||
<div class="stack-pills">
|
<div class="stack-pills">
|
||||||
<span class="stack-pill">Direwolf</span>
|
<span class="stack-pill">Direwolf</span>
|
||||||
<span class="stack-pill">APRS-IS</span>
|
<span class="stack-pill">APRS-IS</span>
|
||||||
@@ -525,18 +497,13 @@ cloud_infrastructure</span>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stack-group">
|
<div class="stack-group">
|
||||||
<h4 class="stack-group-label">AI & Automation</h4>
|
<h4 class="stack-group-label">AI & Automation</h4>
|
||||||
<div class="stack-pills">
|
<div class="stack-pills">
|
||||||
<span class="stack-pill">n8n</span>
|
|
||||||
<span class="stack-pill">OpenRouter</span>
|
|
||||||
<span class="stack-pill">Telegram Bots</span>
|
|
||||||
<span class="stack-pill">Claude (Anthropic)</span>
|
<span class="stack-pill">Claude (Anthropic)</span>
|
||||||
<span class="stack-pill">ChatGPT</span>
|
<span class="stack-pill">ChatGPT</span>
|
||||||
<span class="stack-pill">Gemini</span>
|
<span class="stack-pill">LLM-assisted Documentation</span>
|
||||||
<span class="stack-pill">Hermes Agent</span>
|
<span class="stack-pill">AI-driven Diagnostics</span>
|
||||||
<span class="stack-pill">Crew AI Agent</span>
|
<span class="stack-pill">Prompt Engineering</span>
|
||||||
<span class="stack-pill">LLM assisted Documentation</span>
|
|
||||||
<span class="stack-pill">AI driven Diagnostics</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -549,7 +516,7 @@ cloud_infrastructure</span>
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-heading">
|
<div class="section-heading">
|
||||||
<p class="section-label">// resume snapshot</p>
|
<p class="section-label">// resume snapshot</p>
|
||||||
<h2>10+ years of systems ownership from the factory floor to cloud native infrastructure</h2>
|
<h2>Technical experience that bridges field work and digital systems</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="resume-grid">
|
<div class="resume-grid">
|
||||||
@@ -557,26 +524,28 @@ cloud_infrastructure</span>
|
|||||||
<div class="card resume-card">
|
<div class="card resume-card">
|
||||||
<h3>What I Bring</h3>
|
<h3>What I Bring</h3>
|
||||||
<ul class="clean-list">
|
<ul class="clean-list">
|
||||||
<li>Production Kubernetes infrastructure running 18 nodes across dedicated control plane, ingress, data, and monitoring node pools with live observability</li>
|
<li>Industrial and field-service technical background — hands-on problem solving under real constraints</li>
|
||||||
<li>10+ years of systems ownership in industrial environments where failure has direct production consequences including GE Aerospace digital systems and Level III field service on aerospace equipment</li>
|
<li>Linux systems administration — service management, troubleshooting, automation</li>
|
||||||
<li>End to end cloud native infrastructure capability covering containers, ingress, secrets, monitoring, backups, and automated recovery with live systems to prove it</li>
|
<li>Networking depth — VLANs, DNS, reverse proxy, firewall config, failover design</li>
|
||||||
<li>Infrastructure-as-documentation mindset where everything built gets written up with runbooks, architecture decisions, and SOPs</li>
|
<li>Infrastructure-as-documentation mindset — everything I build gets written up</li>
|
||||||
|
<li>Homelab → production thinking — I build lab environments that mirror real-world system design</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card resume-card">
|
<div class="card resume-card">
|
||||||
<h3>Target Roles</h3>
|
<h3>Target Roles</h3>
|
||||||
<ul class="clean-list">
|
<ul class="clean-list">
|
||||||
<li>DevOps Engineer</li>
|
<li>Systems / Infrastructure Engineer</li>
|
||||||
<li>Platform Engineer</li>
|
<li>NOC Technician / Network Operations</li>
|
||||||
<li>Cloud Infrastructure Engineer</li>
|
<li>Linux Systems Administrator</li>
|
||||||
<li>Site Reliability Engineer</li>
|
<li>Technical Operations / IT Infrastructure</li>
|
||||||
<li>Infrastructure Architect</li>
|
<li>Edge Systems / Field Technical Roles</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="resume-note">
|
<div class="resume-note">
|
||||||
<p>
|
<p>
|
||||||
Open to remote and hybrid roles where real infrastructure ownership and operational depth matter. I come from industrial systems and I bring that same zero downtime discipline to cloud native environments.
|
Currently positioning around digital systems, infrastructure, and technical operations —
|
||||||
|
especially roles where hands-on problem solving and system integration matter more than certifications.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -585,20 +554,20 @@ cloud_infrastructure</span>
|
|||||||
<h3>Currently Learning / Building Toward</h3>
|
<h3>Currently Learning / Building Toward</h3>
|
||||||
<div class="learning-grid">
|
<div class="learning-grid">
|
||||||
<div class="learning-item">
|
<div class="learning-item">
|
||||||
<span class="learning-icon">☸️</span>
|
<span class="learning-icon">📈</span>
|
||||||
<span>Advanced Kubernetes patterns including GitOps with FluxCD, Helm chart authoring, and ArgoCD</span>
|
<span>Grafana + Prometheus full observability stack</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="learning-item">
|
<div class="learning-item">
|
||||||
<span class="learning-icon">🏗️</span>
|
<span class="learning-icon">☸️</span>
|
||||||
<span>Terraform infrastructure as code for cloud provisioning and repeatable environment builds</span>
|
<span>Kubernetes production patterns (GitOps, Helm, ArgoCD)</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="learning-item">
|
<div class="learning-item">
|
||||||
<span class="learning-icon">🔐</span>
|
<span class="learning-icon">🔐</span>
|
||||||
<span>Infrastructure security hardening and zero-trust network architecture</span>
|
<span>Network security and zero-trust architecture</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="learning-item">
|
<div class="learning-item">
|
||||||
<span class="learning-icon">📊</span>
|
<span class="learning-icon">📡</span>
|
||||||
<span>OpenTelemetry integration and distributed tracing across the K3s cluster</span>
|
<span>Mobile APRS iGate deployment</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -614,7 +583,7 @@ cloud_infrastructure</span>
|
|||||||
>
|
>
|
||||||
↓ Download Resume (PDF)
|
↓ Download Resume (PDF)
|
||||||
</a>
|
</a>
|
||||||
<span class="resume-download-note">Updated 2026 • PDF format</span>
|
<span class="resume-download-note">Updated 2025 • PDF format</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -628,7 +597,7 @@ cloud_infrastructure</span>
|
|||||||
<p class="section-label">// github</p>
|
<p class="section-label">// github</p>
|
||||||
<h2>Pinned Repositories</h2>
|
<h2>Pinned Repositories</h2>
|
||||||
<p class="section-intro">
|
<p class="section-intro">
|
||||||
Active projects on GitHub source code, configs, and documentation for everything I'm building.
|
Active projects on GitHub — source code, configs, and documentation for everything I'm building.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -666,10 +635,9 @@ cloud_infrastructure</span>
|
|||||||
<p class="section-label">// personal</p>
|
<p class="section-label">// personal</p>
|
||||||
<h2>Technical, curious, and always building</h2>
|
<h2>Technical, curious, and always building</h2>
|
||||||
<p>
|
<p>
|
||||||
Outside of work I'm into electronics, self hosting, coding, drones, and ham radio.
|
Outside of work I'm into electronics, self-hosting, coding, drones, ham radio, and
|
||||||
I'm a licensed amateur radio operator running a dual node APRS RF iGate with a
|
hands-on projects that force me to learn something real. Ball pythons and dogs round
|
||||||
verified uplink on aprs.fi. Kobe the Boston Terrier keeps the home lab grounded.
|
out the home lab. That curiosity carries directly into how I build and document systems.
|
||||||
That curiosity carries directly into how I build and document systems.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -689,16 +657,16 @@ cloud_infrastructure</span>
|
|||||||
<p>Email: <a href="mailto:[email protected]">[email protected]</a></p>
|
<p>Email: <a href="mailto:[email protected]">[email protected]</a></p>
|
||||||
<p>Location: Oxford, MS</p>
|
<p>Location: Oxford, MS</p>
|
||||||
<p>GitHub: <a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">github.com/ced4568</a></p>
|
<p>GitHub: <a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">github.com/ced4568</a></p>
|
||||||
<p>LinkedIn: <a href="https://www.linkedin.com/in/chase-dumphord/" target="_blank" rel="noopener noreferrer">linkedin.com/in/chase-dumphord</a></p>
|
<p>LinkedIn: <a href="https://www.linkedin.com/in/chase-dumphord" target="_blank" rel="noopener noreferrer">linkedin.com/in/toochase-dumphord</a></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3>Open To</h3>
|
<h3>Open To</h3>
|
||||||
<ul class="clean-list">
|
<ul class="clean-list">
|
||||||
<li>DevOps Engineer and Platform Engineer roles</li>
|
<li>Digital systems and infrastructure roles</li>
|
||||||
<li>Cloud Infrastructure and SRE positions</li>
|
<li>Networking and technical operations</li>
|
||||||
<li>Remote and hybrid opportunities</li>
|
<li>Automation and monitoring projects</li>
|
||||||
<li>Consulting and infrastructure projects through Synthos Systems</li>
|
<li>Hardware + software integration work</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -717,4 +685,4 @@ cloud_infrastructure</span>
|
|||||||
|
|
||||||
<script src="script.js"></script>
|
<script src="script.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,506 +1,475 @@
|
|||||||
<!--
|
|
||||||
╔══════════════════════════════════════════════════════════════════════╗
|
|
||||||
║ Ced's NOC — Live Infrastructure Dashboard ║
|
|
||||||
║ FILE: noc/index.html ║
|
|
||||||
╠══════════════════════════════════════════════════════════════════════╣
|
|
||||||
║ PAGE MAP (top → bottom) ║
|
|
||||||
║ 1. HEAD — meta, OG/Twitter tags, favicons, Google Fonts, ║
|
|
||||||
║ shared stylesheet (../style.css), NOC-specific CSS ║
|
|
||||||
║ 2. NAV — site header: Ced_ logo, nav links, portfolio link ║
|
|
||||||
║ 3. NOC HERO — eyebrow (live/auto-refresh badge), H1, lead text, ║
|
|
||||||
║ meta bar (location, portfolio link, GitHub) ║
|
|
||||||
║ 4. DASHBOARD — status command bar, uptime pills (JS), metrics grid, ║
|
|
||||||
║ alert panel, layer filter tabs, system cards grid, ║
|
|
||||||
║ stack info bar, NOC roadmap cards ║
|
|
||||||
║ 5. FOOTER — copyright + back-to-top link ║
|
|
||||||
║ 6. SCRIPTS — ../script.js + inline NOC JS (layer tabs, ║
|
|
||||||
║ uptime pill builder, MutationObserver for card grid) ║
|
|
||||||
╚══════════════════════════════════════════════════════════════════════╝
|
|
||||||
-->
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
<title>Ced's NOC | Live Systems Dashboard</title>
|
<title>Chase Dumphord | Digital Systems & Infrastructure</title>
|
||||||
|
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="Ced's NOC — live network operations center dashboard showing real-time infrastructure health across 18 nodes and 28 services. Proxmox, K3s, TrueNAS, APRS edge systems."
|
content="Chase Dumphord portfolio - digital systems, infrastructure, networking, automation, homelab engineering, and real-world technical projects."
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Open Graph -->
|
<link rel="stylesheet" href="style.css" />
|
||||||
<meta property="og:title" content="Ced's NOC | Live Systems Dashboard" />
|
|
||||||
<meta property="og:description" content="Live infrastructure visibility — 18 nodes, 28 services. Proxmox, K3s, TrueNAS, APRS edge systems. Always running." />
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:url" content="https://noc.chasedumphord.com" />
|
|
||||||
<meta property="og:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta name="twitter:title" content="Ced's NOC | Live Systems Dashboard" />
|
|
||||||
<meta name="twitter:description" content="Live infrastructure visibility — 18 nodes, 28 services. Proxmox, K3s, TrueNAS, APRS edge systems. Always running." />
|
|
||||||
<meta name="twitter:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
|
|
||||||
|
|
||||||
<!-- Favicons (path up one level since we're in /noc/) -->
|
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="../assets/favicons/favicon-32x32.png" />
|
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="../assets/favicons/favicon-16x16.png" />
|
|
||||||
<link rel="icon" type="image/png" sizes="192x192" href="../assets/favicons/favicon-192x192.png" />
|
|
||||||
<link rel="apple-touch-icon" sizes="512x512" href="../assets/favicons/favicon-512x512.png" />
|
|
||||||
<link rel="shortcut icon" href="../assets/favicons/favicon.ico" />
|
|
||||||
|
|
||||||
<meta name="robots" content="index, follow" />
|
|
||||||
<meta name="author" content="Chase Dumphord" />
|
|
||||||
|
|
||||||
<!-- Fonts — same as main site -->
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Syne:wght@700;800&family=DM+Sans:wght@400;500;700&display=swap" rel="stylesheet" />
|
|
||||||
|
|
||||||
<!-- Shared stylesheet (up one level) -->
|
|
||||||
<link rel="stylesheet" href="../style.css" />
|
|
||||||
|
|
||||||
<!-- NOC-specific styles -->
|
|
||||||
<style>
|
|
||||||
/* ── NOC page overrides & extras ── */
|
|
||||||
.noc-page-hero {
|
|
||||||
padding: 3.5rem 0 2rem;
|
|
||||||
border-bottom: 1px solid var(--line);
|
|
||||||
}
|
|
||||||
|
|
||||||
.noc-page-hero .eyebrow {
|
|
||||||
margin-bottom: 0.6rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noc-page-title {
|
|
||||||
font-family: var(--font-display);
|
|
||||||
font-size: clamp(2rem, 4vw, 3.2rem);
|
|
||||||
font-weight: 800;
|
|
||||||
margin: 0 0 0.75rem;
|
|
||||||
line-height: 1.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noc-page-title span {
|
|
||||||
color: var(--accent-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.noc-page-lead {
|
|
||||||
color: var(--muted);
|
|
||||||
font-size: 1rem;
|
|
||||||
max-width: 60ch;
|
|
||||||
margin: 0 0 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noc-page-meta {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 0.6rem 1.4rem;
|
|
||||||
font-family: var(--font-mono);
|
|
||||||
font-size: 0.78rem;
|
|
||||||
color: var(--muted);
|
|
||||||
list-style: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noc-page-meta a { color: var(--muted); }
|
|
||||||
.noc-page-meta a:hover { color: var(--accent-2); }
|
|
||||||
|
|
||||||
/* Full-width NOC content area */
|
|
||||||
.noc-full {
|
|
||||||
padding: 2.5rem 0 4rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Uptime summary bar */
|
|
||||||
.uptime-bar {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 0.75rem;
|
|
||||||
margin-bottom: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.uptime-pill {
|
|
||||||
font-family: var(--font-mono);
|
|
||||||
font-size: 0.76rem;
|
|
||||||
padding: 0.35rem 0.75rem;
|
|
||||||
border-radius: 999px;
|
|
||||||
border: 1px solid var(--line);
|
|
||||||
color: var(--muted);
|
|
||||||
background: rgba(255,255,255,0.03);
|
|
||||||
}
|
|
||||||
|
|
||||||
.uptime-pill.online {
|
|
||||||
color: var(--accent-2);
|
|
||||||
border-color: rgba(94, 250, 204, 0.3);
|
|
||||||
background: rgba(94, 250, 204, 0.06);
|
|
||||||
}
|
|
||||||
|
|
||||||
.uptime-pill.warning {
|
|
||||||
color: var(--warning);
|
|
||||||
border-color: rgba(242, 204, 96, 0.3);
|
|
||||||
background: rgba(242, 204, 96, 0.06);
|
|
||||||
}
|
|
||||||
|
|
||||||
.uptime-pill.offline {
|
|
||||||
color: var(--danger);
|
|
||||||
border-color: rgba(255, 95, 86, 0.3);
|
|
||||||
background: rgba(255, 95, 86, 0.06);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Layer filter tabs */
|
|
||||||
.layer-tabs {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 0.5rem;
|
|
||||||
margin-bottom: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.layer-tab {
|
|
||||||
font-family: var(--font-mono);
|
|
||||||
font-size: 0.76rem;
|
|
||||||
font-weight: 700;
|
|
||||||
padding: 0.35rem 0.85rem;
|
|
||||||
border-radius: 999px;
|
|
||||||
border: 1px solid var(--line);
|
|
||||||
color: var(--muted);
|
|
||||||
background: transparent;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: all 0.15s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.layer-tab:hover,
|
|
||||||
.layer-tab.active {
|
|
||||||
color: var(--accent-2);
|
|
||||||
border-color: rgba(94, 250, 204, 0.35);
|
|
||||||
background: rgba(94, 250, 204, 0.07);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Roadmap section on NOC page */
|
|
||||||
.noc-roadmap {
|
|
||||||
margin-top: 3rem;
|
|
||||||
padding-top: 2.5rem;
|
|
||||||
border-top: 1px solid var(--line);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Stack info footer on NOC page */
|
|
||||||
.noc-stack-bar {
|
|
||||||
margin-top: 2.5rem;
|
|
||||||
padding: 1rem 1.25rem;
|
|
||||||
border-radius: var(--radius);
|
|
||||||
background: rgba(0,0,0,0.2);
|
|
||||||
border: 1px solid var(--line);
|
|
||||||
font-family: var(--font-mono);
|
|
||||||
font-size: 0.78rem;
|
|
||||||
color: var(--muted);
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 0.5rem 1.5rem;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noc-stack-bar strong {
|
|
||||||
color: var(--accent-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 620px) {
|
|
||||||
.layer-tabs { gap: 0.4rem; }
|
|
||||||
.layer-tab { font-size: 0.7rem; padding: 0.3rem 0.65rem; }
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<!-- ══════════════════════════════════════════════════════════════════════ NAV
|
|
||||||
Shared site-header component (styled by ../style.css).
|
|
||||||
Left: "Ced_" logo linking back to chasedumphord.com.
|
|
||||||
Right: nav links — Dashboard (top anchor), Systems (layer-tabs anchor),
|
|
||||||
← Portfolio (main site), GitHub (ced4568), Contact.
|
|
||||||
══════════════════════════════════════════════════════════════════════════ -->
|
|
||||||
<header class="site-header">
|
<header class="site-header">
|
||||||
<div class="container nav">
|
<div class="container nav">
|
||||||
<a href="https://chasedumphord.com" class="logo">Ced<span class="logo-cursor">_</span></a>
|
<a href="#top" class="logo">Chase Dumphord</a>
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
<ul class="nav-links">
|
<ul class="nav-links">
|
||||||
<li><a href="#top">Dashboard</a></li>
|
<li><a href="#snapshot">Snapshot</a></li>
|
||||||
<li><a href="#layer-tabs">Systems</a></li>
|
<li><a href="#noc">NOC</a></li>
|
||||||
<li><a href="https://chasedumphord.com">← Portfolio</a></li>
|
<li><a href="#about">About</a></li>
|
||||||
<li><a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer">GitHub</a></li>
|
<li><a href="#projects">Projects</a></li>
|
||||||
<li><a href="https://chasedumphord.com/#contact">Contact</a></li>
|
<li><a href="#resume">Resume</a></li>
|
||||||
|
<li><a href="#contact">Contact</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main id="top">
|
<main id="top">
|
||||||
|
<section class="hero">
|
||||||
|
<div class="container hero-grid">
|
||||||
|
<div class="hero-text">
|
||||||
|
<p class="eyebrow">Digital Systems • Infrastructure • Networking • Automation • Edge Systems</p>
|
||||||
|
|
||||||
<!-- ══════════════════════════════════════════════════════════════════════ NOC HERO
|
<h1>I build practical systems that connect hardware, networks, software, and operations.</h1>
|
||||||
Eyebrow tag: "Ced's NOC • Live Infrastructure Dashboard • Auto-refresh: 30s".
|
|
||||||
H1: "Live Systems Dashboard" with accent color on "Dashboard".
|
|
||||||
Lead text: describes 18 nodes, 28 services, Proxmox/K3s/TrueNAS/APRS stack.
|
|
||||||
Meta bar: location (Oxford MS), portfolio link, GitHub profile link.
|
|
||||||
══════════════════════════════════════════════════════════════════════════ -->
|
|
||||||
<div class="noc-page-hero">
|
|
||||||
<div class="container">
|
|
||||||
<p class="eyebrow">
|
|
||||||
<span class="eyebrow-dot"></span>
|
|
||||||
Ced's NOC • Live Infrastructure Dashboard • Auto-refresh: 30s
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h1 class="noc-page-title">
|
<p class="lead">
|
||||||
Live Systems <span>Dashboard</span>
|
I’m Chase Dumphord — a hands-on systems builder focused on digital infrastructure,
|
||||||
</h1>
|
Linux systems, homelab engineering, Raspberry Pi deployments, networking, automation,
|
||||||
|
and real-world technical problem solving.
|
||||||
|
</p>
|
||||||
|
|
||||||
<p class="noc-page-lead">
|
<div class="hero-actions">
|
||||||
Real time visibility into Ced's HomeLab infrastructure across 18 nodes and 28 services
|
<a class="btn btn-primary" href="#projects">View Projects</a>
|
||||||
Proxmox, K3s, TrueNAS, APRS RF edge systems, and self-hosted services.
|
<a class="btn btn-secondary" href="#contact">Contact Me</a>
|
||||||
Built from the ground up and running in production every day. The infrastructure on this page is live. Not a demo.
|
</div>
|
||||||
</p>
|
|
||||||
|
|
||||||
<ul class="noc-page-meta">
|
<ul class="quick-facts">
|
||||||
<li>📍 Oxford, MS</li>
|
<li>Oxford, MS</li>
|
||||||
<li><a href="https://chasedumphord.com">← Portfolio</a></li>
|
<li>
|
||||||
<li><a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">github/ced4568</a></li>
|
GitHub:
|
||||||
</ul>
|
<a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">ced4568</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Email:
|
||||||
|
<a href="mailto:[email protected]">[email protected]</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hero-panel">
|
||||||
|
<img
|
||||||
|
src="assets/images/ChaseD_headshot.jpg"
|
||||||
|
alt="Headshot of Chase Dumphord"
|
||||||
|
class="hero-image"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="terminal-card">
|
||||||
|
<div class="terminal-top">
|
||||||
|
<span></span>
|
||||||
|
<span></span>
|
||||||
|
<span></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<pre><code>$ whoami
|
||||||
|
systems_builder
|
||||||
|
|
||||||
|
$ focus
|
||||||
|
infrastructure
|
||||||
|
networking
|
||||||
|
automation
|
||||||
|
edge_systems
|
||||||
|
|
||||||
|
$ status
|
||||||
|
building_real_systems</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
|
|
||||||
<!-- ══════════════════════════════════════════════════════════════════════ NOC DASHBOARD
|
<section id="snapshot" class="section section-alt">
|
||||||
Full-width live dashboard area. All dynamic content driven by ../script.js
|
|
||||||
pulling noc-status.json. Sub-sections inside:
|
|
||||||
• Status command bar — live connection status dot + refresh badge (JS)
|
|
||||||
• Uptime pills bar — online/degraded/offline counts built by buildUptimePills()
|
|
||||||
• Metrics grid — 4 counters: Nodes, Services Online, Network Segments, Edge Systems
|
|
||||||
• Alert panel — top 3 priority systems, fed from JSON data feed
|
|
||||||
• Layer filter tabs — filter cards by stack layer (Compute, Storage, Network, etc.)
|
|
||||||
• System cards grid — one card per host/service, populated by JS from JSON
|
|
||||||
• Fallback message — shown if JSON feed is unavailable
|
|
||||||
• Stack info bar — tech stack credits: Python → JSON → JS, Grafana link, GitHub repo
|
|
||||||
• NOC Roadmap — 3 build-stage cards (Portfolio NOC, Auto Updates, Grafana — all ✅ Live)
|
|
||||||
══════════════════════════════════════════════════════════════════════════ -->
|
|
||||||
<div class="noc-full">
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
<div class="section-heading">
|
||||||
|
<p class="section-label">Environment</p>
|
||||||
|
<h2>Systems Snapshot</h2>
|
||||||
|
<p class="section-intro">
|
||||||
|
A quick look at the infrastructure and systems I’m actively building and documenting.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stats-grid">
|
||||||
|
<div class="stat-card">
|
||||||
|
<h3>12+</h3>
|
||||||
|
<p>Nodes</p>
|
||||||
|
<span>K3s cluster environment</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stat-card">
|
||||||
|
<h3>10+</h3>
|
||||||
|
<p>Services</p>
|
||||||
|
<span>Self-hosted stack</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stat-card">
|
||||||
|
<h3>4</h3>
|
||||||
|
<p>VLANs</p>
|
||||||
|
<span>Segmented network design</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stat-card">
|
||||||
|
<h3>2</h3>
|
||||||
|
<p>iGate Nodes</p>
|
||||||
|
<span>Home + mobile APRS</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="noc" class="section noc-dashboard">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-heading">
|
||||||
|
<p class="section-label">Ced’s NOC</p>
|
||||||
|
<h2>Live Systems Overview</h2>
|
||||||
|
<p class="section-intro">
|
||||||
|
Real infrastructure inventory from Ced’s HomeLab, K3s cluster, and APRS edge systems.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Status command bar -->
|
|
||||||
<div class="noc-command-bar">
|
<div class="noc-command-bar">
|
||||||
<span class="status-dot" id="noc-dot"></span>
|
<span class="status-dot"></span>
|
||||||
<span id="noc-status-text">Connecting to NOC feed...</span>
|
<span id="noc-status-text">Loading NOC status...</span>
|
||||||
<span class="noc-refresh-badge" id="noc-refresh-badge"></span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="noc-proof">
|
<p class="noc-proof">
|
||||||
Proxmox • K3s • TrueNAS • VLAN Segmentation • APRS RF Edge Systems
|
Built using real infrastructure: Proxmox • K3s • TrueNAS • VLAN segmentation • APRS RF Edge Systems
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Uptime summary pills (populated by JS) -->
|
|
||||||
<div class="uptime-bar" id="uptime-bar"></div>
|
|
||||||
|
|
||||||
<!-- Metrics -->
|
|
||||||
<div class="noc-metrics-grid">
|
<div class="noc-metrics-grid">
|
||||||
<div class="noc-metric">
|
<div class="noc-metric">
|
||||||
<h3 id="metric-nodes">--</h3>
|
<h3 id="metric-nodes">--</h3>
|
||||||
<p>Infrastructure Nodes</p>
|
<p>Infrastructure Nodes</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="noc-metric">
|
<div class="noc-metric">
|
||||||
<h3 id="metric-services">--</h3>
|
<h3 id="metric-services">--</h3>
|
||||||
<p>Services Online</p>
|
<p>Services Online</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="noc-metric">
|
<div class="noc-metric">
|
||||||
<h3 id="metric-vlans">--</h3>
|
<h3 id="metric-vlans">--</h3>
|
||||||
<p>Network Segments</p>
|
<p>Network Segments</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="noc-metric">
|
<div class="noc-metric">
|
||||||
<h3 id="metric-edge">--</h3>
|
<h3 id="metric-edge">--</h3>
|
||||||
<p>Edge Systems</p>
|
<p>Edge Systems</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Alert panel -->
|
|
||||||
<div class="noc-alert-panel">
|
<div class="noc-alert-panel">
|
||||||
<div class="noc-alert-header">
|
<div class="noc-alert-header">
|
||||||
<h3>🚨 Alert Panel</h3>
|
<h3>🚨 NOC Alert Panel</h3>
|
||||||
<span>Top 3 Priority Systems</span>
|
<span>Top 3 System Notes</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="noc-alert-list" class="noc-alert-list">
|
<div id="noc-alert-list" class="noc-alert-list">
|
||||||
<p class="noc-loading">Awaiting data feed...</p>
|
<p>Loading alerts...</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Layer filter tabs -->
|
<div id="noc-system-grid" class="noc-system-grid"></div>
|
||||||
<div class="layer-tabs" id="layer-tabs">
|
</div>
|
||||||
<button class="layer-tab active" data-layer="all">All Systems</button>
|
</section>
|
||||||
|
|
||||||
|
<section id="about" class="section">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-heading">
|
||||||
|
<p class="section-label">About</p>
|
||||||
|
<h2>Hands-on systems builder with a digital infrastructure mindset</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- System cards grid -->
|
<div class="content-grid">
|
||||||
<div id="noc-system-grid" class="noc-system-grid"></div>
|
<div class="card">
|
||||||
|
<p>
|
||||||
|
I’m a technical professional focused on digital systems, infrastructure, networking,
|
||||||
|
automation, and hands-on system integration. I enjoy building systems that are practical,
|
||||||
|
reliable, and well documented — from homelab services and dashboards to Raspberry Pi
|
||||||
|
deployments, APRS iGates, and troubleshooting workflows.
|
||||||
|
</p>
|
||||||
|
|
||||||
<!-- Fallback -->
|
<p>
|
||||||
<div id="noc-fallback" class="noc-fallback" style="display:none;">
|
My background blends field engineering, industrial technology, software-oriented thinking,
|
||||||
<p class="noc-fallback-msg">
|
and infrastructure problem solving. I’m especially interested in projects that connect the
|
||||||
NOC feed unavailable from this context systems run locally.<br/>
|
physical and digital worlds through monitoring, networking, automation, and resilient design.
|
||||||
Data updates when the local pipeline pushes a fresh noc-status.json.
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h3>Core Focus Areas</h3>
|
||||||
|
|
||||||
|
<ul class="clean-list">
|
||||||
|
<li>Digital systems and infrastructure</li>
|
||||||
|
<li>Linux systems and service management</li>
|
||||||
|
<li>Networking, VLANs, failover, and connectivity troubleshooting</li>
|
||||||
|
<li>Raspberry Pi and edge-device deployments</li>
|
||||||
|
<li>Documentation, process building, and reproducible project design</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="projects" class="section section-alt">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-heading">
|
||||||
|
<p class="section-label">Projects</p>
|
||||||
|
<h2>🔧 Infrastructure & Systems Projects</h2>
|
||||||
|
<p class="section-intro">
|
||||||
|
These projects are built around real systems, networking, Linux services, edge devices,
|
||||||
|
and practical documentation.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Stack info bar -->
|
<div class="projects-grid">
|
||||||
<div class="noc-stack-bar">
|
<article class="project-card featured-project">
|
||||||
<span><strong>Stack:</strong> Python health checks → JSON → JS dashboard</span>
|
<div class="project-top">
|
||||||
<span><strong>Live:</strong> <a href="https://grafana.cedshomelab.com" target="_blank" rel="noopener noreferrer">Grafana + Prometheus</a></span>
|
<h3>🧠 Ced’s HomeLab Infrastructure</h3>
|
||||||
<span><strong>Source:</strong>
|
<span class="status-pill">Flagship</span>
|
||||||
<a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer">
|
</div>
|
||||||
github/ceds-homelab
|
|
||||||
|
<p class="tags">Infrastructure • Networking • Virtualization • Monitoring • Self-Hosting</p>
|
||||||
|
|
||||||
|
<p class="project-impact">
|
||||||
|
Designed as a practical infrastructure environment for networking, monitoring,
|
||||||
|
service hosting, and documentation.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Personal infrastructure lab focused on network segmentation, virtualization,
|
||||||
|
self-hosted services, monitoring, and architecture documentation.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="clean-list">
|
||||||
|
<li>VLAN segmentation and network design</li>
|
||||||
|
<li>Proxmox virtualization</li>
|
||||||
|
<li>Self-hosted services and monitoring</li>
|
||||||
|
<li>System architecture documentation</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer" class="project-link">
|
||||||
|
View Project →
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</article>
|
||||||
|
|
||||||
|
<article class="project-card">
|
||||||
|
<div class="project-top">
|
||||||
|
<h3>☸️ K3s Kubernetes Cluster</h3>
|
||||||
|
<span class="status-pill">Infrastructure</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="tags">Kubernetes • Containers • Linux • Infrastructure • Automation</p>
|
||||||
|
|
||||||
|
<p class="project-impact">
|
||||||
|
Built to simulate distributed infrastructure, container orchestration, and scalable service deployment.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Multi-node K3s cluster built for container orchestration, service deployment,
|
||||||
|
and infrastructure experimentation.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="clean-list">
|
||||||
|
<li>Multi-node cluster setup</li>
|
||||||
|
<li>Containerized workloads</li>
|
||||||
|
<li>Service deployment</li>
|
||||||
|
<li>Infrastructure automation</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<a href="https://github.com/ced4568/ced-k3s-homelab" target="_blank" rel="noopener noreferrer" class="project-link">
|
||||||
|
View Project →
|
||||||
|
</a>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="project-card">
|
||||||
|
<div class="project-top">
|
||||||
|
<h3>📡 APRS iGate System</h3>
|
||||||
|
<span class="status-pill">Edge System</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="tags">RF • Linux • Raspberry Pi • Networking • APRS-IS • Edge Systems</p>
|
||||||
|
|
||||||
|
<p class="project-impact">
|
||||||
|
Bridges RF communication into IP-based infrastructure using Linux, Direwolf, and APRS-IS.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Operational dual-node APRS iGate system built with Raspberry Pi, Direwolf, APRS-IS,
|
||||||
|
RF radios, HomeLab network integration, and planned mobile GPS support.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="clean-list">
|
||||||
|
<li>RF packet decoding with Direwolf</li>
|
||||||
|
<li>APRS-IS uplink verified on aprs.fi</li>
|
||||||
|
<li>HomeLab WiFi + mobile hotspot failover</li>
|
||||||
|
<li>Mobile build includes ETH-USB-HUB-BOX expansion</li>
|
||||||
|
<li>Documented configs, architecture, and troubleshooting</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<a href="https://github.com/ced4568/ceds-aprs-igate" target="_blank" rel="noopener noreferrer" class="project-link">
|
||||||
|
View Project →
|
||||||
|
</a>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="section noc-section">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-heading">
|
||||||
|
<p class="section-label">NOC Roadmap</p>
|
||||||
|
<h2>📊 Ced’s NOC Vision</h2>
|
||||||
|
<p class="section-intro">
|
||||||
|
Ced’s NOC is being built as a staged monitoring and systems-visibility platform for HomeLab,
|
||||||
|
Kubernetes, edge devices, and future production-style dashboards.
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- NOC Roadmap -->
|
<div class="noc-grid">
|
||||||
<div class="noc-roadmap">
|
<div class="noc-card">
|
||||||
<p class="section-label">// noc roadmap</p>
|
<h3>✅ Current: Portfolio NOC</h3>
|
||||||
<h2 class="section-h2" style="font-family:var(--font-display);font-size:1.6rem;margin:0 0 1.25rem;">Build Stages</h2>
|
<p>
|
||||||
|
JSON-driven dashboard that displays real inventory, online/offline checks, service labels,
|
||||||
|
latency, and last-check timestamps.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="noc-grid">
|
<div class="noc-card">
|
||||||
<div class="noc-card">
|
<h3>⚙️ Next: Automated Data Updates</h3>
|
||||||
<div class="noc-card-badge done">✅ Live</div>
|
<p>
|
||||||
<h3>Portfolio NOC</h3>
|
Scheduled local script updates will refresh system status data automatically and push dashboard-ready
|
||||||
<p>
|
JSON into the portfolio.
|
||||||
JSON-driven dashboard showing real inventory, online/offline checks,
|
</p>
|
||||||
service labels, latency, and last check timestamps across 18 nodes and 28 services.
|
</div>
|
||||||
</p>
|
|
||||||
</div>
|
<div class="noc-card">
|
||||||
<div class="noc-card">
|
<h3>📈 Future: Grafana + Prometheus</h3>
|
||||||
<div class="noc-card-badge done">✅ Live</div>
|
<p>
|
||||||
<h3>Automated Data Updates</h3>
|
Deeper monitoring stack for Proxmox, TrueNAS, K3s, Raspberry Pi nodes, Uptime Kuma,
|
||||||
<p>
|
and APRS edge systems.
|
||||||
Cron-driven scripts running on Biggie auto-refresh system status every 5 minutes
|
</p>
|
||||||
and push dashboard ready JSON to GitHub Pages with no manual updates required.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="noc-card">
|
|
||||||
<div class="noc-card-badge done">✅ Live</div>
|
|
||||||
<h3>Grafana + Prometheus</h3>
|
|
||||||
<p>
|
|
||||||
Full observability stack running across Proxmox, TrueNAS, K3s nodes, Uptime Kuma,
|
|
||||||
and APRS edge systems with real time metrics ingestion and live alerting pipelines.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
|
|
||||||
|
<section id="resume" class="section">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-heading">
|
||||||
|
<p class="section-label">Resume Snapshot</p>
|
||||||
|
<h2>Technical experience that bridges field work and digital systems</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content-grid">
|
||||||
|
<div class="card">
|
||||||
|
<h3>What I Bring</h3>
|
||||||
|
|
||||||
|
<ul class="clean-list">
|
||||||
|
<li>Industrial and field-service technical experience</li>
|
||||||
|
<li>Linux, Raspberry Pi, and systems administration work</li>
|
||||||
|
<li>Networking, connectivity, and troubleshooting depth</li>
|
||||||
|
<li>Documentation, process building, and reproducible project design</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h3>Current Direction</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
I’m positioning myself around digital systems, infrastructure, networking,
|
||||||
|
automation, and technical operations — especially roles where hands-on problem
|
||||||
|
solving and system integration matter.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
More detailed resume content will be added here as the portfolio grows.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="section section-alt personal-section">
|
||||||
|
<div class="container personal-grid">
|
||||||
|
<div class="personal-image-wrap">
|
||||||
|
<img
|
||||||
|
src="assets/images/lakephotopinkpants.png"
|
||||||
|
alt="Chase Dumphord standing by a fence with a lake view in the background"
|
||||||
|
class="personal-image"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<p class="section-label">Personal Note</p>
|
||||||
|
<h2>Technical, curious, and always building</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Outside of work, I enjoy electronics, self-hosting, coding, drones, radio, and
|
||||||
|
hands-on technical projects that push me to learn something useful. That curiosity
|
||||||
|
carries directly into the way I build and document systems.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="contact" class="section">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-heading">
|
||||||
|
<p class="section-label">Contact</p>
|
||||||
|
<h2>Let’s connect</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-grid">
|
||||||
|
<div class="card">
|
||||||
|
<h3>Contact Info</h3>
|
||||||
|
|
||||||
|
<p>Email: <a href="mailto:[email protected]">[email protected]</a></p>
|
||||||
|
<p>Phone: <a href="tel:+16622142231">662-214-2231</a></p>
|
||||||
|
<p>Location: Oxford, MS</p>
|
||||||
|
<p>
|
||||||
|
GitHub:
|
||||||
|
<a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">github.com/ced4568</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h3>What I’m Open To</h3>
|
||||||
|
|
||||||
|
<ul class="clean-list">
|
||||||
|
<li>Digital systems and infrastructure roles</li>
|
||||||
|
<li>Networking and technical operations work</li>
|
||||||
|
<li>Automation and monitoring projects</li>
|
||||||
|
<li>Projects involving hardware + software integration</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- ══════════════════════════════════════════════════════════════════════ FOOTER
|
|
||||||
Minimal single-row footer: copyright (year injected by data-year JS) + back-to-top link.
|
|
||||||
══════════════════════════════════════════════════════════════════════════ -->
|
|
||||||
<footer class="site-footer">
|
<footer class="site-footer">
|
||||||
<div class="container footer-content">
|
<div class="container footer-content">
|
||||||
<p>© <span data-year></span> Chase Dumphord — <span class="footer-mono">noc.chasedumphord.com</span></p>
|
<p>© <span data-year></span> Chase Dumphord</p>
|
||||||
<a href="#top" class="back-to-top">↑ back to top</a>
|
<a href="#top" class="back-to-top">Back to top ↑</a>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- ══════════════════════════════════════════════════════════════════════ SCRIPTS
|
<script src="script.js"></script>
|
||||||
1. ../script.js — shared portfolio script (NOC JSON fetch, card rendering, year injection).
|
|
||||||
2. Inline NOC JS — layer filter tabs (buildLayerTabs, filterByLayer) and
|
|
||||||
uptime pill builder (buildUptimePills). Uses MutationObserver on the system grid
|
|
||||||
to rebuild tabs/pills whenever the JS card renderer populates the DOM.
|
|
||||||
══════════════════════════════════════════════════════════════════════════ -->
|
|
||||||
<!-- Shared script (up one level) -->
|
|
||||||
<script src="../script.js"></script>
|
|
||||||
|
|
||||||
<!-- NOC page extras — layer filter tabs + uptime pills -->
|
|
||||||
<script>
|
|
||||||
// ── Layer filter tabs ──────────────────────────────────────────
|
|
||||||
let allSystems = [];
|
|
||||||
let activeLayer = "all";
|
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
|
||||||
const observer = new MutationObserver(() => {
|
|
||||||
const cards = document.querySelectorAll(".noc-system-card");
|
|
||||||
if (cards.length > 0) {
|
|
||||||
buildLayerTabs();
|
|
||||||
buildUptimePills();
|
|
||||||
reapplyFilter();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const grid = document.getElementById("noc-system-grid");
|
|
||||||
if (grid) observer.observe(grid, { childList: true });
|
|
||||||
});
|
|
||||||
|
|
||||||
function reapplyFilter() {
|
|
||||||
if (activeLayer !== "all") {
|
|
||||||
document.querySelectorAll(".noc-system-card").forEach(card => {
|
|
||||||
const layerEl = card.querySelector(".noc-system-top span:last-child");
|
|
||||||
card.style.display =
|
|
||||||
layerEl && layerEl.textContent.trim() === activeLayer ? "" : "none";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildLayerTabs() {
|
|
||||||
const cards = document.querySelectorAll(".noc-system-card");
|
|
||||||
const layers = new Set(["all"]);
|
|
||||||
|
|
||||||
cards.forEach(card => {
|
|
||||||
const layerEl = card.querySelector(".noc-system-top span:last-child");
|
|
||||||
if (layerEl) layers.add(layerEl.textContent.trim());
|
|
||||||
});
|
|
||||||
|
|
||||||
const tabContainer = document.getElementById("layer-tabs");
|
|
||||||
tabContainer.innerHTML = "";
|
|
||||||
|
|
||||||
layers.forEach(layer => {
|
|
||||||
const btn = document.createElement("button");
|
|
||||||
btn.className = "layer-tab" + (layer === activeLayer ? " active" : "");
|
|
||||||
btn.dataset.layer = layer;
|
|
||||||
btn.textContent = layer === "all" ? "All Systems" : layer;
|
|
||||||
btn.addEventListener("click", () => filterByLayer(layer, btn));
|
|
||||||
tabContainer.appendChild(btn);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function filterByLayer(layer, activeBtn) {
|
|
||||||
activeLayer = layer;
|
|
||||||
document.querySelectorAll(".layer-tab").forEach(t => t.classList.remove("active"));
|
|
||||||
activeBtn.classList.add("active");
|
|
||||||
|
|
||||||
document.querySelectorAll(".noc-system-card").forEach(card => {
|
|
||||||
if (layer === "all") {
|
|
||||||
card.style.display = "";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const layerEl = card.querySelector(".noc-system-top span:last-child");
|
|
||||||
card.style.display =
|
|
||||||
layerEl && layerEl.textContent.trim() === layer ? "" : "none";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildUptimePills() {
|
|
||||||
const bar = document.getElementById("uptime-bar");
|
|
||||||
if (!bar) return;
|
|
||||||
|
|
||||||
const cards = document.querySelectorAll(".noc-system-card");
|
|
||||||
let online = 0, warning = 0, offline = 0;
|
|
||||||
|
|
||||||
cards.forEach(card => {
|
|
||||||
const dot = card.querySelector(".mini-status");
|
|
||||||
if (!dot) return;
|
|
||||||
if (dot.classList.contains("online")) online++;
|
|
||||||
else if (dot.classList.contains("warning")) warning++;
|
|
||||||
else if (dot.classList.contains("offline")) offline++;
|
|
||||||
});
|
|
||||||
|
|
||||||
bar.innerHTML = `
|
|
||||||
<span class="uptime-pill online">● ${online} Online</span>
|
|
||||||
${warning > 0 ? `<span class="uptime-pill warning">● ${warning} Degraded</span>` : ""}
|
|
||||||
${offline > 0 ? `<span class="uptime-pill offline">● ${offline} Offline</span>` : ""}
|
|
||||||
<span class="uptime-pill">${online + warning + offline} Total Systems</span>
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -35,12 +35,7 @@ async function loadNocStatus() {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Cache-bust to always get fresh data
|
// Cache-bust to always get fresh data
|
||||||
// Use absolute URL when on NOC subdomain, relative when on main portfolio
|
const res = await fetch(`data/noc-status.json?t=${Date.now()}`);
|
||||||
const nocDataUrl = window.location.hostname === 'noc.chasedumphord.com'
|
|
||||||
? `https://chasedumphord.com/data/noc-status.json?t=${Date.now()}`
|
|
||||||
: `data/noc-status.json?t=${Date.now()}`;
|
|
||||||
|
|
||||||
const res = await fetch(nocDataUrl);
|
|
||||||
|
|
||||||
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
||||||
|
|
||||||
@@ -54,9 +49,7 @@ async function loadNocStatus() {
|
|||||||
dot.className = "status-dot live";
|
dot.className = "status-dot live";
|
||||||
}
|
}
|
||||||
if (statusText) {
|
if (statusText) {
|
||||||
const d = new Date(data.lastUpdated);
|
statusText.textContent = `${data.nocName} — ${data.status} — Last updated: ${data.lastUpdated}`;
|
||||||
const formatted = d.toLocaleString('en-US', { month: 'long', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true });
|
|
||||||
statusText.textContent = `${data.nocName} — ${data.status} — Last updated: ${formatted}`;
|
|
||||||
}
|
}
|
||||||
if (badge) {
|
if (badge) {
|
||||||
badge.textContent = `Auto-refresh: 30s`;
|
badge.textContent = `Auto-refresh: 30s`;
|
||||||
@@ -95,6 +88,7 @@ async function loadNocStatus() {
|
|||||||
</div>
|
</div>
|
||||||
<h3>${system.name}</h3>
|
<h3>${system.name}</h3>
|
||||||
<p>${system.type}</p>
|
<p>${system.type}</p>
|
||||||
|
<code>${system.address}</code>
|
||||||
<div class="system-meta">
|
<div class="system-meta">
|
||||||
<small>Status: ${system.status}</small>
|
<small>Status: ${system.status}</small>
|
||||||
<small>Latency: ${system.latency || "N/A"}</small>
|
<small>Latency: ${system.latency || "N/A"}</small>
|
||||||
@@ -225,7 +219,7 @@ async function loadGithubRepos() {
|
|||||||
container.innerHTML = `
|
container.innerHTML = `
|
||||||
<div class="repo-loading">
|
<div class="repo-loading">
|
||||||
<p class="noc-loading">
|
<p class="noc-loading">
|
||||||
Could not load repositories.
|
Could not load repositories.
|
||||||
<a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">
|
<a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">
|
||||||
View on GitHub →
|
View on GitHub →
|
||||||
</a>
|
</a>
|
||||||
@@ -236,7 +230,6 @@ async function loadGithubRepos() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build the alert panel from system data
|
|
||||||
function renderAlerts(systems, alertList) {
|
function renderAlerts(systems, alertList) {
|
||||||
const scored = systems
|
const scored = systems
|
||||||
.map((sys) => {
|
.map((sys) => {
|
||||||
@@ -246,7 +239,7 @@ function renderAlerts(systems, alertList) {
|
|||||||
let score = 0;
|
let score = 0;
|
||||||
if (sev.includes("critical") || status.includes("offline")) score = 3;
|
if (sev.includes("critical") || status.includes("offline")) score = 3;
|
||||||
else if (sev.includes("degraded")) score = 2;
|
else if (sev.includes("degraded")) score = 2;
|
||||||
else if (sev.includes("unknown")) score = 1;
|
else if (sev.includes("unknown")) score = 1;
|
||||||
|
|
||||||
return { ...sys, score };
|
return { ...sys, score };
|
||||||
})
|
})
|
||||||
@@ -277,4 +270,4 @@ function renderAlerts(systems, alertList) {
|
|||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
}).join("");
|
}).join("");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ SYSTEMS = [
|
|||||||
"type": "Virtualization Platform",
|
"type": "Virtualization Platform",
|
||||||
"host": "10.10.30.250",
|
"host": "10.10.30.250",
|
||||||
"port": 8006,
|
"port": 8006,
|
||||||
"display_name": "BigWorld",
|
"address": "10.10.30.250:8006",
|
||||||
"layer": "Core Infrastructure",
|
"layer": "Core Infrastructure",
|
||||||
"label": "Hypervisor"
|
"label": "Hypervisor"
|
||||||
},
|
},
|
||||||
@@ -21,7 +21,7 @@ SYSTEMS = [
|
|||||||
"type": "Storage Platform",
|
"type": "Storage Platform",
|
||||||
"host": "10.10.30.143",
|
"host": "10.10.30.143",
|
||||||
"port": 80,
|
"port": 80,
|
||||||
"display_name": "TrueNAS",
|
"address": "10.10.30.143",
|
||||||
"layer": "Storage",
|
"layer": "Storage",
|
||||||
"label": "NAS"
|
"label": "NAS"
|
||||||
},
|
},
|
||||||
@@ -30,7 +30,7 @@ SYSTEMS = [
|
|||||||
"type": "Reverse Proxy",
|
"type": "Reverse Proxy",
|
||||||
"host": "10.10.30.210",
|
"host": "10.10.30.210",
|
||||||
"port": 81,
|
"port": 81,
|
||||||
"display_name": "NPM",
|
"address": "10.10.30.210:81",
|
||||||
"layer": "Access Layer",
|
"layer": "Access Layer",
|
||||||
"label": "Proxy"
|
"label": "Proxy"
|
||||||
},
|
},
|
||||||
@@ -39,7 +39,7 @@ SYSTEMS = [
|
|||||||
"type": "Service Dashboard",
|
"type": "Service Dashboard",
|
||||||
"host": "10.10.30.61",
|
"host": "10.10.30.61",
|
||||||
"port": 4000,
|
"port": 4000,
|
||||||
"display_name": "Dashy",
|
"address": "10.10.30.61:4000",
|
||||||
"layer": "Dashboard",
|
"layer": "Dashboard",
|
||||||
"label": "Portal"
|
"label": "Portal"
|
||||||
},
|
},
|
||||||
@@ -48,7 +48,7 @@ SYSTEMS = [
|
|||||||
"type": "Media Service",
|
"type": "Media Service",
|
||||||
"host": "10.10.30.143",
|
"host": "10.10.30.143",
|
||||||
"port": 30013,
|
"port": 30013,
|
||||||
"display_name": "PrimeStation",
|
"address": "10.10.30.143:30013",
|
||||||
"layer": "Application Service",
|
"layer": "Application Service",
|
||||||
"label": "App"
|
"label": "App"
|
||||||
},
|
},
|
||||||
@@ -57,7 +57,7 @@ SYSTEMS = [
|
|||||||
"type": "Kubernetes API",
|
"type": "Kubernetes API",
|
||||||
"host": "10.10.30.72",
|
"host": "10.10.30.72",
|
||||||
"port": 6443,
|
"port": 6443,
|
||||||
"display_name": "k3s-django-1",
|
"address": "10.10.30.72:6443",
|
||||||
"layer": "Compute Cluster",
|
"layer": "Compute Cluster",
|
||||||
"label": "Cluster"
|
"label": "Cluster"
|
||||||
},
|
},
|
||||||
@@ -66,7 +66,7 @@ SYSTEMS = [
|
|||||||
"type": "RF Edge Gateway",
|
"type": "RF Edge Gateway",
|
||||||
"host": "10.10.30.129",
|
"host": "10.10.30.129",
|
||||||
"port": 8001,
|
"port": 8001,
|
||||||
"display_name": "KJ5JCO-10 iGate",
|
"address": "KJ5JCO-10 / Direwolf KISS 8001",
|
||||||
"layer": "Edge / RF",
|
"layer": "Edge / RF",
|
||||||
"label": "iGate"
|
"label": "iGate"
|
||||||
},
|
},
|
||||||
@@ -75,7 +75,7 @@ SYSTEMS = [
|
|||||||
"type": "APRS Internet Service",
|
"type": "APRS Internet Service",
|
||||||
"host": "noam.aprs2.net",
|
"host": "noam.aprs2.net",
|
||||||
"port": 14580,
|
"port": 14580,
|
||||||
"display_name": "noam.aprs2.net",
|
"address": "noam.aprs2.net:14580",
|
||||||
"layer": "Edge / RF",
|
"layer": "Edge / RF",
|
||||||
"label": "External"
|
"label": "External"
|
||||||
}
|
}
|
||||||
@@ -141,7 +141,7 @@ def main():
|
|||||||
systems.append({
|
systems.append({
|
||||||
"name": system["name"],
|
"name": system["name"],
|
||||||
"type": system["type"],
|
"type": system["type"],
|
||||||
"address": system["display_name"],
|
"address": system["address"],
|
||||||
"status": status,
|
"status": status,
|
||||||
"severity": severity_from_status(online, latency),
|
"severity": severity_from_status(online, latency),
|
||||||
"layer": system["layer"],
|
"layer": system["layer"],
|
||||||
|
|||||||
@@ -413,7 +413,6 @@ a:hover { text-decoration: underline; }
|
|||||||
var(--bg);
|
var(--bg);
|
||||||
border-top: 1px solid var(--line);
|
border-top: 1px solid var(--line);
|
||||||
border-bottom: 1px solid var(--line);
|
border-bottom: 1px solid var(--line);
|
||||||
/* subtle scan-line texture */
|
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -932,31 +931,31 @@ a:hover { text-decoration: underline; }
|
|||||||
.hero-badges {
|
.hero-badges {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: 0.6rem;
|
gap: 0.5rem;
|
||||||
margin-top: 1.25rem;
|
margin-top: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.badge-link {
|
.badge-link {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 0.5rem;
|
gap: 0.35rem;
|
||||||
padding: 0.5rem 0.9rem;
|
padding: 0.3rem 0.65rem;
|
||||||
border-radius: 999px;
|
border-radius: 999px;
|
||||||
font-family: var(--font-mono);
|
font-family: var(--font-mono);
|
||||||
font-size: 0.78rem;
|
font-size: 0.72rem;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
border: 1px solid var(--line);
|
border: 1px solid var(--line);
|
||||||
transition: background 0.15s, border-color 0.15s, transform 0.15s;
|
transition: background 0.15s, border-color 0.15s, transform 0.15s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.badge-link:hover {
|
.badge-link:hover {
|
||||||
transform: translateY(-2px);
|
transform: translateY(-1px);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.badge-icon {
|
.badge-icon {
|
||||||
width: 14px;
|
width: 12px;
|
||||||
height: 14px;
|
height: 12px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1122,7 +1121,7 @@ a:hover { text-decoration: underline; }
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ═══════════════════════════════
|
/* ═══════════════════════════════
|
||||||
RESPONSIVE ADDITIONS
|
RESPONSIVE
|
||||||
═══════════════════════════════ */
|
═══════════════════════════════ */
|
||||||
@media (max-width: 1050px) {
|
@media (max-width: 1050px) {
|
||||||
.projects-grid,
|
.projects-grid,
|
||||||
|
|||||||