From 63fe306ab5aace014dd01c6112269bd13e424202 Mon Sep 17 00:00:00 2001 From: ausbernard <109692469+ausbernard@users.noreply.github.com> Date: Wed, 22 Jul 2026 15:14:44 -0400 Subject: [PATCH] feat: redesign hero, unify site typography/spacing, and polish nav - Homepage hero: asymmetric split layout, larger portrait, tightened copy, restrained entrance motion - Homepage Engineering Impact/Writing/Work sections: replace hairline divider lists with card/spacing-based layouts, promote eyebrow labels to real headings, merge duplicate Home Depot entries in Work - Roll the same fixes (hairline dividers, eyebrow labels, em-dashes) out to About, Uses, Projects, and the Writing index page for consistency - Article pages: computed reading time, entrance motion, consistent hover accent, back-link aria-label, 16px hero image radius - Nav: drop redundant "Home" link, add bold active-page state, move theme toggle out of the mobile dropdown into the header row so it's reachable without opening the menu; toggle now swaps sun/moon icon - Retire the teal accent in favor of a single pink accent site-wide - Separate the external-link arrow from tech-stack tags on the Projects page into its own hover-responsive icon - Correct engineer/repository counts (5,000+ / 52,000+) across homepage, About, and the CI/CD Platform case study Co-Authored-By: Claude Sonnet 5 --- about.html | 67 ++- index.html | 512 +++++++++++++----- projects/index.html | 103 ++-- uses.html | 67 ++- work/ai-developer-workflows.html | 42 +- work/cicd-platform.html | 48 +- work/enterprise-ai-adoption.html | 42 +- work/github-actions-platform.html | 46 +- writing/cicd-same-image.html | 71 ++- writing/hexagonal-architecture-didnt-fit.html | 71 ++- writing/index.html | 152 +++--- writing/llm-non-determinism.html | 71 ++- ...verengineering-operational-exhaustion.html | 71 ++- writing/partida-technical-breakdown.html | 71 ++- 14 files changed, 1034 insertions(+), 400 deletions(-) diff --git a/about.html b/about.html index 1f9bfaf..c0ce25a 100644 --- a/about.html +++ b/about.html @@ -72,6 +72,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -79,9 +85,13 @@ font-weight: 200; } - nav a:hover, + nav a:hover { + color: var(--ink); + } + nav a.active { color: var(--ink); + font-weight: 600; } .theme-toggle { @@ -153,8 +163,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -224,12 +234,11 @@ margin-top: 56px; } - .section-label { - font-size: 13px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.06em; - color: var(--muted); + .about-heading { + font-size: 20px; + font-weight: 700; + letter-spacing: -0.005em; + color: var(--ink); margin: 0 0 16px; } @@ -256,6 +265,7 @@ .connect-list { display: flex; flex-direction: column; + gap: 4px; } .connect-list a { @@ -265,7 +275,6 @@ padding: 14px 10px; margin: 0 -10px; border-radius: 8px; - border-bottom: 1px solid var(--border); color: var(--ink); font-size: 16px; font-weight: 600; @@ -273,10 +282,6 @@ transition: background-color 0.2s ease; } - .connect-list a:last-child { - border-bottom: none; - } - .connect-list a:hover { background: rgba(26, 26, 26, 0.05); } @@ -387,22 +392,24 @@ Austin Edmonson - - - + + +
@@ -410,10 +417,10 @@

I'm Austin. I build internal platforms that make thousands of engineers faster.

Austin Edmonson -

6+ years across DevOps, platform engineering, and software engineering. Self-taught but not self-made. I have benefitted from working with brilliant engineers and managers throughout my career - and learning alongside them. I collaborate across teams exceptionally well and I thrive in ambiguity and drive results. Started as a DevOps intern at Shadow Soft, moved into a Systems Engineer role at Acoustic AI, then joined The Home Depot, where I now own end-to-end CI/CD pipeline architecture for a 3,000+ developer organization. Alongside that, I'm the sole founder and developer of Partida, an immigration case management platform for families relocating to Portugal.

+

6+ years across DevOps, platform engineering, and software engineering. Self-taught but not self-made. I have benefitted from working with brilliant engineers and managers throughout my career - and learning alongside them. I collaborate across teams exceptionally well and I thrive in ambiguity and drive results. Started as a DevOps intern at Shadow Soft, moved into a Systems Engineer role at Acoustic AI, then joined The Home Depot, where I now own end-to-end CI/CD pipeline architecture for a 5,000+ developer organization. Alongside that, I'm the sole founder and developer of Partida, an immigration case management platform for families relocating to Portugal.

