Compare commits

..
Author SHA1 Message Date
JustinandClaude Sonnet 5 c7a10ae719 Fix CSP violations from Cloudflare Radar scan
Two duplicate <meta> CSP tags in index.html conflicted with the
_headers HTTP header, and browsers enforce the intersection of all
active policies. That blocked the profile photo, the inline nav-
highlight script, and the Cloudflare Insights beacon.

Consolidate to a single CSP in _headers, allow the actual external
resources the page needs (ki5bhv.com image, cloudflareinsights.com
beacon), and move the inline script/onerror handler into js/main.js
so script-src no longer needs 'unsafe-inline'.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-30 16:28:33 -05:00
Justin 5d6eae87bf fixing issues with cloudflare 2026-08-30 16:17:44 -05:00
Justin a3b77de5aa added font to css 2026-08-30 16:06:07 -05:00
Justin ae21ab1be9 added the font into the html 2026-08-30 15:44:27 -05:00
Justin 1d9ec33761 added the font 2026-08-30 15:40:56 -05:00
Justin c74589555b header 2026-08-30 15:11:28 -05:00
Justin 2f244ea46d added PDQ Connent to job 2026-08-30 09:15:18 -05:00
Justin d89065ca4d added skilles that was was missing 2026-08-30 09:05:20 -05:00
Justin af7db894b3 fixed some spelling issues 2026-08-29 18:54:46 -05:00
Justin 617838a1e1 test 2026-08-29 09:57:26 -05:00
Justin Frasier 89063938d7 test 2026-08-29 09:52:07 -05:00
Justin 5ad5fd720d fix title change 2026-08-27 20:48:25 -05:00
Justin 24ad1a1097 change the title 2026-08-27 20:45:45 -05:00
Justin 1927c1e85f moved the date and local 2026-08-27 20:27:14 -05:00
Justin 5029d3ca76 move the dates 2026-08-27 20:23:29 -05:00
Justin 8ff376324c added Infrastructure Admin job 2026-08-27 20:12:01 -05:00
Justin Frasier ab6e0b8090 update 2026-05-02 23:52:40 -05:00
Justin Frasier 515af2a4d3 updated 2026-05-02 23:50:15 -05:00
Justin Frasier 2d8b0c6e8f update 2026-04-27 19:12:07 -05:00
JustinandClaude Sonnet 4.6 97de4bca88 fix: add favicon links and fonts.gstatic.com preconnect to both pages
Adds explicit favicon link tags for all sizes and the missing
fonts.gstatic.com crossorigin preconnect required by Google Fonts
for optimal font load performance.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-04-20 20:09:36 -05:00
Justin b5cffd33c6 docs: update Justin Frasier resume PDF 2026-04-14 09:46:21 -05:00
Justin 9b6e3a7b2b docs: update README to reflect expansion to a two-page site including a ham radio dashboard 2026-04-14 09:11:18 -05:00
Justin 1c90c97ed9 feat: add initial K5BSS ham radio station dashboard and logbook interface 2026-04-13 23:52:10 -05:00
Justin 8506a96ee7 feat: add resume download link and update professional experience and skills sections 2026-04-13 22:37:43 -05:00
JustinandClaude Sonnet 4.6 84e62edb92 feat: improve responsive design with tablet and small-screen breakpoints
Add 1024px tablet breakpoint with narrower sidebar, expand mobile styles
with horizontal nav reflow, and add 480px small-phone breakpoint with
tighter spacing. Document all three breakpoints in README.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-04-13 17:09:46 -05:00
17 changed files with 1414 additions and 88 deletions

No files matched your search

