Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 57 additions & 2 deletions about.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,24 @@
--ink-2: #3D4870;
--muted: #C0BDB5;
--red: #e40000;
--accent: #CAFF33;
}
[data-theme="dark"] {
--bg: #111318;
--ink: #E6E1D6;
--ink-2: #9EA3B8;
--muted: #6B7280;
--accent: #CAFF33;
}

@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--bg: #111318;
--ink: #E6E1D6;
--ink-2: #9EA3B8;
--muted: #6B7280;
--accent: #CAFF33;
}
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
Expand Down Expand Up @@ -68,8 +86,7 @@
font-family: 'Questrial', sans-serif;
font-size: 0.85rem;
letter-spacing: 0.01em;
color: #1E2A5E;
background: #CAFF33;
background: var(--accent);
text-decoration: none;
padding: 0.45rem 1.1rem;
border-radius: 999px;
Expand All @@ -78,8 +95,11 @@
}

.nav-contact:hover { opacity: 0.85; transform: scale(1.03); }
a.nav-contact { color: #1E2A5E; }
.nav-linkedin { color: var(--ink); opacity: 0.5; display: flex; align-items: center; transition: opacity 0.15s; border: 1.5px solid currentColor; border-radius: 6px; padding: 2px 3px; }
.nav-linkedin:hover { opacity: 1; }
.nav-theme-toggle { background: none; border: 1.5px solid var(--ink); border-radius: 6px; padding: 2px 3px; color: var(--ink); opacity: 0.5; cursor: pointer; display: flex; align-items: center; transition: opacity 0.15s; font-size: 0; line-height: 0; }
.nav-theme-toggle:hover { opacity: 1; }

/* ─── BLOB HERO ─── */
.blob-section {
Expand Down Expand Up @@ -187,6 +207,7 @@
.nav-links a { font-size: 0.8rem; }
.nav-contact { font-size: 0.72rem; padding: 0.35rem 0.75rem; }
.nav-linkedin svg { width: 16px; height: 16px; }
.nav-theme-toggle { display: none; }
.blob-section { padding: 2rem 1.5rem 1.5rem; }
.about-identity { padding: 2rem 1.5rem 0; }
.about-data { padding: 0 1.5rem 2rem; }
Expand All @@ -205,6 +226,11 @@
<a href="http://linkedin.com/in/abedmonson" target="_blank" rel="noopener" class="nav-linkedin" aria-label="LinkedIn">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><circle cx="4.98" cy="3.5" r="2"/><rect x="3.5" y="8" width="2.97" height="13"/><path d="M9 8h3v1.8h.05c.42-.8 1.46-1.8 3-1.8 3.2 0 3.8 2.1 3.8 4.9V21H16v-7.5c0-1.8-.03-4-2.5-4-2.5 0-2.9 1.9-2.9 3.9V21H9V8z"/></svg>
</a>
<button class="nav-theme-toggle" id="themeToggle" aria-label="Toggle color mode">
<svg id="themeIcon" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
</svg>
</button>
<a href="mailto:austinbedmonson@gmail.com" class="nav-contact">Contact me</a>
</div>
</nav>
Expand Down Expand Up @@ -261,5 +287,34 @@ <h1 class="about-name">Austin Edmonson</h1>
<p>Whether it's a SaaS integration or my own product, I don't live by "good enough." I want things done quickly, thoroughly, safely — and with some pizzaz. That's the standard I hold for everything I touch.</p>
</div>


<script>
const root = document.documentElement;
const toggle = document.getElementById('themeToggle');
const icon = document.getElementById('themeIcon');

const sunSVG = `<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>`;
const moonSVG = `<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>`;

function isDark() {
const stored = localStorage.getItem('theme');
if (stored) return stored === 'dark';
return window.matchMedia('(prefers-color-scheme: dark)').matches;
}

function applyTheme(dark) {
root.setAttribute('data-theme', dark ? 'dark' : 'light');
icon.innerHTML = dark ? sunSVG : moonSVG;
toggle.setAttribute('aria-label', dark ? 'Switch to light mode' : 'Switch to dark mode');
}

applyTheme(isDark());

toggle.addEventListener('click', () => {
const next = root.getAttribute('data-theme') !== 'dark';
localStorage.setItem('theme', next ? 'dark' : 'light');
applyTheme(next);
});
</script>
</body>
</html>
78 changes: 68 additions & 10 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,28 @@
--ink: #1E2A5E;
--ink-2: #3D4870;
--muted: #C0BDB5;
--accent: #CAFF33;
--code-bg: rgba(30, 42, 94, 0.07);
}

[data-theme="dark"] {
--bg: #111318;
--ink: #E6E1D6;
--ink-2: #9EA3B8;
--muted: #6B7280;
--accent: #CAFF33;
--code-bg: rgba(255, 255, 255, 0.09);
}

@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--bg: #111318;
--ink: #E6E1D6;
--ink-2: #9EA3B8;
--muted: #6B7280;
--accent: #CAFF33;
--code-bg: rgba(255, 255, 255, 0.09);
}
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
Expand Down Expand Up @@ -67,8 +89,7 @@
font-family: 'Questrial', sans-serif;
font-size: 0.85rem;
letter-spacing: 0.01em;
color: #1E2A5E;
background: #CAFF33;
background: var(--accent);
text-decoration: none;
padding: 0.45rem 1.1rem;
border-radius: 999px;
Expand All @@ -77,9 +98,13 @@
}