- +

How I Work

  • Self-taught, by necessity. I'm good at finding the right resource, making sense of it fast, and turning unclear problems into working systems.
  • AI as a multiplier, not a shortcut. Claude and Copilot compress the time it takes to get from ambiguity to clarity — the engineering judgment still has to be mine.
  • @@ -423,7 +430,7 @@

    I'm Austin. I build internal platforms that make thou

- +

Connect

@@ -471,12 +478,22 @@

I'm Austin. I build internal platforms that make thou return window.matchMedia('(prefers-color-scheme: dark)').matches; } - html.classList.toggle('dark-mode', isDark()); + var sunIcon = ''; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })(); diff --git a/index.html b/index.html index da3ddda..ce7d997 100644 --- a/index.html +++ b/index.html @@ -72,6 +72,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -152,8 +158,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -174,27 +180,65 @@ } html.dark-mode .hero-avatar { - border: 3px solid #FFFFFF; + border: 4px solid #FFFFFF; + } + + html.dark-mode .hero-portrait-ring { + opacity: 0.35; } main { max-width: 640px; margin: 0 auto; - padding: 48px 24px 120px; + padding: 0 24px 120px; + } + + .hero { + border-bottom: 1px solid var(--border); + padding: 48px 24px 40px; + } + + .hero-inner { + max-width: 1120px; + margin: 0 auto; + display: flex; + flex-direction: column; + align-items: stretch; + gap: 28px; + } + + .hero-portrait-wrap { + position: relative; + width: 112px; + height: 112px; + margin: 0 auto; + order: -1; + } + + .hero-portrait-ring { + position: absolute; + inset: -14px; + border-radius: 50%; + background: var(--border); + opacity: 0.55; + z-index: 0; } .hero-avatar { - width: 64px; - height: 64px; + position: relative; + z-index: 1; + width: 100%; + height: 100%; border-radius: 50%; object-fit: cover; display: block; - margin: 0 0 20px; } .hero-name { - font-size: 40px; + font-size: clamp(2.25rem, 4vw + 1.4rem, 2.375rem); font-weight: 700; + line-height: 1.15; + letter-spacing: -0.01em; color: var(--ink); margin: 0; } @@ -204,13 +248,57 @@ font-weight: 400; color: var(--muted); line-height: 1.6; - margin: 20px 0 0; + max-width: 46ch; + margin: 16px 0 0; } .social-row { display: flex; gap: 12px; - margin-top: 24px; + margin-top: 28px; + } + + @media (min-width: 860px) { + .hero { + padding: 72px 24px 64px; + } + + .hero-inner { + display: grid; + grid-template-columns: 1fr 320px; + align-items: center; + gap: 64px; + } + + .hero-portrait-wrap { + width: 300px; + height: 300px; + margin: 0; + order: 0; + } + + .hero-name { + font-size: clamp(2.25rem, 2vw + 1.6rem, 2.5rem); + } + } + + @media (prefers-reduced-motion: no-preference) { + .hero-portrait-wrap, + .hero-name, + .hero-subtext, + .hero-content .social-row { + animation: hero-rise 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; + } + + .hero-portrait-wrap { animation-delay: 0s; } + .hero-name { animation-delay: 0.08s; } + .hero-subtext { animation-delay: 0.16s; } + .hero-content .social-row { animation-delay: 0.24s; } + } + + @keyframes hero-rise { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } } .social-box { @@ -226,8 +314,8 @@ } .social-box:hover { - border-color: #3EC6B0; - color: #3EC6B0; + border-color: #EC4899; + color: #EC4899; } .social-box svg { @@ -235,19 +323,10 @@ height: 18px; } - section { + main section { margin-top: 56px; } - .section-label { - font-size: 13px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.06em; - color: var(--muted); - margin: 0 0 16px; - } - .impact-list { display: flex; flex-direction: column; @@ -299,6 +378,151 @@ margin: 4px 0 0; } + .impact-heading { + font-size: 20px; + font-weight: 700; + letter-spacing: -0.005em; + color: var(--ink); + margin: 0 0 16px; + } + + .impact-grid { + display: flex; + flex-direction: column; + gap: 12px; + } + + .impact-card { + display: block; + padding: 20px; + border: 1px solid var(--border); + border-radius: 16px; + text-decoration: none; + color: var(--ink); + transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.2s ease, box-shadow 0.2s ease; + } + + .impact-card:hover { + transform: translateY(-2px); + border-color: var(--ink); + box-shadow: 0 10px 24px rgba(26, 26, 26, 0.08); + } + + .impact-card-featured { + background: rgba(236, 72, 153, 0.05); + border-color: rgba(236, 72, 153, 0.25); + } + + .impact-card-featured:hover { + border-color: #EC4899; + box-shadow: 0 10px 24px rgba(236, 72, 153, 0.12); + } + + .impact-stat-row { + display: flex; + gap: 28px; + margin: 0 0 18px; + } + + .impact-stat-number { + font-size: 28px; + font-weight: 700; + letter-spacing: -0.01em; + color: var(--ink); + margin: 0; + } + + .impact-stat-label { + font-size: 13px; + font-weight: 400; + color: var(--muted); + margin: 2px 0 0; + } + + .impact-card-head { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 12px; + } + + .impact-card-title { + font-size: 16px; + font-weight: 600; + color: var(--ink); + margin: 0; + } + + .impact-card-arrow { + color: #EC4899; + font-size: 16px; + flex-shrink: 0; + transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1); + } + + .impact-card:hover .impact-card-arrow { + transform: translateX(3px); + } + + .impact-card-subtitle { + font-size: 14px; + font-weight: 400; + color: var(--muted); + margin: 4px 0 0; + } + + .writing-list { + display: flex; + flex-direction: column; + gap: 28px; + } + + .writing-item { + display: block; + text-decoration: none; + color: var(--ink); + } + + .writing-item-head { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 16px; + } + + .writing-item-title { + font-size: 18px; + font-weight: 600; + letter-spacing: -0.005em; + color: var(--ink); + margin: 0; + transition: color 0.2s ease; + } + + .writing-item:hover .writing-item-title { + color: #EC4899; + } + + .writing-item-arrow { + color: #EC4899; + font-size: 16px; + flex-shrink: 0; + transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1); + } + + .writing-item:hover .writing-item-arrow { + transform: translateX(3px); + } + + .writing-item-subtitle { + font-size: 14px; + font-weight: 400; + line-height: 1.55; + color: var(--muted); + max-width: 60ch; + margin: 8px 0 0; + } + .work-card { border: 1px solid var(--border); border-radius: 16px; @@ -387,34 +611,45 @@ min-width: 0; } - .work-header { + .work-company { + font-size: 16px; + font-weight: 600; + color: var(--ink); + margin: 0 0 8px; + } + + .work-stints { + display: flex; + flex-direction: column; + gap: 6px; + } + + .work-stint { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; } - .work-title { - font-size: 16px; - font-weight: 600; - color: var(--ink); - margin: 0; - } - - .work-subtitle { + .work-role { font-size: 14px; font-weight: 400; color: var(--muted); - margin: 3px 0 0; + margin: 0; } .work-dates { - font-size: 14px; + font-size: 13px; color: var(--muted); white-space: nowrap; flex-shrink: 0; } + .work-dates-current { + color: var(--ink); + font-weight: 600; + } + @@ -430,151 +665,172 @@ Austin Edmonson

