Fix favicon, resolve merge conflict, and remove markdown-loader from completed stories
This commit is contained in:
parent
fcd62e071a
commit
92d5ed0801
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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/')) {
|
||||
} 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');
|
||||
|
||||
// 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 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';
|
||||
|
|
|
|||
|
|
@ -6,28 +6,22 @@
|
|||
/* 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']);
|
||||
(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 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>
|
||||
<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">
|
||||
<nav class="main-nav">
|
||||
<ul>
|
||||
<li><a href="/" id="nav-portfolio">Portfolio</a></li>
|
||||
<li class="dropdown">
|
||||
|
|
@ -43,21 +37,33 @@
|
|||
<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/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/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>
|
||||
<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">
|
||||
|
|
@ -65,12 +71,15 @@
|
|||
<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>
|
||||
<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>
|
||||
<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>
|
||||
|
||||
</nav>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -23,13 +28,17 @@
|
|||
</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>
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
Loading…
Reference in New Issue