.nav-contact:hover { opacity: 0.85; transform: scale(1.03); }
a.nav-contact { color: #1E2A5E; }
.nav-linkedin { color: var(--ink); opacity: 0.5; display: flex; align-items: center; transition: opacity 0.15s; border: 1.5px solid currentColor; border-radius: 6px; padding: 2px 3px; }
.nav-linkedin:hover { opacity: 1; }

.nav-theme-toggle { background: none; border: 1.5px solid var(--ink); border-radius: 6px; padding: 2px 3px; color: var(--ink); opacity: 0.5; cursor: pointer; display: flex; align-items: center; transition: opacity 0.15s; font-size: 0; line-height: 0; }
.nav-theme-toggle:hover { opacity: 1; }

/* ─── HERO ─── */
.hero {
padding: 5rem 3rem 8rem;
Expand All @@ -91,7 +116,6 @@
line-height: 1.04;
color: var(--ink);
letter-spacing: -0.02em;
text-shadow: 0 4px 16px rgba(30, 42, 94, 0.1);
}

.hero-h2 {
Expand All @@ -101,7 +125,6 @@
color: var(--ink);
letter-spacing: -0.02em;
margin-top: 0.2em;
text-shadow: 0 4px 16px rgba(30, 42, 94, 0.1);
}

.hero-body {
Expand Down Expand Up @@ -164,7 +187,7 @@

.work-item-title {
font-family: 'Rozha One', serif;
font-size: clamp(1.4rem, 2.5vw, 2rem);
font-size: 1.25rem;
line-height: 1.1;
color: var(--ink);
letter-spacing: -0.01em;
Expand All @@ -173,7 +196,7 @@

.work-item-desc {
font-family: 'Questrial', sans-serif;
font-size: 0.88rem;
font-size: 0.95rem;
line-height: 1.7;
color: var(--ink-2);
}
Expand Down Expand Up @@ -272,7 +295,7 @@

.writing-item-title {
font-family: 'Rozha One', serif;
font-size: clamp(1.3rem, 2.5vw, 1.9rem);
font-size: clamp(1.5rem, 2.2vw, 1.85rem);
line-height: 1.15;
letter-spacing: -0.01em;
margin-bottom: 0.25rem;
Expand Down Expand Up @@ -331,7 +354,7 @@

.oss-title {
font-family: 'Rozha One', serif;
font-size: 1.1rem;
font-size: 1.25rem;
line-height: 1.2;
letter-spacing: -0.01em;
color: var(--ink);
Expand All @@ -340,15 +363,15 @@

.oss-desc {
font-family: 'Questrial', sans-serif;
font-size: 0.84rem;
font-size: 0.95rem;
line-height: 1.65;
color: var(--ink-2);
}

.oss-desc code {
font-family: 'Courier New', monospace;
font-size: 0.82em;
background: rgba(30, 42, 94, 0.07);
background: var(--code-bg);
padding: 0.1em 0.35em;
border-radius: 3px;
color: var(--ink);
Expand Down Expand Up @@ -397,6 +420,7 @@
.nav-links a { font-size: 0.8rem; }
.nav-contact { font-size: 0.72rem; padding: 0.35rem 0.75rem; }
.nav-linkedin svg { width: 16px; height: 16px; }
.nav-theme-toggle { display: none; }
.hero { padding: 3.5rem 1.5rem 6rem; }
.hero-body { margin-top: 2.5rem; max-width: 100%; }
.glyph-strip { grid-template-columns: repeat(2, 1fr); height: auto; margin-bottom: 4rem; }
Expand All @@ -421,6 +445,11 @@
<a href="http://linkedin.com/in/abedmonson" target="_blank" rel="noopener" class="nav-linkedin" aria-label="LinkedIn">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><circle cx="4.98" cy="3.5" r="2"/><rect x="3.5" y="8" width="2.97" height="13"/><path d="M9 8h3v1.8h.05c.42-.8 1.46-1.8 3-1.8 3.2 0 3.8 2.1 3.8 4.9V21H16v-7.5c0-1.8-.03-4-2.5-4-2.5 0-2.9 1.9-2.9 3.9V21H9V8z"/></svg>
</a>
<button class="nav-theme-toggle" id="themeToggle" aria-label="Toggle color mode">
<svg id="themeIcon" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
</svg>
</button>
<a href="mailto:austinbedmonson@gmail.com" class="nav-contact">Contact me</a>
</div>
</nav>
Expand Down Expand Up @@ -565,5 +594,34 @@ <h3 class="writing-item-title">Terraform is Like a Dishwasher: Great for Daily L

</section>


<script>
const root = document.documentElement;
const toggle = document.getElementById('themeToggle');
const icon = document.getElementById('themeIcon');

const sunSVG = `<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>`;
const moonSVG = `<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>`;

function isDark() {
const stored = localStorage.getItem('theme');
if (stored) return stored === 'dark';
return window.matchMedia('(prefers-color-scheme: dark)').matches;
}

function applyTheme(dark) {
root.setAttribute('data-theme', dark ? 'dark' : 'light');
icon.innerHTML = dark ? sunSVG : moonSVG;
toggle.setAttribute('aria-label', dark ? 'Switch to light mode' : 'Switch to dark mode');
}

applyTheme(isDark());

toggle.addEventListener('click', () => {
const next = root.getAttribute('data-theme') !== 'dark';
localStorage.setItem('theme', next ? 'dark' : 'light');
applyTheme(next);
});
</script>
</body>
</html>
68 changes: 64 additions & 4 deletions writing/cicd-same-image.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,30 @@
--ink: #1E2A5E;
--ink-2: #3D4870;
--muted: #C0BDB5;
--accent: #CAFF33;
--code-bg: rgba(30, 42, 94, 0.07);
--pre-bg: rgba(30, 42, 94, 0.05);
}
[data-theme="dark"] {
--bg: #111318;
--ink: #E6E1D6;
--ink-2: #9EA3B8;
--muted: #6B7280;
--accent: #CAFF33;
--code-bg: rgba(255, 255, 255, 0.09);
--pre-bg: rgba(255, 255, 255, 0.06);
}

@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--bg: #111318;
--ink: #E6E1D6;
--ink-2: #9EA3B8;
--muted: #6B7280;
--accent: #CAFF33;
--code-bg: rgba(255, 255, 255, 0.09);
--pre-bg: rgba(255, 255, 255, 0.06);
}
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
Expand Down Expand Up @@ -65,17 +89,19 @@
.nav-contact {
font-family: 'Questrial', sans-serif;
font-size: 0.85rem;
color: #1E2A5E;
background: #CAFF33;
background: var(--accent);
text-decoration: none;
padding: 0.45rem 1.1rem;
border-radius: 999px;
transition: opacity 0.15s, transform 0.15s;
}

.nav-contact:hover { opacity: 0.85; transform: scale(1.03); }
a.nav-contact { color: #1E2A5E; }
.nav-linkedin { color: var(--ink); opacity: 0.5; display: flex; align-items: center; transition: opacity 0.15s; border: 1.5px solid currentColor; border-radius: 6px; padding: 2px 3px; }
.nav-linkedin:hover { opacity: 1; }
.nav-theme-toggle { background: none; border: 1.5px solid var(--ink); border-radius: 6px; padding: 2px 3px; color: var(--ink); opacity: 0.5; cursor: pointer; display: flex; align-items: center; transition: opacity 0.15s; font-size: 0; line-height: 0; }
.nav-theme-toggle:hover { opacity: 1; }

/* ─── POST ─── */
.post-wrap {
Expand Down Expand Up @@ -160,14 +186,14 @@
.post-body code {
font-family: 'Courier New', monospace;
font-size: 0.88em;
background: rgba(30, 42, 94, 0.07);
background: var(--code-bg);
padding: 0.1em 0.4em;
border-radius: 3px;
color: var(--ink);
}

.post-body pre {
background: rgba(30, 42, 94, 0.05);
background: var(--pre-bg);
border: 1px solid var(--muted);
border-radius: 8px;
padding: 1.25rem 1.5rem;
Expand Down Expand Up @@ -237,6 +263,11 @@
<a href="http://linkedin.com/in/abedmonson" target="_blank" rel="noopener" class="nav-linkedin" aria-label="LinkedIn">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><circle cx="4.98" cy="3.5" r="2"/><rect x="3.5" y="8" width="2.97" height="13"/><path d="M9 8h3v1.8h.05c.42-.8 1.46-1.8 3-1.8 3.2 0 3.8 2.1 3.8 4.9V21H16v-7.5c0-1.8-.03-4-2.5-4-2.5 0-2.9 1.9-2.9 3.9V21H9V8z"/></svg>
</a>
<button class="nav-theme-toggle" id="themeToggle" aria-label="Toggle color mode">
<svg id="themeIcon" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
</svg>
</button>
<a href="mailto:austinbedmonson@gmail.com" class="nav-contact">Contact me</a>
</div>
</nav>
Expand Down Expand Up @@ -518,5 +549,34 @@ <h1 class="post-title">We Stopped Trusting Deployments Until We Fixed This</h1>
document.getElementById('post-content').innerHTML =
marked.parse(document.getElementById('md').textContent.trim());
</script>

<script>
const root = document.documentElement;
const toggle = document.getElementById('themeToggle');
const icon = document.getElementById('themeIcon');

const sunSVG = `<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>`;
const moonSVG = `<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>`;

function isDark() {
const stored = localStorage.getItem('theme');
if (stored) return stored === 'dark';
return window.matchMedia('(prefers-color-scheme: dark)').matches;
}

function applyTheme(dark) {
root.setAttribute('data-theme', dark ? 'dark' : 'light');
icon.innerHTML = dark ? sunSVG : moonSVG;
toggle.setAttribute('aria-label', dark ? 'Switch to light mode' : 'Switch to dark mode');
}

applyTheme(isDark());

toggle.addEventListener('click', () => {
const next = root.getAttribute('data-theme') !== 'dark';
localStorage.setItem('theme', next ? 'dark' : 'light');
applyTheme(next);
});
</script>
</body>
</html>
Loading
Loading