- - - + + + -
- Austin Edmonson -

I build internal platforms that make thousands of engineers faster.

-

Senior Platform Engineer focused on developer experience, CI/CD, Kubernetes, and AI-assisted software delivery.

-

I design systems that remove friction from the software development lifecycle so engineering teams can ship software faster, safer, and with more confidence.

- - - - - + + +
@@ -342,12 +350,22 @@

Enterprise AI Adoption

return window.matchMedia('(prefers-color-scheme: dark)').matches; } - html.classList.toggle('dark-mode', isDark()); + var sunIcon = ''; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })(); diff --git a/work/github-actions-platform.html b/work/github-actions-platform.html index 8bc3302..40f81e9 100644 --- a/work/github-actions-platform.html +++ b/work/github-actions-platform.html @@ -71,6 +71,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -151,8 +157,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -194,7 +200,7 @@ .back-link:hover { border-color: var(--ink); - color: #3EC6B0; + color: #EC4899; } .case-title { @@ -261,7 +267,7 @@ .case-list li::before { content: "•"; - color: #3EC6B0; + color: #EC4899; flex-shrink: 0; } @@ -280,8 +286,8 @@ } .case-link:hover { - color: #3EC6B0; - text-decoration-color: #3EC6B0; + color: #EC4899; + text-decoration-color: #EC4899; } @@ -299,22 +305,24 @@ Austin Edmonson - - - + + +
@@ -409,12 +417,22 @@

GitHub Actions Runner Platform

return window.matchMedia('(prefers-color-scheme: dark)').matches; } - html.classList.toggle('dark-mode', isDark()); + var sunIcon = ''; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })(); diff --git a/writing/cicd-same-image.html b/writing/cicd-same-image.html index c155b07..1947708 100644 --- a/writing/cicd-same-image.html +++ b/writing/cicd-same-image.html @@ -72,6 +72,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -79,9 +85,13 @@ font-weight: 200; } - nav a:hover, + nav a:hover { + color: var(--ink); + } + nav a.active { color: var(--ink); + font-weight: 600; } .theme-toggle { @@ -153,8 +163,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -195,8 +205,8 @@ } .post-back:hover { - color: var(--ink); - border-color: var(--ink); + color: #EC4899; + border-color: #EC4899; } .post-title { @@ -218,10 +228,27 @@ width: 100%; max-height: 320px; object-fit: cover; - border-radius: 12px; + border-radius: 16px; margin-top: 32px; } + @media (prefers-reduced-motion: no-preference) { + .post-title, + .post-date, + .post-hero { + animation: post-rise 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; + } + + .post-title { animation-delay: 0s; } + .post-date { animation-delay: 0.08s; } + .post-hero { animation-delay: 0.16s; } + } + + @keyframes post-rise { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } + } + .post-body { margin-top: 40px; font-size: 17px; @@ -338,28 +365,30 @@ Austin Edmonson - - - + + +
- ← + ←

We Stopped Trusting Deployments Until We Fixed This

- + Painting of a city skyline at dusk with a translucent square overlay and a building glowing orange @@ -655,12 +684,22 @@

What I Learned

return window.matchMedia('(prefers-color-scheme: dark)').matches; } - html.classList.toggle('dark-mode', isDark()); + var sunIcon = ''; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })(); diff --git a/writing/hexagonal-architecture-didnt-fit.html b/writing/hexagonal-architecture-didnt-fit.html index bffe1a5..c6f6be0 100644 --- a/writing/hexagonal-architecture-didnt-fit.html +++ b/writing/hexagonal-architecture-didnt-fit.html @@ -72,6 +72,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -79,9 +85,13 @@ font-weight: 200; } - nav a:hover, + nav a:hover { + color: var(--ink); + } + nav a.active { color: var(--ink); + font-weight: 600; } .theme-toggle { @@ -153,8 +163,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -195,8 +205,8 @@ } .post-back:hover { - color: var(--ink); - border-color: var(--ink); + color: #EC4899; + border-color: #EC4899; } .post-title { @@ -218,10 +228,27 @@ width: 100%; max-height: 320px; object-fit: cover; - border-radius: 12px; + border-radius: 16px; margin-top: 32px; } + @media (prefers-reduced-motion: no-preference) { + .post-title, + .post-date, + .post-hero { + animation: post-rise 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; + } + + .post-title { animation-delay: 0s; } + .post-date { animation-delay: 0.08s; } + .post-hero { animation-delay: 0.16s; } + } + + @keyframes post-rise { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } + } + .post-body { margin-top: 40px; font-size: 17px; @@ -338,28 +365,30 @@ Austin Edmonson - - - + + +
- ← + ←

Why Hexagonal Architecture Didn't Fit My Enterprise Reality

- + Grid of blurred, ghostlike figures walking past a translucent screen, each marked with a small dot, evoking repeated observation and pattern @@ -431,12 +460,22 @@

So what now?

return window.matchMedia('(prefers-color-scheme: dark)').matches; } - html.classList.toggle('dark-mode', isDark()); + var sunIcon = ''; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })(); diff --git a/writing/index.html b/writing/index.html index 843cd54..71d574c 100644 --- a/writing/index.html +++ b/writing/index.html @@ -72,6 +72,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -79,9 +85,13 @@ font-weight: 200; } - nav a:hover, + nav a:hover { + color: var(--ink); + } + nav a.active { color: var(--ink); + font-weight: 600; } .theme-toggle { @@ -153,8 +163,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -206,6 +216,7 @@ .article-list { display: flex; flex-direction: column; + gap: 6px; } .article-item { @@ -213,7 +224,6 @@ padding: 24px 16px; margin: 0 -16px; border-radius: 10px; - border-bottom: 1px solid var(--border); text-decoration: none; color: inherit; transition: background-color 0.2s ease; @@ -223,10 +233,6 @@ background: rgba(26, 26, 26, 0.05); } - .article-item:last-child { - border-bottom: none; - } - .article-date { font-size: 13px; color: var(--muted); @@ -253,12 +259,11 @@ top: 88px; } - .work-sidebar .section-label { - font-size: 13px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.06em; - color: var(--muted); + .work-heading { + font-size: 20px; + font-weight: 700; + letter-spacing: -0.005em; + color: var(--ink); margin: 0 0 16px; } @@ -350,34 +355,45 @@ min-width: 0; } - .work-header { + .work-company { + font-size: 16px; + font-weight: 600; + color: var(--ink); + margin: 0 0 8px; + } + + .work-stints { + display: flex; + flex-direction: column; + gap: 6px; + } + + .work-stint { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; } - .work-title { - font-size: 16px; - font-weight: 600; - color: var(--ink); - margin: 0; - } - - .work-subtitle { + .work-role { font-size: 14px; font-weight: 400; color: var(--muted); - margin: 3px 0 0; + margin: 0; } .work-dates { - font-size: 14px; + font-size: 13px; color: var(--muted); white-space: nowrap; flex-shrink: 0; } + .work-dates-current { + color: var(--ink); + font-weight: 600; + } + @media (max-width: 800px) { .page-layout { grid-template-columns: 1fr; @@ -435,22 +451,24 @@ Austin Edmonson - - - + + +
@@ -462,13 +480,13 @@

Writing

Why Hexagonal Architecture Didn't Fit My Enterprise Reality

-

Hexagonal, Clean, DDD—the vocabulary assumes one team owns every layer. But when ten teams own ten layers, the pressure you're actually managing is different. And nobody's named it yet.

+

Hexagonal, Clean, DDD: the vocabulary assumes one team owns every layer. When ten teams own ten layers, the pressure is different, and nobody's named it yet.

Building Partida: A Technical Breakdown

-

Real bugs, real code, real numbers — the split Base import, the Alembic surprise, the enum-as-primary-key that broke at scale.

+

Real bugs, real code, real numbers: the split Base import, the Alembic surprise, the enum-as-primary-key that broke at scale.

@@ -492,55 +510,53 @@

LLMs and Non-Determinism in Engineering

- +

Work

-
-

The Home Depot

- 2025 — Present +

The Home Depot

+
+
+

Senior Software Engineer

+ 2025 - Present +
+
+

Software Engineer I & II

+ 2022 - 2025 +
+
-

Senior Software Engineer

-
-
-
- -
-
-

The Home Depot

- 2022 — 2025 -
-

Software Engineer I & II

-
-
-

Acoustic AI

- 2020 +

Acoustic AI

+
+
+

Systems Engineer

+ 2020 +
+
-

Systems Engineer

-
-
-

Shadow Soft

- 2019 — 2020 +

Shadow Soft

+
+
+

DevOps Intern

+ 2019 - 2020 +
+
-

DevOps Intern

-
@@ -582,12 +598,22 @@

LLMs and Non-Determinism in Engineering

return window.matchMedia('(prefers-color-scheme: dark)').matches; } - html.classList.toggle('dark-mode', isDark()); + var sunIcon = ''; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })(); diff --git a/writing/llm-non-determinism.html b/writing/llm-non-determinism.html index 8fdd46b..5416e0e 100644 --- a/writing/llm-non-determinism.html +++ b/writing/llm-non-determinism.html @@ -72,6 +72,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -79,9 +85,13 @@ font-weight: 200; } - nav a:hover, + nav a:hover { + color: var(--ink); + } + nav a.active { color: var(--ink); + font-weight: 600; } .theme-toggle { @@ -153,8 +163,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -195,8 +205,8 @@ } .post-back:hover { - color: var(--ink); - border-color: var(--ink); + color: #EC4899; + border-color: #EC4899; } .post-title { @@ -218,10 +228,27 @@ width: 100%; max-height: 320px; object-fit: cover; - border-radius: 12px; + border-radius: 16px; margin-top: 32px; } + @media (prefers-reduced-motion: no-preference) { + .post-title, + .post-date, + .post-hero { + animation: post-rise 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; + } + + .post-title { animation-delay: 0s; } + .post-date { animation-delay: 0.08s; } + .post-hero { animation-delay: 0.16s; } + } + + @keyframes post-rise { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } + } + .post-body { margin-top: 40px; font-size: 17px; @@ -338,28 +365,30 @@
Austin Edmonson
- - - + + +
- ← + ←

LLMs and Non-Determinism in Engineering

- + Abstract illustration of wavy blue and white bands with node points and connecting curves, evoking a data or vector field @@ -427,12 +456,22 @@

LLMs and Non-Determinism in Engineering

return window.matchMedia('(prefers-color-scheme: dark)').matches; } - html.classList.toggle('dark-mode', isDark()); + var sunIcon = ''; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })(); diff --git a/writing/overengineering-operational-exhaustion.html b/writing/overengineering-operational-exhaustion.html index a0a66e0..0e68657 100644 --- a/writing/overengineering-operational-exhaustion.html +++ b/writing/overengineering-operational-exhaustion.html @@ -72,6 +72,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -79,9 +85,13 @@ font-weight: 200; } - nav a:hover, + nav a:hover { + color: var(--ink); + } + nav a.active { color: var(--ink); + font-weight: 600; } .theme-toggle { @@ -153,8 +163,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -195,8 +205,8 @@ } .post-back:hover { - color: var(--ink); - border-color: var(--ink); + color: #EC4899; + border-color: #EC4899; } .post-title { @@ -218,10 +228,27 @@ width: 100%; max-height: 320px; object-fit: cover; - border-radius: 12px; + border-radius: 16px; margin-top: 32px; } + @media (prefers-reduced-motion: no-preference) { + .post-title, + .post-date, + .post-hero { + animation: post-rise 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; + } + + .post-title { animation-delay: 0s; } + .post-date { animation-delay: 0.08s; } + .post-hero { animation-delay: 0.16s; } + } + + @keyframes post-rise { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } + } + .post-body { margin-top: 40px; font-size: 17px; @@ -338,28 +365,30 @@ Austin Edmonson - - - + + +
- ← + ←

We Were Overengineering Ourselves Into Operational Exhaustion

- + A circular hole cut through a grassy hill, opening onto a blue sky with clouds @@ -534,12 +563,22 @@

Overengineering rarely feels like overengineering while you're building it'; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })(); diff --git a/writing/partida-technical-breakdown.html b/writing/partida-technical-breakdown.html index cc04929..aabc6a4 100644 --- a/writing/partida-technical-breakdown.html +++ b/writing/partida-technical-breakdown.html @@ -72,6 +72,12 @@ gap: 28px; } + .header-controls { + display: flex; + align-items: center; + gap: 28px; + } + nav a { color: var(--muted); text-decoration: none; @@ -79,9 +85,13 @@ font-weight: 200; } - nav a:hover, + nav a:hover { + color: var(--ink); + } + nav a.active { color: var(--ink); + font-weight: 600; } .theme-toggle { @@ -153,8 +163,8 @@ padding: 12px 0; } - nav .theme-toggle { - margin-top: 8px; + .header-controls { + gap: 12px; } } @@ -195,8 +205,8 @@ } .post-back:hover { - color: var(--ink); - border-color: var(--ink); + color: #EC4899; + border-color: #EC4899; } .post-title { @@ -218,10 +228,27 @@ width: 100%; max-height: 320px; object-fit: cover; - border-radius: 12px; + border-radius: 16px; margin-top: 32px; } + @media (prefers-reduced-motion: no-preference) { + .post-title, + .post-date, + .post-hero { + animation: post-rise 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; + } + + .post-title { animation-delay: 0s; } + .post-date { animation-delay: 0.08s; } + .post-hero { animation-delay: 0.16s; } + } + + @keyframes post-rise { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } + } + .post-body { margin-top: 40px; font-size: 17px; @@ -338,28 +365,30 @@ Austin Edmonson - - - + + +
- ← + ←

Building Partida: A Technical Breakdown

- + Surreal collage of a chalk cliff face fitted with windows like an apartment building, overlooking the sea @@ -583,12 +612,22 @@

Where It Stands

return window.matchMedia('(prefers-color-scheme: dark)').matches; } - html.classList.toggle('dark-mode', isDark()); + var sunIcon = ''; + var moonIcon = ''; + + function updateIcon(dark) { + toggle.innerHTML = dark ? moonIcon : sunIcon; + } + + var dark = isDark(); + html.classList.toggle('dark-mode', dark); + updateIcon(dark); toggle.addEventListener('click', function() { var next = !html.classList.contains('dark-mode'); localStorage.setItem('theme', next ? 'dark' : 'light'); html.classList.toggle('dark-mode', next); + updateIcon(next); }); })();