Fix favicon, resolve merge conflict, and remove markdown-loader from completed stories

This commit is contained in:
Leopere 2025-12-06 17:51:41 -05:00
parent fcd62e071a
commit 92d5ed0801
Signed by: colin
SSH Key Fingerprint: SHA256:nRPCQTeMFLdGytxRQmPVK9VXY3/ePKQ5lGRyJhT5DY8
34 changed files with 340 additions and 281 deletions

View File

@ -6,9 +6,9 @@
<meta name="robots" content="noindex, nofollow">
<meta name="description" content="Colin Knapp - Private Consulting Packs">
<title>Consulting Packs (Private) - Colin Knapp</title>
<link rel="stylesheet" href="styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
<style>
.pricing-section {
padding: 2rem 0;

View File

@ -6,10 +6,10 @@
<meta name="description" content="Colin Knapp - CSV Processing Tool">
<title>CSV Viewer - Colin Knapp</title>
<link rel="stylesheet" href="../styles.css">
<link rel="stylesheet" href="tool-styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="tool-styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<link rel="stylesheet" href="csv-tool-fix.css?v=2" integrity="sha256-5oTxos9Qxwhor3qIwHSM12YyIZi5E+tHuFdYER0hXoI=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
<script src="../utils.js" integrity="sha256-ryQsJ+aghKKD/CeXgx8jtsnZT3Epp3EjIw8RyHIq544="></script>
<style>
/* Additional inline styles to fix layout */

View File

@ -3,7 +3,7 @@
* and applies the correct active states to navigation items
*/
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('DOMContentLoaded', function () {
// Helper: recreate and execute a <script> element
function recreateAndExecuteScript(originalScriptElement, targetParent) {
const executableScript = document.createElement('script');
@ -93,42 +93,27 @@ document.addEventListener('DOMContentLoaded', function() {
if (currentPath === '/' || currentPath === '/index.html') {
const portfolioLink = document.getElementById('nav-portfolio');
if (portfolioLink) portfolioLink.classList.add('active');
} else if (currentPath.includes('/stories/')) {
const storiesLink = document.getElementById('nav-stories');
if (storiesLink) storiesLink.classList.add('active');
// Check for specific story pages
if (currentPath.includes('viperwire.html')) {
const link = document.getElementById('nav-viperwire');
if (link) link.classList.add('active');
} else if (currentPath.includes('fawe-plotsquared.html')) {
const link = document.getElementById('nav-faweplotsquared');
if (link) link.classList.add('active');
} else if (currentPath.includes('healthcare-platform.html')) {
const link = document.getElementById('nav-healthcareplatform');
if (link) link.classList.add('active');
} else if (currentPath.includes('wordpress-security.html')) {
const link = document.getElementById('nav-wordpresssecurity');
if (link) link.classList.add('active');
} else if (currentPath.includes('airport-dns.html')) {
const link = document.getElementById('nav-airportdns');
if (link) link.classList.add('active');
} else if (currentPath.includes('nitric-leadership.html')) {
const link = document.getElementById('nav-nitricleadership');
if (link) link.classList.add('active');
} else if (currentPath.includes('open-source-success.html')) {
const link = document.getElementById('nav-opensourcesuccess');
if (link) link.classList.add('active');
} else {
// Check if we are in a section that corresponds to a dropdown
if (currentPath.includes('/stories/')) {
const storiesLink = document.getElementById('nav-stories');
if (storiesLink) storiesLink.classList.add('active');
} else if (currentPath.includes('/one-pager-tools/')) {
const toolsLink = document.getElementById('nav-tools');
if (toolsLink) toolsLink.classList.add('active');
}
} else if (currentPath.includes('/one-pager-tools/')) {
const toolsLink = document.getElementById('nav-tools');
if (toolsLink) toolsLink.classList.add('active');
// Check for specific tool pages
if (currentPath.includes('csv-tool.html')) {
const link = document.getElementById('nav-csv');
if (link) link.classList.add('active');
}
// Dynamic check for all dropdown links
// This iterates through all links in dropdown contents and checks if the current path matches
const dropdownLinks = document.querySelectorAll('.dropdown-content a');
dropdownLinks.forEach(link => {
const href = link.getAttribute('href');
// Check if current path ends with the href (handling relative paths)
// or if the href is contained in the current path
if (href && (currentPath.endsWith(href) || currentPath === href)) {
link.classList.add('active');
}
});
}
}, 100); // Small delay to ensure the DOM is updated
}
@ -182,7 +167,7 @@ document.addEventListener('DOMContentLoaded', function() {
const currentTheme = html.getAttribute('data-theme') || 'auto';
let newTheme;
switch(currentTheme) {
switch (currentTheme) {
case 'light':
newTheme = 'dark';
break;
@ -212,6 +197,12 @@ document.addEventListener('DOMContentLoaded', function() {
if (headerElement) {
// Add favicon link when header is included
// First remove any existing favicon
const existingFavicon = document.querySelector('link[rel="icon"]');
if (existingFavicon) {
existingFavicon.remove();
}
const faviconLink = document.createElement('link');
faviconLink.rel = 'icon';
faviconLink.type = 'image/svg+xml';

View File

@ -2,75 +2,84 @@
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//metrics.nixc.us/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '3']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = "//metrics.nixc.us/";
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '3']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);
})();
</script>
<!-- End Matomo Code -->
<div class="theme-switch">
<button
id="themeToggle"
aria-label="Theme mode: Auto"
role="switch"
aria-checked="false"
title="Toggle between light, dark, and auto theme modes"
tabindex="0"
>🌓</button>
</div>
<nav class="main-nav">
<ul>
<li><a href="/" id="nav-portfolio">Portfolio</a></li>
<li class="dropdown">
<a href="/resumes/business-development.html" id="nav-resumes">Resumes</a>
<div class="dropdown-content">
<a href="/resumes/business-development.html" id="nav-businessdev">Business Development</a>
<a href="/resumes/devsecops.html" id="nav-devsecops">DevSecOps</a>
<a href="/resumes/team-leadership.html" id="nav-teamleadership">Team Leadership</a>
<a href="/resumes/tool-building.html" id="nav-toolbuilding">Tool Building</a>
</div>
</li>
<li class="dropdown">
<a href="/stories/" id="nav-stories">Stories</a>
<div class="dropdown-content">
<a href="/stories/airport-dns.html" id="nav-airportdns" class="nav-story-tbd">Airport Dns</a>
<a href="/stories/app-development.html" id="nav-appdevelopment" class="nav-story-written">App Development</a>
<a href="/stories/athion-turnaround.html" id="nav-athionturnaround" class="nav-story-written">Athion Turnaround</a>
<a href="/stories/fawe-plotsquared.html" id="nav-faweplotsquared" class="nav-story-tbd">Fawe Plotsquared</a>
<a href="/stories/healthcare-platform.html" id="nav-healthcareplatform" class="nav-story-tbd">Healthcare Platform</a>
<a href="/stories/home-infrastructure.html" id="nav-homeinfrastructure" class="nav-story-written">Home Infrastructure</a>
<a href="/stories/motherboard-repair.html" id="nav-motherboardrepair" class="nav-story-written">Motherboard Repair</a>
<a href="/stories/nitric-leadership.html" id="nav-nitricleadership" class="nav-story-tbd">Nitric Leadership</a>
<a href="/stories/nuclear-dns.html" id="nav-nucleardns" class="nav-story-written">Nuclear Dns</a>
<a href="/stories/open-source-success.html" id="nav-opensourcesuccess" class="nav-story-written">Open Source Success</a>
<a href="/stories/scansnap-webdav.html" id="nav-scansnapwebdav" class="nav-story-written">Scansnap Webdav</a>
<a href="/stories/showerloop.html" id="nav-showerloop" class="nav-story-written">Showerloop</a>
<a href="/stories/viperwire.html" id="nav-viperwire" class="nav-story-written">Viperwire</a>
<a href="/stories/web-design-java.html" id="nav-webdesignjava" class="nav-story-written">Web Design Java</a>
<a href="/stories/wordpress-security.html" id="nav-wordpresssecurity" class="nav-story-tbd">Wordpress Security</a>
<a href="/stories/youtube-game-dev.html" id="nav-youtubegamedev" class="nav-story-written">Youtube Game Dev</a>
</div>
</li>
<li class="dropdown">
<a href="/one-pager-tools/csv-tool.html" id="nav-tools">Tools</a>
<div class="dropdown-content">
<a href="/one-pager-tools/csv-tool.html" id="nav-csv">CSV Tool</a>
<a href="/one-pager-tools/utm-tool.html" id="nav-utm">UTM Builder</a>
<a href="https://md.colinknapp.com" id="nav-markdown" target="_blank" rel="noopener noreferrer">Markdown Tool</a>
<a href="https://nix.colinknapp.com" id="nav-nix" target="_blank" rel="noopener noreferrer">NixOS Validator</a>
<a href="https://qr.colinknapp.com" id="nav-qrcode" target="_blank" rel="noopener noreferrer">QR Code Tool</a>
</div>
</li>
<li><a href="https://meet.colinknapp.com" id="nav-meet" target="_blank" rel="noopener noreferrer" title="No-account web meetings without software">Meet</a></li>
</ul>
</nav>
<div class="theme-switch">
<button id="themeToggle" aria-label="Theme mode: Auto" role="switch" aria-checked="false"
title="Toggle between light, dark, and auto theme modes" tabindex="0">🌓</button>
</div>
<nav class="main-nav">
<ul>
<li><a href="/" id="nav-portfolio">Portfolio</a></li>
<li class="dropdown">
<a href="/resumes/business-development.html" id="nav-resumes">Resumes</a>
<div class="dropdown-content">
<a href="/resumes/business-development.html" id="nav-businessdev">Business Development</a>
<a href="/resumes/devsecops.html" id="nav-devsecops">DevSecOps</a>
<a href="/resumes/team-leadership.html" id="nav-teamleadership">Team Leadership</a>
<a href="/resumes/tool-building.html" id="nav-toolbuilding">Tool Building</a>
</div>
</li>
<li class="dropdown">
<a href="/stories/" id="nav-stories">Stories</a>
<div class="dropdown-content">
<a href="/stories/airport-dns.html" id="nav-airportdns" class="nav-story-tbd">Airport Dns</a>
<a href="/stories/app-development.html" id="nav-appdevelopment" class="nav-story-written">App
Development</a>
<a href="/stories/athion-turnaround.html" id="nav-athionturnaround" class="nav-story-written">Athion
Turnaround</a>
<a href="/stories/fawe-plotsquared.html" id="nav-faweplotsquared" class="nav-story-tbd">Fawe
Plotsquared</a>
<a href="/stories/healthcare-platform.html" id="nav-healthcareplatform" class="nav-story-tbd">Healthcare
Platform</a>
<a href="/stories/home-infrastructure.html" id="nav-homeinfrastructure" class="nav-story-written">Home
Infrastructure</a>
<a href="/stories/motherboard-repair.html" id="nav-motherboardrepair"
class="nav-story-written">Motherboard Repair</a>
<a href="/stories/nitric-leadership.html" id="nav-nitricleadership" class="nav-story-tbd">Nitric
Leadership</a>
<a href="/stories/nuclear-dns.html" id="nav-nucleardns" class="nav-story-written">Nuclear Dns</a>
<a href="/stories/open-source-success.html" id="nav-opensourcesuccess" class="nav-story-written">Open
Source Success</a>
<a href="/stories/scansnap-webdav.html" id="nav-scansnapwebdav" class="nav-story-written">Scansnap
Webdav</a>
<a href="/stories/showerloop.html" id="nav-showerloop" class="nav-story-written">Showerloop</a>
<a href="/stories/viperwire.html" id="nav-viperwire" class="nav-story-written">Viperwire</a>
<a href="/stories/web-design-java.html" id="nav-webdesignjava" class="nav-story-written">Web Design
Java</a>
<a href="/stories/wordpress-security.html" id="nav-wordpresssecurity" class="nav-story-tbd">Wordpress
Security</a>
<a href="/stories/youtube-game-dev.html" id="nav-youtubegamedev" class="nav-story-written">Youtube Game
Dev</a>
</div>
</li>
<li class="dropdown">
<a href="/one-pager-tools/csv-tool.html" id="nav-tools">Tools</a>
<div class="dropdown-content">
<a href="/one-pager-tools/csv-tool.html" id="nav-csv">CSV Tool</a>
<a href="/one-pager-tools/utm-tool.html" id="nav-utm">UTM Builder</a>
<a href="https://md.colinknapp.com" id="nav-markdown" target="_blank" rel="noopener noreferrer">Markdown
Tool</a>
<a href="https://nix.colinknapp.com" id="nav-nix" target="_blank" rel="noopener noreferrer">NixOS
Validator</a>
<a href="https://qr.colinknapp.com" id="nav-qrcode" target="_blank" rel="noopener noreferrer">QR Code
Tool</a>
</div>
</li>
<li><a href="https://meet.colinknapp.com" id="nav-meet" target="_blank" rel="noopener noreferrer"
title="No-account web meetings without software">Meet</a></li>
</ul>
</nav>

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - DevSecOps consultant, cybersecurity expert, and open-source advocate. Explore resumes, project stories, and free tools.">
<title>Colin Knapp - DevSecOps & Cybersecurity Expert</title>
<link rel="stylesheet" href="styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
<style>
.hero {
text-align: center;

View File

@ -6,10 +6,10 @@
<meta name="description" content="Free browser-based CSV viewer tool. Paste CSV data to instantly view as formatted table with sorting, customizable delimiters, and client-side processing for privacy.">
<title>CSV Viewer Tool - Free Online CSV Parser</title>
<link rel="stylesheet" href="../styles.css">
<link rel="stylesheet" href="tool-styles.css?v=2" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="tool-styles.css?v=2" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<link rel="stylesheet" href="csv-tool-fix.css?v=2" integrity="sha256-5oTxos9Qxwhor3qIwHSM12YyIZi5E+tHuFdYER0hXoI=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
<script src="../utils.js" integrity="sha256-ryQsJ+aghKKD/CeXgx8jtsnZT3Epp3EjIw8RyHIq544="></script>
<style>
/* Additional inline styles to fix layout */

View File

@ -5,10 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - One Pager Tools">
<title>Colin Knapp Tools</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="tool-styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<link rel="stylesheet" href="tool-styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<script src="../utils.js" integrity="sha256-ryQsJ+aghKKD/CeXgx8jtsnZT3Epp3EjIw8RyHIq544=" crossorigin="anonymous"></script>
<!-- Add tool-specific scripts here -->
</head>

View File

@ -6,10 +6,10 @@
<meta name="description" content="Colin Knapp - Tool Example">
<title>Tool Example - Colin Knapp</title>
<link rel="stylesheet" href="../styles.css">
<link rel="stylesheet" href="tool-styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="tool-styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../utils.js" integrity="sha256-ryQsJ+aghKKD/CeXgx8jtsnZT3Epp3EjIw8RyHIq544="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
<script src="tool-example.js" defer></script>
</head>
<body>

View File

@ -6,9 +6,9 @@
<meta name="description" content="Free UTM URL builder tool. Generate tracking URLs with UTM parameters for marketing campaigns. Client-side processing for privacy.">
<title>UTM URL Generator - Free Campaign URL Builder</title>
<link rel="stylesheet" href="../styles.css">
<link rel="stylesheet" href="tool-styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="tool-styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
<style>
.utm-form {
display: grid;
@ -347,7 +347,7 @@
<!-- Footer Include -->
<div id="footer-include"></div>
<script src="utm-tool.js" integrity="sha256-f5yZtBrRofKWD/H5Hth5syEYPun+WicrCGxKzyzwZ6A="></script>
<script src="utm-tool.js" integrity="sha256-OCaMaX1b760MdMS5SEHYi8sKrGLV71QhLzQ+7cFuC3I="></script>
</body>
</html>

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - Business Development Resume: Revenue growth, client relations, and entrepreneurship experience.">
<title>Business Development - Colin Knapp Resume</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - DevSecOps Resume: Infrastructure, security automation, and compliance expertise.">
<title>DevSecOps - Colin Knapp Resume</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="DevSecOps consultant and cybersecurity expert. Led teams of 45+, built open-source tools with 10M+ downloads, and architected resilient infrastructure for government and healthcare clients.">
<title>Full Portfolio - Colin Knapp Resume</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - Team Leadership Resume: Management, mentorship, and distributed team coordination experience.">
<title>Team Leadership - Colin Knapp Resume</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - Tool Building Resume: Open source development, CI/CD, and custom software solutions.">
<title>Tool Building - Colin Knapp Resume</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Architected geographically redundant DNS infrastructure for Flint Bishop International Airport, achieving A+ resilience standards for critical aviation infrastructure.">
<title>Airport DNS Infrastructure - Resilient DNS Design</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Developed ad revenue tracking application for content creators with real-time analytics, secure API integrations, and data-driven content optimization tools.">
<title>Ad Revenue Tracking App for Influencers</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Revitalized struggling business into profitable operation in two weeks, developing revolutionary open-source tooling that powered major Minecraft projects.">
<title>Athion.net Business Turnaround - Colin Knapp</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Co-created FastAsyncWorldEdit and PlotSquared, scaling Minecraft world editing from 50K server-crashing edits to billions seamlessly, powering a $2B game brand.">
<title>FastAsyncWorldEdit & PlotSquared - Minecraft Tools</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Designed secure, scalable infrastructure for Improving MI Practices healthcare education platform with CIS Level 1-2 security standards and high availability.">
<title>Healthcare Platform Infrastructure - Secure Design</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,10 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Built self-hosted infrastructure cluster with 100+ services for data sovereignty and developed WireGuard mesh networking tool for quantum-resistant networking.">
<title>Home Infrastructure & WireGuard Mesh Networking</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Explore detailed case studies and project stories from Colin Knapp's portfolio: cybersecurity, infrastructure, open source development, and team leadership.">
<title>Project Stories & Case Studies - Colin Knapp</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
</head>
<body>

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Co-founded sustainable electronics repair company reducing e-waste through circuit board repairs and promoting environmental responsibility in tech industry.">
<title>MotherboardRepair.ca - Sustainable Tech Solutions</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Led distributed team of 45 contractors at Nitric Concepts, bootstrapping company to $4M revenue while implementing DevSecOps practices across timezones.">
<title>Nitric Concepts Leadership - Team Management</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Architected georedundant, nuclear war-resistant DNS cluster for government clients, ensuring extreme resilience and A+ security standards for critical infrastructure.">
<title>Nuclear War-Resistant DNS Infrastructure</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Transformed OhMyForm from abandoned project to thriving community with 32K+ Discord members, 10M+ Docker pulls, and sustainable funding model.">
<title>Open Source Community Success - OhMyForm</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -1,14 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Built high-performance ScanSnap scanner service processing ~1 receipt/second with batch capacity up to 50 documents, featuring automatic cleanup and WebDAV access.">
<meta name="description"
content="Built high-performance ScanSnap scanner service processing ~1 receipt/second with batch capacity up to 50 documents, featuring automatic cleanup and WebDAV access.">
<title>ScanSnap Scanner Service - Receipt Digitization</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->
<div id="header-include"></div>
@ -24,7 +28,8 @@
<p><strong>Timeframe:</strong> 2025-Present</p>
<p><strong>Role:</strong> Developer</p>
<p><strong>Technologies:</strong> Python, Windows & macOS Integration</p>
<p><strong>Client:</strong> <a href="https://buildersclub.ca" target="_blank" rel="noopener noreferrer">buildersclub.ca</a></p>
<p><strong>Client:</strong> <a href="https://buildersclub.ca" target="_blank"
rel="noopener noreferrer">buildersclub.ca</a></p>
</div>
<hr>
@ -32,9 +37,11 @@
<section class="project-overview">
<h2>Scanner Service Overview</h2>
<p>
For buildersclub.ca members, I created a simple web file server where the ScanSnap scanner can send documents directly.
For buildersclub.ca members, I created a simple web file server where the ScanSnap scanner can send
documents directly.
This makes digitizing receipts and documents fast and easy, with no special software required.
The service is available at <a href="http://192.168.1.119:9876" target="_blank">http://192.168.1.119:9876</a> on the clubhouse network.
The service is available at <a href="http://192.168.1.119:9876"
target="_blank">http://192.168.1.119:9876</a> on the clubhouse network.
</p>
<div class="highlight-box">
@ -47,7 +54,8 @@
<li><strong>Zero Maintenance:</strong> No user management required</li>
</ul>
<p class="highlight-note">
<strong>Access URL:</strong> <a href="http://192.168.1.119:9876" target="_blank">http://192.168.1.119:9876</a> (clubhouse network only)
<strong>Access URL:</strong> <a href="http://192.168.1.119:9876"
target="_blank">http://192.168.1.119:9876</a> (clubhouse network only)
</p>
</div>
</section>
@ -71,7 +79,8 @@
<li>Click in the address bar and enter <code>\\192.168.1.119@9876</code></li>
<li>Press Enter</li>
<li>The scanner folder appears in File Explorer</li>
<li>Alternatively, you can use "Map Network Drive" and enter <code>\\192.168.1.119@9876</code> as the folder</li>
<li>Alternatively, you can use "Map Network Drive" and enter <code>\\192.168.1.119@9876</code> as the
folder</li>
</ol>
<h3>Scanning Process</h3>
@ -95,7 +104,8 @@
<ul>
<li><strong>Time Savings:</strong> 95% reduction in document processing time</li>
<li><strong>Efficiency:</strong> Process 50 receipts in under 60 seconds</li>
<li><strong>Simplicity:</strong> No special software or training needed - just use your regular file browser</li>
<li><strong>Simplicity:</strong> No special software or training needed - just use your regular file
browser</li>
<li><strong>Compatibility:</strong> Works with both Windows and Mac computers</li>
<li><strong>Reliability:</strong> Automatic maintenance keeps the system running smoothly</li>
</ul>
@ -113,7 +123,8 @@
<ul>
<li><a href="../index.html">← Back to Portfolio</a></li>
<li><a href="https://buildersclub.ca" target="_blank" rel="noopener noreferrer">buildersclub.ca</a></li>
<li><strong>Scanner Access:</strong> <a href="http://192.168.1.119:9876" target="_blank">http://192.168.1.119:9876</a> (clubhouse network)</li>
<li><strong>Scanner Access:</strong> <a href="http://192.168.1.119:9876"
target="_blank">http://192.168.1.119:9876</a> (clubhouse network)</li>
</ul>
</div>
</div>
@ -121,4 +132,5 @@
<!-- Footer Include -->
<div id="footer-include"></div>
</body>
</html>

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Revitalized ShowerLoop website with WCAG 2.0 AA compliance, modern responsive design, and improved accessibility for innovative eco-friendly recirculating shower system.">
<title>ShowerLoop Project - Web Development & Accessibility</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,10 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - Story Example">
<title>Story Example - Colin Knapp</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - [Story Title] Case Study">
<title>[Story Title] - Colin Knapp Case Study</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>

View File

@ -1,16 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Built AI-powered cybersecurity consultancy ViperWire, delivering enterprise-grade security to SMBs with automated threat detection, reducing incident response time to 15 minutes.">
<meta name="description"
content="Built AI-powered cybersecurity consultancy ViperWire, delivering enterprise-grade security to SMBs with automated threat detection, reducing incident response time to 15 minutes.">
<title>ViperWire - AI-Powered Cybersecurity Consultancy</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY="
crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="
crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="
crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->
<div id="header-include"></div>
@ -23,7 +28,11 @@
</div>
<div class="story-content">
<p>In early 2023, I identified a critical gap in the cybersecurity market: small to medium-sized businesses were increasingly becoming targets for sophisticated cyber attacks, but lacked access to enterprise-grade security solutions that could adapt to rapidly evolving threats. This observation led to the creation of ViperWire, an AI-powered cybersecurity consultancy designed to democratize access to advanced security measures.</p>
<p>In early 2023, I identified a critical gap in the cybersecurity market: small to medium-sized businesses
were increasingly becoming targets for sophisticated cyber attacks, but lacked access to
enterprise-grade security solutions that could adapt to rapidly evolving threats. This observation led
to the creation of ViperWire, an AI-powered cybersecurity consultancy designed to democratize access to
advanced security measures.</p>
<h2>The Challenge</h2>
<p>The cybersecurity landscape in 2023 presented several unique challenges:</p>
@ -35,62 +44,94 @@
</ul>
<blockquote>
"The typical SMB faces the same threat actors as Fortune 500 companies, but with a fraction of the resources to defend themselves. This asymmetry creates a perfect storm where businesses are increasingly vulnerable while security solutions remain inaccessible."
"The typical SMB faces the same threat actors as Fortune 500 companies, but with a fraction of the
resources to defend themselves. This asymmetry creates a perfect storm where businesses are increasingly
vulnerable while security solutions remain inaccessible."
</blockquote>
<h2>The Approach</h2>
<p>I built ViperWire around three core principles that would differentiate it in the market:</p>
<h3>1. AI-Augmented Security Analysis</h3>
<p>Rather than attempting to replace human expertise with AI, I designed systems where AI tools augment human analysts, dramatically increasing their efficiency and effectiveness. This approach began with custom-built monitoring tools that use machine learning to identify behavioral anomalies and prioritize potential threats, allowing human experts to focus on the most critical issues.</p>
<p>Rather than attempting to replace human expertise with AI, I designed systems where AI tools augment
human analysts, dramatically increasing their efficiency and effectiveness. This approach began with
custom-built monitoring tools that use machine learning to identify behavioral anomalies and prioritize
potential threats, allowing human experts to focus on the most critical issues.</p>
<h3>2. Accessible Enterprise-Grade Protection</h3>
<p>By leveraging containerization, infrastructure-as-code, and modular security components, I created scalable security systems that could be rapidly deployed across organizations of varying sizes. This technical architecture allowed ViperWire to deliver enterprise-caliber protection at price points accessible to smaller organizations.</p>
<p>By leveraging containerization, infrastructure-as-code, and modular security components, I created
scalable security systems that could be rapidly deployed across organizations of varying sizes. This
technical architecture allowed ViperWire to deliver enterprise-caliber protection at price points
accessible to smaller organizations.</p>
<h3>3. Continuous Adaptation</h3>
<p>I implemented a continuous security improvement cycle that incorporated threat intelligence feeds, regular penetration testing, and automated vulnerability scanning. This approach ensured that security postures evolved in tandem with emerging threats rather than reacting after incidents occurred.</p>
<p>I implemented a continuous security improvement cycle that incorporated threat intelligence feeds,
regular penetration testing, and automated vulnerability scanning. This approach ensured that security
postures evolved in tandem with emerging threats rather than reacting after incidents occurred.</p>
<h2>Technical Implementation</h2>
<p>The technical architecture of ViperWire comprises several innovative components:</p>
<h3>Threat Detection Infrastructure</h3>
<p>I built a distributed monitoring system using a combination of open-source tools (Wazuh, Suricata, OSSEC) enhanced with custom machine learning models to detect anomalous network and system behaviors. The architecture utilizes Kubernetes for orchestration and Prometheus/Grafana for metrics visualization, with custom alerting thresholds tuned to each client's environment.</p>
<p>I built a distributed monitoring system using a combination of open-source tools (Wazuh, Suricata, OSSEC)
enhanced with custom machine learning models to detect anomalous network and system behaviors. The
architecture utilizes Kubernetes for orchestration and Prometheus/Grafana for metrics visualization,
with custom alerting thresholds tuned to each client's environment.</p>
<h3>Response Automation</h3>
<p>To counter the speed of modern attacks, I developed an automated response framework using Python and Ansible that could isolate compromised systems, revoke credentials, and implement temporary access controls within seconds of a confirmed threat detection. This system reduced the mean time to respond from hours to minutes, significantly limiting potential damage.</p>
<p>To counter the speed of modern attacks, I developed an automated response framework using Python and
Ansible that could isolate compromised systems, revoke credentials, and implement temporary access
controls within seconds of a confirmed threat detection. This system reduced the mean time to respond
from hours to minutes, significantly limiting potential damage.</p>
<h3>Security Assessment Pipeline</h3>
<p>For proactive security, I created an assessment pipeline incorporating static analysis, dynamic testing, and configuration auditing. This suite leverages Docker containers for consistent, reproducible security tests across different environments and includes custom scanners for emerging vulnerabilities not yet covered by commercial tools.</p>
<p>For proactive security, I created an assessment pipeline incorporating static analysis, dynamic testing,
and configuration auditing. This suite leverages Docker containers for consistent, reproducible security
tests across different environments and includes custom scanners for emerging vulnerabilities not yet
covered by commercial tools.</p>
<h2>Results & Impact</h2>
<p>In its first year, ViperWire has achieved several notable successes:</p>
<ul>
<li>Successfully prevented ransomware attacks at two clients who had been targeted, saving an estimated $500,000 in potential losses</li>
<li>Reduced security alert noise by 87% through improved detection algorithms, allowing for more focused attention on genuine threats</li>
<li>Successfully prevented ransomware attacks at two clients who had been targeted, saving an estimated
$500,000 in potential losses</li>
<li>Reduced security alert noise by 87% through improved detection algorithms, allowing for more focused
attention on genuine threats</li>
<li>Decreased mean time to detection of security incidents from 24+ hours to under 15 minutes</li>
<li>Enabled five small businesses to achieve compliance with industry security standards that were previously beyond their reach</li>
<li>Enabled five small businesses to achieve compliance with industry security standards that were
previously beyond their reach</li>
</ul>
<h2>Lessons Learned</h2>
<p>Building ViperWire has provided valuable insights into both technical and business aspects of cybersecurity:</p>
<p>Building ViperWire has provided valuable insights into both technical and business aspects of
cybersecurity:</p>
<h3>Technical Lessons</h3>
<p>The most effective security solutions combine multiple detection methodologies rather than relying on any single approach. Our hybrid model of behavioral analysis, signature detection, and anomaly identification proved far more effective than any individual method alone.</p>
<p>The most effective security solutions combine multiple detection methodologies rather than relying on any
single approach. Our hybrid model of behavioral analysis, signature detection, and anomaly
identification proved far more effective than any individual method alone.</p>
<p>Additionally, I discovered that properly tuned automation dramatically reduces false positives—the bane of many security operations—while still capturing genuine threats. The key was implementing progressive verification steps that validate alerts before triggering high-impact responses.</p>
<p>Additionally, I discovered that properly tuned automation dramatically reduces false positives—the bane
of many security operations—while still capturing genuine threats. The key was implementing progressive
verification steps that validate alerts before triggering high-impact responses.</p>
<h3>Business Lessons</h3>
<p>Perhaps most importantly, I learned that transparency builds trust in security services. By providing clients with clear visibility into threat detection processes and plainly explaining technical concepts, ViperWire was able to build stronger relationships and encourage better security practices within client organizations.</p>
<p>Perhaps most importantly, I learned that transparency builds trust in security services. By providing
clients with clear visibility into threat detection processes and plainly explaining technical concepts,
ViperWire was able to build stronger relationships and encourage better security practices within client
organizations.</p>
<h2>Future Directions</h2>
<p>Looking ahead, ViperWire is expanding into several promising areas:</p>
<ul>
<li>Developing specialized security solutions for IoT environments in manufacturing settings</li>
<li>Creating educational resources to help clients build internal security capabilities</li>
<li>Expanding AI capabilities to provide predictive threat intelligence specific to each client's industry</li>
<li>Expanding AI capabilities to provide predictive threat intelligence specific to each client's
industry</li>
</ul>
<p>The founding principle of ViperWire—that sophisticated security should be accessible to organizations of all sizes—continues to guide its evolution and growth.</p>
<p>The founding principle of ViperWire—that sophisticated security should be accessible to organizations of
all sizes—continues to guide its evolution and growth.</p>
</div>
<div class="story-footer">
@ -104,12 +145,14 @@
<div class="related-stories-list">
<div class="story-card">
<h2>WordPress Security Automation</h2>
<p class="story-excerpt">How I developed a Docker-based solution that eliminated persistent malware attacks on a high-profile website.</p>
<p class="story-excerpt">How I developed a Docker-based solution that eliminated persistent
malware attacks on a high-profile website.</p>
<a href="wordpress-security.html" class="story-link">Read Story</a>
</div>
<div class="story-card">
<h2>Healthcare Platform Infrastructure</h2>
<p class="story-excerpt">An in-depth look at the infrastructure design and security implementation for the Improving MI Practices healthcare platform.</p>
<p class="story-excerpt">An in-depth look at the infrastructure design and security
implementation for the Improving MI Practices healthcare platform.</p>
<a href="healthcare-platform.html" class="story-link">Read Story</a>
</div>
</div>
@ -120,4 +163,5 @@
<!-- Footer Include -->
<div id="footer-include"></div>
</body>
</html>

View File

@ -1,16 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Developed web solutions and Java plugins with Jenkins/GitLab CI/CD, WCAG 2.0 AA compliance, and comprehensive documentation for diverse client environments.">
<meta name="description"
content="Developed web solutions and Java plugins with Jenkins/GitLab CI/CD, WCAG 2.0 AA compliance, and comprehensive documentation for diverse client environments.">
<title>Web Design & Java Plugin Development</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY="
crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="
crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="
crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->
<div id="header-include"></div>
@ -18,18 +23,22 @@
<div class="container-fluid" role="main" id="main-content">
<div class="story-header">
<h1>Web Design & Java Plugin Development</h1>
<p class="story-meta">Category: Web Development, Java | Date: 2011-2023</p>
<p class="story-meta">Category: Web Development, Java | Date: 2011-2023</p>
<hr>
</div>
<div class="story-content">
<p>This case study details my extensive experience in web solution development and Java plugin creation, with a focus on implementing efficient CI/CD workflows and ensuring client satisfaction across diverse projects.</p>
<p>This case study details my extensive experience in web solution development and Java plugin creation,
with a focus on implementing efficient CI/CD workflows and ensuring client satisfaction across diverse
projects.</p>
<h2>The Challenge</h2>
<p>Creating high-quality web solutions and Java plugins that meet diverse client needs while maintaining efficient development workflows, accessibility standards, and comprehensive documentation.</p>
<p>Creating high-quality web solutions and Java plugins that meet diverse client needs while maintaining
efficient development workflows, accessibility standards, and comprehensive documentation.</p>
<blockquote>
"Effective web and plugin development requires not just technical expertise, but also a commitment to accessibility, documentation, and streamlined workflows."
"Effective web and plugin development requires not just technical expertise, but also a commitment to
accessibility, documentation, and streamlined workflows."
</blockquote>
<h2>The Approach</h2>
@ -53,10 +62,14 @@
</ul>
<h2>Results & Impact</h2>
<p>The implementation of these practices significantly enhanced project delivery speed and quality across diverse computing environments. Clients benefited from accessible, well-documented solutions that met their specific needs while maintaining high standards of quality and performance.</p>
<p>The implementation of these practices significantly enhanced project delivery speed and quality across
diverse computing environments. Clients benefited from accessible, well-documented solutions that met
their specific needs while maintaining high standards of quality and performance.</p>
<h2>Lessons Learned</h2>
<p>This work reinforced the importance of combining technical expertise with strong documentation practices and accessibility considerations. It also highlighted the value of efficient CI/CD pipelines in maintaining consistent quality across diverse projects and environments.</p>
<p>This work reinforced the importance of combining technical expertise with strong documentation practices
and accessibility considerations. It also highlighted the value of efficient CI/CD pipelines in
maintaining consistent quality across diverse projects and environments.</p>
</div>
<div class="story-footer">
@ -86,4 +99,5 @@
<!-- Footer Include -->
<div id="footer-include"></div>
</body>
</html>

View File

@ -5,11 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Created Docker-based automated WordPress malware removal tool that eliminated persistent attacks, reducing infection frequency from daily to zero for MLPP.">
<title>WordPress Security Automation - Malware Removal</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
<script src="../markdown-loader.js" integrity="sha256-qK8mCx0LUZwMtstjbkCOweh/Y+84XwFjcUQSEH4lCws="></script>
</head>
<body>
<!-- Header Include -->

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Developed custom Minecraft games for YouTube creators with 15M+ subscriber reach, implementing DDoS defense, anti-phishing protocols, and data privacy measures.">
<title>YouTube Game Development & Cybersecurity</title>
<link rel="stylesheet" href="../styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=" crossorigin="anonymous">
<link rel="stylesheet" href="../styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=" crossorigin="anonymous">
<script src="../theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg=" crossorigin="anonymous"></script>
<script src="../includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="stories.css" integrity="sha256-O+OMb48leSKvekhMTDUK1y6+WG9x33kA0eDw00wUwkY=">
</head>
<body>

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Colin Knapp - Template with Includes">
<title>Template with Includes - Colin Knapp</title>
<link rel="stylesheet" href="styles.css" integrity="sha256-nsutlmVxvyIyABk8i0fzVyO+ram8rkuTntoETIGcou8=">
<link rel="stylesheet" href="styles.css" integrity="sha256-tLnsiikQm2NSRAs2kbQC0RXVKxDn7vYaJnjcn1K9cFY=">
<script src="theme.js" integrity="sha256-+dDNTo7WAOmn2YC875+vn9oH4UkMwlVOGlARp2uq3A4="></script>
<script src="includes.js" integrity="sha256-CJbyPP0VWE+XrarLtjHMffGrI2GlTXXAXOce+NE+aQg="></script>
<script src="includes.js" integrity="sha256-9xjDTj+I8+VR4H5siP5/kVeCSZ/FLBk/sPCClevm4PE="></script>
</head>
<body>
<!-- Header Include -->