Executable
+1
View File
@@ -0,0 +1 @@
./vs
BIN
View File
Binary file not shown.
Regular → Executable
+68 -44
View File
@@ -1,44 +1,68 @@
# k5bss.com
Personal portfolio and resume site for Justin Frasier — IT Support Analyst and amateur radio operator (K5BSS, General Class).
Live at: [k5bss.com](https://k5bss.com)
---
## Overview
A static, single-page resume site with a dark terminal aesthetic. No frameworks or build tools — just HTML and CSS.
## Structure
```
k5bss.com/
├── index.html # Main page (all content)
├── css/
│ └── style.css # All styles
├── favicon.ico
├── favicon-32x32.png
├── favicon-64x64.png
└── favicon-256x256.png
```
## Sections
- **About** — summary, tags, and certifications at a glance
- **Experience** — work history (Margaritaville, Boomtown, xententLABS)
- **Technical Skills** — languages, OS, hardware, tools, networking, IT support, security
- **Education** — BPCC A.A.S. Cyber Technology, Northwood High School
- **Certifications** — CompTIA A+, PCPro, Udemy courses, amateur radio, locomotive
- **Contact** — email, phone, address, GitHub, LinkedIn, self-hosted Git
## Tech
- Plain HTML5 / CSS3 — no JavaScript frameworks or build step
- Fonts: [IBM Plex Mono](https://fonts.google.com/specimen/IBM+Plex+Mono) and [IBM Plex Sans](https://fonts.google.com/specimen/IBM+Plex+Sans) via Google Fonts
- Sticky sidebar with scroll-spy nav via `IntersectionObserver`
- Responsive at 768px breakpoint (sidebar stacks above content on mobile)
## Deployment
Static files — drop the repo contents onto any web server or host (Nginx, Apache, Caddy, GitHub Pages, etc.). No build step required.
# k5bss.com
Personal portfolio and ham radio station site for Justin Frasier — IT Support Analyst and amateur radio operator (K5BSS, General Class).
Live at: [k5bss.com](https://k5bss.com)
---
## Overview
Two static pages with a dark terminal aesthetic. No frameworks or build tools — just HTML, CSS, and vanilla JavaScript.
- **[index.html](index.html)** — Resume/portfolio page
- **[k5bss.html](k5bss.html)** — Ham radio station dashboard and logbook
## Structure
```
k5bss.com/
├── index.html # Resume/portfolio page
├── k5bss.html # Ham radio station dashboard
├── Justin_Frasier_Resume.pdf # Downloadable resume
├── css/
│ └── style.css # Styles for index.html
├── favicon.ico
├── favicon-32x32.png
├── favicon-64x64.png
└── favicon-256x256.png
```
## Pages
### Resume / Portfolio (`index.html`)
- **About** — summary, tags, and certifications at a glance
- **Experience** — work history (Margaritaville, Boomtown, xententLABS)
- **Technical Skills** — languages, OS, hardware, tools, networking, IT support, security
- **Education** — BPCC A.A.S. Cyber Technology, Northwood High School
- **Certifications** — CompTIA A+, PCPro, Udemy courses, amateur radio, locomotive
- **Contact** — email, phone, address, GitHub, LinkedIn, self-hosted Git
Fonts: [IBM Plex Mono](https://fonts.google.com/specimen/IBM+Plex+Mono) and [IBM Plex Sans](https://fonts.google.com/specimen/IBM+Plex+Sans) via Google Fonts. Sticky sidebar with scroll-spy nav via `IntersectionObserver`.
### Ham Radio Station Dashboard (`k5bss.html`)
Three-tab single-page app for station stats and the contact logbook:
- **Dashboard** — QSO count, DXCC entities, states worked; bar charts for modes and bands; top countries list; monthly QSO activity canvas chart
- **Logbook** — searchable, filterable, paginated contact log (callsign, name, country, QTH, LoTW status)
- **About** — station info and operating preferences
Fonts: [Share Tech Mono](https://fonts.google.com/specimen/Share+Tech+Mono), [Orbitron](https://fonts.google.com/specimen/Orbitron), and [Barlow](https://fonts.google.com/specimen/Barlow) via Google Fonts. Styles and JavaScript are self-contained within the file.
## Responsive Design
`index.html` adapts across three breakpoints defined in `css/style.css`:
| Breakpoint | Behavior |
|---|---|
| `≤1024px` (tablet) | Sidebar narrows from 280px to 230px; main content padding reduced |
| `≤768px` (mobile) | Sidebar unsticks and stacks above content; nav links reflow into a horizontal wrapping row; contact grid collapses to one column |
| `≤480px` (small phone) | Tighter padding and font sizes; skills grid columns shrink to `minmax(140px, 1fr)` |
All other components — tags, socials, and the skills grid — use `flex-wrap` or `auto-fill` and reflow fluidly without breakpoints.
## Deployment
Static files — drop the repo contents onto any web server or host (Nginx, Apache, Caddy, GitHub Pages, etc.). No build step required.
+9
View File
@@ -0,0 +1,9 @@
/*
Content-Security-Policy: default-src 'self'; script-src 'self' https://static.cloudflareinsights.com; style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; font-src 'self' https://fonts.gstatic.com; img-src 'self' https://ki5bhv.com data:; connect-src 'self' https://cloudflareinsights.com; object-src 'none'; base-uri 'none'; frame-ancestors 'none'; form-action 'self'; upgrade-insecure-requests
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
X-Permitted-Cross-Domain-Policies: none
Regular → Executable
+44
View File
@@ -1,5 +1,13 @@
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('/fonts/ibm-plex-mono-400.woff2') format('woff2');
}
:root {
--bg: #0a0c10;
--bg2: #0f1218;
@@ -455,20 +463,56 @@ footer {
margin-left: 3px;
}
/* ── Tablet ── */
@media (max-width: 1024px) {
.layout { grid-template-columns: 230px 1fr; }
main { padding: 2.5rem 2rem; }
}
/* ── Mobile ── */
@media (max-width: 768px) {
.layout { grid-template-columns: 1fr; }
aside {
position: relative;
height: auto;
border-right: none;
border-bottom: 1px solid var(--border);
padding: 1.5rem 1.2rem;
}
/* Flatten the nav into a horizontal wrapping row to save vertical space */
nav {
display: flex;
flex-wrap: wrap;
gap: 0.3rem;
flex: none;
margin: 0.8rem 0;
}
nav a {
display: inline-flex;
font-size: 0.72rem;
padding: 0.3rem 0.6rem;
margin-bottom: 0;
}
.socials { padding-top: 1rem; }
main { padding: 2rem 1.5rem; }
h1 { font-size: 1.7rem; }
.contact-grid { grid-template-columns: 1fr; }
}
/* ── Small mobile (≤480 px) ── */
@media (max-width: 480px) {
main { padding: 1.5rem 1rem; }
h1 { font-size: 1.4rem; }
section { margin-bottom: 2.5rem; }
.hero-sub { font-size: 0.92rem; }
.skills-grid { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
}
/* ── Fade-in animation ── */
@keyframes fadeUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
section { animation: fadeUp 0.5s ease both; }
Regular → Executable
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Regular → Executable
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 473 B

After

Width:  |  Height:  |  Size: 473 B

Regular → Executable
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 826 B

After

Width:  |  Height:  |  Size: 826 B

Regular → Executable
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Executable
+5
View File
@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#0f1218"/>
<text x="3" y="11" font-family="'IBM Plex Mono','Courier New',monospace" font-size="6" fill="#4a5568">~$</text>
<text x="2" y="27" font-family="'IBM Plex Mono','Courier New',monospace" font-size="19" font-weight="600" fill="#22c55e">jf</text>
</svg>

After

Width:  |  Height:  |  Size: 370 B

@@ -0,0 +1,52 @@
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3oQI8lc.ttf) format('truetype');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n5ig.ttf) format('truetype');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJ8lc.ttf) format('truetype');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAO8lc.ttf) format('truetype');
}
@font-face {
font-family: 'IBM Plex Sans';
font-style: normal;
font-weight: 300;
font-stretch: normal;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ibmplexsans/v23/zYXGKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1swZSAXcomDVmadSDtFlzAA.ttf) format('truetype');
}
@font-face {
font-family: 'IBM Plex Sans';
font-style: normal;
font-weight: 400;
font-stretch: normal;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ibmplexsans/v23/zYXGKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1swZSAXcomDVmadSD6llzAA.ttf) format('truetype');
}
@font-face {
font-family: 'IBM Plex Sans';
font-style: normal;
font-weight: 500;
font-stretch: normal;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ibmplexsans/v23/zYXGKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1swZSAXcomDVmadSD2FlzAA.ttf) format('truetype');
}
Regular → Executable
+80 -44
View File
@@ -4,11 +4,17 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Justin Frasier | IT Support Analyst</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="referrer" content="strict-origin-when-cross-origin" />
<title>Justin Frasier | Infrastructure Administrator</title>
<link rel="sitemap" type="application/xml" href="/sitemap.xml" />
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='4' fill='%230f1218'/%3E%3Ctext x='3' y='11' font-family='IBM Plex Mono,Courier New,monospace' font-size='6' fill='%234a5568'%3E~$%3C/text%3E%3Ctext x='2' y='27' font-family='IBM Plex Mono,Courier New,monospace' font-size='19' font-weight='600' fill='%2322c55e'%3Ejf%3C/text%3E%3C/svg%3E" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="64x64" href="/favicon-64x64.png" />
<link rel="icon" type="image/png" sizes="256x256" href="/favicon-256x256.png" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500;600&family=IBM+Plex+Sans:wght@300;400;500&display=swap"
rel="stylesheet">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="css/style.css">
</head>
@@ -18,10 +24,9 @@
<!-- ── Sidebar ── -->
<aside>
<img class="profile-photo" src="https://ki5bhv.com/photo/justin1.jpg" alt="Justin Frasier"
onerror="this.style.display='none'">
<img class="profile-photo" src="https://ki5bhv.com/photo/justin1.jpg" alt="Justin Frasier">
<div class="profile-name">Justin Frasier</div>
<div class="profile-title">IT Support Analyst</div>
<div class="profile-title">Infrastructure Administrator</div>
<div class="profile-loc">📍 Bossier City, LA</div>
<hr class="divider">
@@ -37,10 +42,13 @@
<div class="socials">
<a href="https://github.com/cerealkiller1918" target="_blank" rel="noopener noreferrer">github</a>
<a href="https://www.linkedin.com/in/justin-frasier-bb29b8a9" target="_blank" rel="noopener noreferrer">linkedin</a>
<a href="https://www.linkedin.com/in/justin-frasier-bb29b8a9" target="_blank"
rel="noopener noreferrer">linkedin</a>
<a href="https://git.ki5bhv.com/justin" target="_blank" rel="noopener noreferrer">gitea</a>
<a href="https://twitter.com/Cerealkiller191" target="_blank" rel="noopener noreferrer">twitter</a>
<a href="https://www.facebook.com/cerealkiller1918" target="_blank" rel="noopener noreferrer">facebook</a>
<a href="Justin_Frasier_Resume.pdf" target="_blank" rel="noopener noreferrer">resume</a>
<a href="https://ki5bhv.com" target="_blank" rel="noopener noreferrer">ki5bhv.com</a>
</div>
</aside>
@@ -52,7 +60,7 @@
<div class="prompt"><span>~/k5bss</span> $ whoami</div>
<h1>Justin<br>Frasier<span class="cursor"></span></h1>
<p class="hero-sub">
<strong>IT Support Analyst</strong> with a background in computer systems, infrastructure, and security.
<strong>Infrastructure Administrator</strong> with a background in computer systems, infrastructure, and security.
CompTIA A+ certified with hands-on experience in <strong>Azure Active Directory</strong>,
Windows Server, networking, and self-hosted services.
Amateur radio operator <strong>(K5BSS — General Class)</strong>.
@@ -74,15 +82,35 @@
<h2><span class="hash">#</span>experience</h2>
<div class="exp-item">
<div class="exp-role">Infrastructure Administrator</div>
<div class="exp-meta">Aug 2026 — Present</div>
<div class="exp-role">IT Support Analyst</div>
<div class="exp-meta">Mar 2023 — Aug 2026</div>
<div class="exp-company">Margaritaville Resort &amp; Casino</div>
<div class="exp-meta">Mar 2023 — Present &nbsp;·&nbsp; Bossier City, LA</div>
<div class="exp-meta">Bossier City, LA</div>
<ul class="exp-list">
<li>Install and image Windows OS; onboard machines to Active Directory</li>
<li>Troubleshoot hardware, software, and networking issues in a high-availability environment</li>
<li>Punch down networking cable to patch panels and keystones</li>
<li>Author troubleshooting documentation and lead projects</li>
<li>Administer and support Windows Server environments</li>
<li>Provide comprehensive Tier 1 and Tier 2 technical support across a large-scale resort and casino environment, diagnosing and resolving hardware, software, and network issues to minimize downtime and maintain seamless business operations.</li>
<li>Deploy, configure, and maintain Windows 10 and Windows 11 workstations, managing domain enrollment through Active Directory to uphold a secure, well-organized network infrastructure.</li>
<li>Administer Windows Server environments and Azure Active Directory, overseeing user provisioning, group policy management, and access controls to enforce security and compliance standards</li>
<li>Diagnose and remediate wired and wireless connectivity issues — including network drops, Wi-Fi interference, and misconfigured settings — restoring reliable access for end users with minimal disruption.</li>
<li>Install, terminate, and test network cabling across patch panels and keystones, ensuring robust and reliable infrastructure connectivity throughout the facility.</li>
<li>Troubleshoot, repair, and replace hardware components — including RAM, HDDs, SSDs, power supplies, motherboards, and peripherals — returning systems to full operational status efficiently.</li>
<li>Administer and support Office 365 applications — including Outlook, Teams, SharePoint, and OneDrive — enabling consistent productivity and collaboration across the organization.</li>
<li>Provide end-to-end mobile device support for smartphones and tablets, handling configuration, corporate email integration, and secure connectivity to organizational systems.</li>
<li>Manage the full help desk ticket lifecycle — logging, prioritizing, tracking, and resolving requests — ensuring timely support delivery and adherence to service-level expectations.</li>
<li>Utilize PDQ Inventory to maintain up-to-date hardware and software asset tracking across all endpoints, enabling informed decision-making for procurement, audits, and lifecycle management.</li>
<li>Leverage PDQ Deploy to automate software deployments and updates across the organization, reducing manual effort and ensuring consistent, timely rollouts enterprise wide.</li>
<li>Converting PDQ Deploy & Invertory to PDQ Connent. Using PDQ Connent to manage and push packages and update to workstations and laptopps.</li>
<li>Administer VMware vSphere environments, managing virtual machine provisioning, configuration, and maintenance to support reliable and scalable infrastructure operations.</li>
<li>Manage and support the Cisco phone system, handling configuration, provisioning, and troubleshooting of IP phones to ensure reliable communication across the organization.</li>
<li>Utilize TeamViewer to provide remote technical support, enabling efficient diagnosis and resolution of end-user issues without requiring an on-site visit.</li>
<li>Monitor network infrastructure and system health using PRTG Network Monitor, proactively identifying and addressing performance issues and outages to maintain high availability.</li>
<li>Manage SSL certificates across organizational systems, overseeing procurement, installation, renewal, and troubleshooting to ensure secure and uninterrupted encrypted communications.</li>
<li>Deliver clear, patient, and customer-focused technical support to users of all skill levels, translating complex issues into understandable solutions to maximize satisfaction and reduce repeat incidents.</li>
<li>Maintain accurate IT asset inventory, tracking hardware assignments, lifecycle status, and equipment locations to support informed procurement and audit readiness.</li>
<li>Plan and execute equipment moves and workstation relocations with precision, coordinating logistics to ensure business continuity throughout transitions.</li>
<li>Produce comprehensive technical documentation and troubleshooting guides, building an accessible knowledge base that improves team efficiency and accelerates issue resolution.</li>
<li>Lead cross-functional IT initiatives, collaborating with department stakeholders to scope, plan, and deliver technology solutions on time and within budget.</li>
</ul>
</div>
@@ -91,10 +119,14 @@
<div class="exp-company">Boomtown Casino &amp; Hotel</div>
<div class="exp-meta">Nov 2017 — Mar 2023 &nbsp;·&nbsp; Bossier City, LA</div>
<ul class="exp-list">
<li>Monitored CCTV systems and alarm infrastructure across the facility</li>
<li>Led security operations and managed incident response</li>
<li>Patrolled facility and enforced physical security protocols</li>
<li>De-escalation, crisis management, and customer service</li>
<li>Supervised facility-wide security operations, ensuring the safety of hundreds of guests and employees
daily while serving as the primary point of contact for guests and staff.</li>
<li>Conducted foot and vehicle patrols; monitored a multi-camera CCTV network and alarm systems to
proactively identify risks and coordinate rapid incident response.</li>
<li>Applied crisis management and de-escalation techniques to resolve high-pressure situations with minimal
operational disruption.</li>
<li>Trained and mentored security personnel on protocols, emergency response, and customer interaction
standards.</li>
</ul>
</div>
@@ -103,9 +135,12 @@
<div class="exp-company">xententLABS</div>
<div class="exp-meta">Jan 2016 — May 2016 &nbsp;·&nbsp; Bossier City, LA</div>
<ul class="exp-list">
<li>Agile development practices and sprint workflows</li>
<li>Source code management and cross-platform software development</li>
<li>Database design, management, and software quality assurance</li>
<li>Participated in full-cycle Agile development — sprint planning, stand-ups, and iterative releases —
while managing source code repositories using version control best practices.</li>
<li>Engineered cross-platform software solutions and collaborated on relational database design, applying
normalization principles and optimized query structures.</li>
<li>Developed test cases and executed functional tests, tracking defects through resolution to ensure
stable, production-ready releases.</li>
</ul>
</div>
</section>
@@ -158,8 +193,23 @@
<div class="skill-cell"><span class="skill-icon">▸</span>System Imaging &amp; Deployment</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Docker</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Proxmox VE</div>
<div class="skill-cell"><span class="skill-icon">▸</span>VMware vSphere</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Git</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Help Desk Ticketing Systems</div>
<div class="skill-cell"><span class="skill-icon">▸</span>PDQ Deploy</div>
<div class="skill-cell"><span class="skill-icon">▸</span>PDQ Inventory</div>
<div class="skill-cell"><span class="skill-icon">▸</span>PDQ Connent</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Cisco Systems</div>
<div class="skill-cell"><span class="skill-icon">▸</span>TeamViewer</div>
<div class="skill-cell"><span class="skill-icon">▸</span>PRTG Network Monitor</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Web Hosting</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Ansible</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Rubrik Backup</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Proxmox Backup Server</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Nginx Proxy Manager</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Nginx Web Server</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Windows server DNS</div>
<div class="skill-cell"><span class="skill-icon">▸</span>Windows server DHCP</div>
</div>
<div class="skills-subheading">Development IDEs</div>
@@ -291,17 +341,19 @@
</div>
<div class="contact-item">
<div class="contact-label">GitHub</div>
<div class="contact-val"><a href="https://github.com/cerealkiller1918" target="_blank" rel="noopener noreferrer">cerealkiller1918</a>
<div class="contact-val"><a href="https://github.com/cerealkiller1918" target="_blank"
rel="noopener noreferrer">cerealkiller1918</a>
</div>
</div>
<div class="contact-item">
<div class="contact-label">LinkedIn</div>
<div class="contact-val"><a href="https://www.linkedin.com/in/justin-frasier-bb29b8a9"
target="_blank" rel="noopener noreferrer">justin-frasier</a></div>
<div class="contact-val"><a href="https://www.linkedin.com/in/justin-frasier-bb29b8a9" target="_blank"
rel="noopener noreferrer">justin-frasier</a></div>
</div>
<div class="contact-item">
<div class="contact-label">Self-hosted Git</div>
<div class="contact-val"><a href="https://git.ki5bhv.com/justin" target="_blank" rel="noopener noreferrer">git.ki5bhv.com</a></div>
<div class="contact-val"><a href="https://git.ki5bhv.com/justin" target="_blank"
rel="noopener noreferrer">git.ki5bhv.com</a></div>
</div>
</div>
</section>
@@ -314,24 +366,8 @@
</main>
</div>
<script>
// Highlight active nav link on scroll
const sections = document.querySelectorAll('section[id]');
const links = document.querySelectorAll('nav a');
const observer = new IntersectionObserver(entries => {
entries.forEach(e => {
if (e.isIntersecting) {
links.forEach(l => l.classList.remove('active'));
const active = document.querySelector(`nav a[href="#${e.target.id}"]`);
if (active) active.classList.add('active');
}
});
}, { threshold: 0.3 });
sections.forEach(s => observer.observe(s));
</script>
<script src="js/main.js" defer></script>
</body>
</html>
</html>
+23
View File
@@ -0,0 +1,23 @@
// Highlight active nav link on scroll
const sections = document.querySelectorAll('section[id]');
const links = document.querySelectorAll('nav a');
const observer = new IntersectionObserver(entries => {
entries.forEach(e => {
if (e.isIntersecting) {
links.forEach(l => l.classList.remove('active'));
const active = document.querySelector(`nav a[href="#${e.target.id}"]`);
if (active) active.classList.add('active');
}
});
}, { threshold: 0.3 });
sections.forEach(s => observer.observe(s));
// Hide the profile photo if it fails to load
const profilePhoto = document.querySelector('.profile-photo');
if (profilePhoto) {
profilePhoto.addEventListener('error', () => {
profilePhoto.style.display = 'none';
});
}
Executable
+1081
View File
File diff suppressed because it is too large. Load diff
+4
View File
@@ -0,0 +1,4 @@
User-agent: *
Allow: /
Sitemap: https://k5bss.com/sitemap.xml
Executable
+29
View File
@@ -0,0 +1,29 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
#Generated by https://github.com/gitaware/securitytxtgenerator
# If you would like to report a security issue, please contact us at:
Contact: [email protected]
Expires: 2027-04-20T01:14:00Z
Preferred-Languages: en
Canonical: https://k5bss.com/security.txt
Encryption: https://k5bss.com/pgp-key.asc
-----BEGIN PGP SIGNATURE-----
wsFzBAEBCAAnBYJp5onuCZB2Xap8YgdeNhYhBK0QLg9LuG9EuLvfkHZdqnxi
B142AAAlIw//Y//VEh32G+tXnamBIuYq4W+vdBlwZuKGeW/IwObedw89bGwo
/xSPGWUh0mPKKLof1MtLWNObUUCBscRZiLArExFzw/OZy2J3VuAH5qBrl2am
D8dnl/6CbqdrpEI3cinrzgDoa1Z4F15wF5lLNlvYHCGkXFIpNFsd8H6P9/UZ
v0jM6l93wDWbEZR1rHIxvtoUQd8gfPwksGa+osj6QkpP7XBRRly6nAihk8u7
r+aZ1Sh+YfWiVH966mxmV0x9N2ihYgYmwPMPUNCSRgpDZgM3EEKZWHryuPu2
Sp5q3bxa6BahAEXFhYaJKinkL5O95vaxiJcsaqPRhlR2xHXLoQj9Ot5v5E9c
uUc2P0v4M/VLFFTWwnu+3z72V/sj32biRJ70hvH/bb58oOm7YAcOCERyFsY+
4Drcnt2Am7QDEojhdg3GYf9pJs0tsyvmTZsmpYN8pv3lfzUzEW2YUOdWjMOf
nLmeqipVA0tSC3QhK3EMqbgtNpJqR/TpbfyWd9EFLS/Jc/kCkAbJlSDOi9ud
FkbnWBMiTtSPOiDwWMswbOdMTwHu+GxnAbB5+lQghxuEOTTmOPvEQ6DtYhpn
3+YIf0oDqeptjd+VE5Tx59CMV1RsZkbTVRJanBuLp339Kb/dfQi/G7mIkRne
hxUZ/Nx9LjsFxlcJRLnAnmtr5qfHeamo7ME=
=o+Va
-----END PGP SIGNATURE-----
Executable
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://k5bss.com/</loc>
<lastmod>2026-04-20</lastmod>
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://k5bss.com/k5bss.html</loc>
<lastmod>2026-04-20</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>