diff --git a/assets/favicons/ced-app-icon.png b/assets/favicons/ced-app-icon.png new file mode 100644 index 00000000..506fcc04 Binary files /dev/null and b/assets/favicons/ced-app-icon.png differ diff --git a/assets/favicons/ced-favicon-16x16.png b/assets/favicons/ced-favicon-16x16.png new file mode 100644 index 00000000..7f69ab8b Binary files /dev/null and b/assets/favicons/ced-favicon-16x16.png differ diff --git a/assets/favicons/ced-favicon-192x192.png b/assets/favicons/ced-favicon-192x192.png new file mode 100644 index 00000000..5eb35e66 Binary files /dev/null and b/assets/favicons/ced-favicon-192x192.png differ diff --git a/assets/favicons/ced-favicon-32x32.png b/assets/favicons/ced-favicon-32x32.png new file mode 100644 index 00000000..0c229935 Binary files /dev/null and b/assets/favicons/ced-favicon-32x32.png differ diff --git a/assets/favicons/ced-favicon-512x512.png b/assets/favicons/ced-favicon-512x512.png new file mode 100644 index 00000000..ed9799e4 Binary files /dev/null and b/assets/favicons/ced-favicon-512x512.png differ diff --git a/assets/favicons/ced-favicon-64x64.png b/assets/favicons/ced-favicon-64x64.png new file mode 100644 index 00000000..bae4a407 Binary files /dev/null and b/assets/favicons/ced-favicon-64x64.png differ diff --git a/assets/favicons/favicon.ico b/assets/favicons/favicon.ico new file mode 100644 index 00000000..dea14b56 Binary files /dev/null and b/assets/favicons/favicon.ico differ diff --git a/assets/images/ChaseD_Resume.pdf b/assets/images/ChaseD_Resume.pdf new file mode 100644 index 00000000..5a3ae1c2 --- /dev/null +++ b/assets/images/ChaseD_Resume.pdf @@ -0,0 +1,93 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +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 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260502182436+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260502182436+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2874 +>> +stream +Gb!SmgN)%.&q0LUoM\eYQ"42Il>79h:,K5HN29,52ZZfUXG^Abg+#m'YpC#r!/IIJ?YG(G5Bc]]9E79#iV^h&gO]/%Cp3<&9^cDm1OSh4ObE"dP_(XKA%$1nq$/=7lU]0=FP[,?I5*RYggL!F5JEXimsP-(O;hS]9K0`Qh8s+WaTj0l.NDqXd(VX9Nmg=qDlpK`FQXnP>:jc1>E#IkN4>_o4)=:DNY?LT4qbB,12c5#-h_]__&Kjo>$b-39+X*8e3.e1-d)<8#a#qL[&p"5=l0]l!i)%686%6LrUm;(:U1\@7''Ma(6+mt`C1%9h2nXr,=SWRRF3Uem#@-B:OIOl&40&4YNW\&>lU]1OcYOe*@eZtJ=qp=%n;,gWU&n(6@PER/LtKh_PsJ@Xkb('<]H[QPTm,G[[dCJ#*6g@;8%PNV*_qu,YhI.shXO4UIJ%q"7ScP]AK)HS"[.t1K=_=JWq7LUl4KW4XL[B76G]n>fu+3tpOWcZ%2"FS6;+g;!,mkj.m"dUuU"74D)]b0lWca@%`d&mCc;Y9o!W5I-Q/HAtJVE<*3J`YjZGn9(OKc)s0QLE\/g8i4]>2i#,$(pSUr4KRCH+CbbLQJD.@&n,&[+L[JnPgWcu)5Y`JSSZ44N#WF-^nkcZk88&V&4C*1jAGBCT_:r*Jlh10]]>^3YlW,B0305Oqog$*LA=WqY>-krLqa>WdgE'^PV^R?A0MQpcb.O$^sQVWN=%KTl!K?J[j^N\\\U1/2J8aKZhDr6^5EDVf7(0io[9*RF@!`aA1HE-DIJ>4NS&\9F$=%n]5_ZBD?@\HicKr^SE;mH[9/aG?l2+p1XWZN;F&_$s/g:iVf]A;%HY"\juSbq;gT@_.4kbdnA-YU&fE61_lP5#]:`WQY_^RYUedeb;K`T+J#aa'<-25N4l@'D/DTS@@d1-PDX=Gk1[OI_:fnXLTRo%n\>>ui[*@$R]FcIBJ?>VMYAolQq%\)6rZ7V9PcLKn!NRGFEq35Z8&\FoESVuk-JrQS@K+$2B]d0rSCprNo>Vt).J-,+'qnijq=plfb["\-a5*9R%6i(K7Qo5*])94kh9(M*0%)*%*[8iYc,-GjW5_^,/iCd4-7/U30aPPr"Jr]jlM/_dRfYFM,mVF8CLCnX@f>QYQg_Qt0kDfiRnEmLhf-2e$0Jp$7,6ZeG5*ld.l+GsMrVJ3PaRD8m?+@j-n=p=;CW&2D9=d*>AJm(/L,>E1\Dct,YsI3^\MCT"RoUs,>oK2Ss_riek)\^Fl0VQ5Z14]m)mlM1(r@OqJp[8V8':]Ds>@(-*49eJu.U9\nO)NDZF0S+t\jMNX=O^=j6/p\Fg&s^S;K4"oE$Z3J@W@@PR4cGWN=IZ45ESpQMRn#=Cn]njV@l4JPI]H@"DKPZ)+o5t'T6F\d*)V_h5]8re'7N42Aok\&O6(6F`q8*W_SkB7WOo;9&]Q6''"UTnkMWNQGO]]au^JAlXE;7quIh:$bru;2@Gek:t._SDm%D61F1I?;&J+M!.f2@if'd+Qq\[\+:KVrkXj"@L_FRP@\mT^66aSFohCKUWL-U:I'K4fO/Jl-_*Xu`,a2>A78mtB;M>.AMD^Uj"0"PACQU7B#T*mDj&?/mnH,,pAs%>7kM'/:nB_:YVX.b''3B>npDf\MBL9_K54:,"_CnSn<^tdDbg+cf&X!RS(m\lm6_+JFJ0u`[\fK6"HMg:Ca+lO,5eBTjA0QkP0mXk>lphT'ao.5hf?L7b3f"2h^*76PB:ouY9nSQX1NmD+!itj"p6DrI=r#+M4im2W.qh.!QkGh>?]m!%m*+*a0f8KD?DZq*,'lgAEkIh<3pJCB\_-#rV>\"OGR$Im81F(g)4eo`Q^&SDssaLO*%_+bVH/TG(6OV[nmTG];;q"#'I2tUPY8%OWi2ZWa%F@@?iM<&p>u#1QYd@e(B#bOB/@&VSAEuW&,VS]cdi#Ah#nGNLEcSL/3NM[^)hEF6'VE)[UF``?S#k+dN$"BK+d4sRj[@B34L`SI"fS;BoSo%Kj]R)%\\WGkh>GID_VnO]8UN;[[k,Upb>bHiS,aD=/Lk>X1BZb2k(,;73,q7-HJN)!I0NqVRNXO/6K$QH-#"-$^iJcoCXN-erJ?/3_ck`Y>&>qVX2Pmp-r)H\eps?"HOeOK@Q_&\aBKV:p:Y2;k9qq$K4%20oZ&qUa9nDL753^el`=@-V[4])KI)J6%iSCibra)dKgu''c0u?o;7nRQnaeE8Ubm5fs!Ybo+ErUF*+S;Pa8"B8kV-4=!gnu#WtT7[(;b]HF]5;:p#?:Jk1\g[boe9l;If=`7H5ANrB*ZT5cJOj3u8[Jqendstream +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2700 +>> +stream +Gb!TY>C5)6(5D;L/(R^EAl!An2GC:[8QquO23?MgU,TrT5uZJ-82^eSIP8e[aFUp>nhcgm:BRj*Q9MGDY(Q+lNB`I!*G5@B@lQSn^iqBC.a#Hj,5'jm(9]A_\^o6!T,o^`B,#+_!M%;79%3p,pOTFifX]RH?i0@^T0-n@=jGaQ/XXH2pR5Ac5@7@!O5Y.V0?]Q))3[Wi1MKM@<+W9)M+5r"e[eXn"p:h7'lp)HVcAPu:Qp:=W$oP3#W`86un2N+Rp&.h*k(16I2mW01bkR?4)-#SRB,k%qYAmaC/[5GE-7oN(,Lj##U"g9&S%&pi%"BMS,cf%=Cc,<60f^RW5;Dae.4-V,6Rd7VDkPIR7/[3E_]`![DZ3G3=^O@.@IICcN25=%O0g.BtgnVF5e5YnmN)lNjp76[UW+n;[$AOPQ$#>5?SgmKt+iB1u*3T9CiV-aq,TlPj_$&_H89*gfJO8T+@N62Rh(s<2^4OXD2G_p)Lk]d3[Mrt,/hE=e5;JV:"qMq]A'=D"g:IVCE5h8I]nru?Or0)"cheZ^u9Sm#EHP%_m3sC-P^7`%(CF*EGO<>4*jQX_!"<:($"C2_]YHq-C<Y-tHQ9Ii,N,fGE+-^@hU&M1]X>@bf>bD#0*7"#-:Cq)_/e!6^+^D^Lg*%Z@DJ\!<@>BVWFaa)Ka^@5GS'hXaGZd,Dl[`XAo]:'7K!61Xe8rS5\*9`Ck)uWE1KHP?>tOQF`iE,l]I%)l*aZk*rPQ#eN;sc;rF+$+gV)C$cO^imU(Z@((d7[phH!JMY5O6N*mitT$8*q9R["JTBhKE%ml"EGFG2t,3c6V/R&J\+T`=rlSqgF+iQrM,I?TYo5e_NHL#fu(I6!JR,.?JK_6@3V`D"@kMF@a'lX>[0Y9s,76S,s!Zq^M!3\umq:*qRTL9g/0kDqIQJ`u50/42LALIFX*36eY+GNZ:"MF_#OEM.6Zht]-46>;ohfPdEI)g4&f[HlUZiXTFX?irY!E)W-oj&;5*2JJmEODXr=f"^Ds3nAq*%&7bJND\!q7[VJ?"BE9@NXWek3n61;FB])HbY$WAQ.$+ahnGPTn39HN`+^PP)9.P-Pc>9@UkE`=b.MXfkXK5`(F1BgO.Dcf;n4kN!8U8tF;hSB1B1c23,]:RYoJPheD4RBsVVc0P?mo[aCF.IV0CY?:dBnfpCM3o?,`9os9h;-dp<%.K>momU.A@qn!RHCQI(s4RMaf;bpmST@?sJp?t]fh'OLj&?3JaWK-FOh6,5^Z/!c-rh5)<.a>X+h+L1FmscnqLjf~>endstream +endobj +xref +0 11 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000514 00000 n +0000000708 00000 n +0000000776 00000 n +0000001056 00000 n +0000001121 00000 n +0000004086 00000 n +trailer +<< +/ID +[<451d734656bfda21b00c95ac21a36c22><451d734656bfda21b00c95ac21a36c22>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 7 0 R +/Root 6 0 R +/Size 11 +>> +startxref +6878 +%%EOF diff --git a/noc/index.html b/noc/index.html index ede8f0d4..eb025b18 100644 --- a/noc/index.html +++ b/noc/index.html @@ -4,472 +4,442 @@ - Chase Dumphord | Digital Systems & Infrastructure + Ced's NOC | Live Systems Dashboard - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
-
-
-

Digital Systems β€’ Infrastructure β€’ Networking β€’ Automation β€’ Edge Systems

-

I build practical systems that connect hardware, networks, software, and operations.

- -

- I’m Chase Dumphord β€” a hands-on systems builder focused on digital infrastructure, - Linux systems, homelab engineering, Raspberry Pi deployments, networking, automation, - and real-world technical problem solving. -

- - - - -
- -
- Headshot of Chase Dumphord - -
-
- - - -
- -
$ whoami
-systems_builder
-
-$ focus
-infrastructure
-networking
-automation
-edge_systems
-
-$ status
-building_real_systems
-
-
-
-
- -
+ +
-
- -

Systems Snapshot

-

- A quick look at the infrastructure and systems I’m actively building and documenting. -

-
+

+ + Ced's NOC β€’ Live Infrastructure Dashboard β€’ Auto-refresh: 30s +

-
-
-

12+

-

Nodes

- K3s cluster environment -
+

+ Live Systems Dashboard +

-
-

10+

-

Services

- Self-hosted stack -
+

+ Real-time visibility into Ced's HomeLab infrastructure β€” Proxmox, K3s, + TrueNAS, APRS RF edge systems, and self-hosted services. + Not simulated. Not a demo. Running hardware. +

-
-

4

-

VLANs

- Segmented network design -
- -
-

2

-

iGate Nodes

- Home + mobile APRS -
-
+
-
+ -
+ +
-
- -

Live Systems Overview

-

- Real infrastructure inventory from Ced’s HomeLab, K3s cluster, and APRS edge systems. -

-
+
- - Loading NOC status... + + Connecting to NOC feed... +

- Built using real infrastructure: Proxmox β€’ K3s β€’ TrueNAS β€’ VLAN segmentation β€’ APRS RF Edge Systems + Proxmox β€’ K3s β€’ TrueNAS β€’ VLAN Segmentation β€’ APRS RF Edge Systems

+ +
+ +

--

Infrastructure Nodes

-

--

Services Online

-

--

Network Segments

-

--

Edge Systems

+
-

🚨 NOC Alert Panel

- Top 3 System Notes +

🚨 Alert Panel

+ Top 3 Priority Systems
-
-

Loading alerts...

+

Awaiting data feed...

+ +
+ +
+ +
-
-
-
-
-
- -

Hands-on systems builder with a digital infrastructure mindset

-
- -
-
-

- 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. -

- -

- My background blends field engineering, industrial technology, software-oriented thinking, - and infrastructure problem solving. I’m especially interested in projects that connect the - physical and digital worlds through monitoring, networking, automation, and resilient design. -

-
- -
-

Core Focus Areas

- -
    -
  • Digital systems and infrastructure
  • -
  • Linux systems and service management
  • -
  • Networking, VLANs, failover, and connectivity troubleshooting
  • -
  • Raspberry Pi and edge-device deployments
  • -
  • Documentation, process building, and reproducible project design
  • -
-
-
-
-
- -
-
-
- -

πŸ”§ Infrastructure & Systems Projects

-

- These projects are built around real systems, networking, Linux services, edge devices, - and practical documentation. + +

-
- + +
-
-
-

☸️ K3s Kubernetes Cluster

- Infrastructure + +
+ +

Build Stages

+ +
+
+
βœ… Live
+

Portfolio NOC

+

+ JSON-driven dashboard showing real inventory, online/offline checks, + service labels, latency, and last-check timestamps. +

- -

Kubernetes β€’ Containers β€’ Linux β€’ Infrastructure β€’ Automation

- -

- Built to simulate distributed infrastructure, container orchestration, and scalable service deployment. -

- -

- Multi-node K3s cluster built for container orchestration, service deployment, - and infrastructure experimentation. -

- -
    -
  • Multi-node cluster setup
  • -
  • Containerized workloads
  • -
  • Service deployment
  • -
  • Infrastructure automation
  • -
- - - View Project β†’ - -
- -
-
-

πŸ“‘ APRS iGate System

- Edge System +
+ +

Automated Data Updates

+

+ Scheduled scripts auto-refresh system status and push dashboard-ready + JSON on a cron interval β€” no manual updates. +

- -

RF β€’ Linux β€’ Raspberry Pi β€’ Networking β€’ APRS-IS β€’ Edge Systems

- -

- Bridges RF communication into IP-based infrastructure using Linux, Direwolf, and APRS-IS. -

- -

- Operational dual-node APRS iGate system built with Raspberry Pi, Direwolf, APRS-IS, - RF radios, HomeLab network integration, and planned mobile GPS support. -

- -
    -
  • RF packet decoding with Direwolf
  • -
  • APRS-IS uplink verified on aprs.fi
  • -
  • HomeLab WiFi + mobile hotspot failover
  • -
  • Mobile build includes ETH-USB-HUB-BOX expansion
  • -
  • Documented configs, architecture, and troubleshooting
  • -
- - - View Project β†’ - -
+
+
πŸ“ˆ Future
+

Grafana + Prometheus

+

+ Full observability stack for Proxmox, TrueNAS, K3s, Raspberry Pi, + Uptime Kuma, and APRS edge systems with real-time metrics. +

+
+
+ -
+ -
-
-
- -

πŸ“Š Ced’s NOC Vision

-

- Ced’s NOC is being built as a staged monitoring and systems-visibility platform for HomeLab, - Kubernetes, edge devices, and future production-style dashboards. -

-
- -
-
-

βœ… Current: Portfolio NOC

-

- JSON-driven dashboard that displays real inventory, online/offline checks, service labels, - latency, and last-check timestamps. -

-
- -
-

βš™οΈ Next: Automated Data Updates

-

- Scheduled local script updates will refresh system status data automatically and push dashboard-ready - JSON into the portfolio. -

-
- -
-

πŸ“ˆ Future: Grafana + Prometheus

-

- Deeper monitoring stack for Proxmox, TrueNAS, K3s, Raspberry Pi nodes, Uptime Kuma, - and APRS edge systems. -

-
-
-
-
- -
-
-
- -

Technical experience that bridges field work and digital systems

-
- -
-
-

What I Bring

- -
    -
  • Industrial and field-service technical experience
  • -
  • Linux, Raspberry Pi, and systems administration work
  • -
  • Networking, connectivity, and troubleshooting depth
  • -
  • Documentation, process building, and reproducible project design
  • -
-
- -
-

Current Direction

- -

- I’m positioning myself around digital systems, infrastructure, networking, - automation, and technical operations β€” especially roles where hands-on problem - solving and system integration matter. -

- -

- More detailed resume content will be added here as the portfolio grows. -

-
-
-
-
- -
-
-
- Chase Dumphord standing by a fence with a lake view in the background -
- -
- -

Technical, curious, and always building

- -

- 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. -

-
-
-
- -
-
-
- -

Let’s connect

-
- -
-
-

Contact Info

- -

Email: chasedumphord@gmail.com

-

Phone: 662-214-2231

-

Location: Oxford, MS

-

- GitHub: - github.com/ced4568 -

-
- -
-

What I’m Open To

- -
    -
  • Digital systems and infrastructure roles
  • -
  • Networking and technical operations work
  • -
  • Automation and monitoring projects
  • -
  • Projects involving hardware + software integration
  • -
-
-
-
-
+ - + + + + + + \ No newline at end of file diff --git a/script.js b/script.js deleted file mode 100644 index 1b3de680..00000000 --- a/script.js +++ /dev/null @@ -1,148 +0,0 @@ -document.addEventListener("DOMContentLoaded", () => { - const yearSpan = document.querySelector("[data-year]"); - if (yearSpan) { - yearSpan.textContent = new Date().getFullYear(); - } - - loadNocStatus(); - setInterval(loadNocStatus, 30000); -}); - -async function loadNocStatus() { - try { - const response = await fetch("data/noc-status.json"); - - if (!response.ok) { - throw new Error(`HTTP error: ${response.status}`); - } - - const data = await response.json(); - - const statusText = document.getElementById("noc-status-text"); - const nodes = document.getElementById("metric-nodes"); - const services = document.getElementById("metric-services"); - const vlans = document.getElementById("metric-vlans"); - const edge = document.getElementById("metric-edge"); - const grid = document.getElementById("noc-system-grid"); - const alertList = document.getElementById("noc-alert-list"); - - if (!statusText || !nodes || !services || !vlans || !edge || !grid) { - return; - } - - statusText.textContent = `${data.nocName} β€” ${data.status} β€” Last updated: ${data.lastUpdated}`; - - animateMetric(nodes, data.summary.nodes); - animateMetric(services, data.summary.services); - animateMetric(vlans, data.summary.vlans); - animateMetric(edge, data.summary.edgeSystems); - - grid.innerHTML = ""; - - data.systems.forEach((system) => { - const card = document.createElement("article"); - card.className = "noc-system-card"; - - const status = system.status.toLowerCase(); - - const statusClass = - status.includes("online") || status.includes("operational") - ? "online" - : status.includes("building") || status.includes("tuning") || status.includes("active") - ? "warning" - : "offline"; - - card.innerHTML = ` -
- - ${system.layer} -
- -
${system.label || "System"}
- -
- ${system.severity || "Unknown"} -
- -

${system.name}

-

${system.type}

- ${system.address} - -
- Status: ${system.status} - Latency: ${system.latency || "N/A"} - Last Check: ${system.lastCheck || "Manual"} -
- `; - - grid.appendChild(card); - }); - - if (alertList) { - renderAlerts(data.systems, alertList); - } - } catch (error) { - const statusText = document.getElementById("noc-status-text"); - - if (statusText) { - statusText.textContent = "Ced’s NOC data unavailable"; - } - - console.error("Failed to load NOC status:", error); - } -} - -function animateMetric(element, value) { - element.classList.remove("metric-pop"); - element.textContent = value; - - void element.offsetWidth; - element.classList.add("metric-pop"); -} - -function renderAlerts(systems, alertList) { - const priority = systems - .map((system) => { - const severity = (system.severity || "Unknown").toLowerCase(); - const status = (system.status || "").toLowerCase(); - - let score = 0; - - if (severity.includes("critical") || status.includes("offline")) { - score = 3; - } else if (severity.includes("degraded")) { - score = 2; - } else if (severity.includes("unknown")) { - score = 1; - } - - return { ...system, score }; - }) - .filter((system) => system.score > 0) - .sort((a, b) => b.score - a.score) - .slice(0, 3); - - if (priority.length === 0) { - alertList.innerHTML = ` -
- All monitored systems healthy - No critical or degraded systems detected. -
- `; - return; - } - - alertList.innerHTML = priority - .map((system) => { - const alertClass = - system.score === 3 ? "critical" : system.score === 2 ? "degraded" : "unknown"; - - return ` -
- ${system.name} - ${system.severity || system.status} β€’ ${system.layer} β€’ ${system.latency || "N/A"} -
- `; - }) - .join(""); -} \ No newline at end of file