<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sean Boult</title>
    <description>The latest articles on DEV Community by Sean Boult (@hacksore).</description>
    <link>https://dev.to/hacksore</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png</url>
      <title>DEV Community: Sean Boult</title>
      <link>https://dev.to/hacksore</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hacksore"/>
    <language>en</language>
    <item>
      <title>Homebrew Has a Desktop App Now</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sun, 20 Sep 2026 17:34:03 +0000</pubDate>
      <link>https://dev.to/hacksore/homebrew-has-a-desktop-app-now-3ojm</link>
      <guid>https://dev.to/hacksore/homebrew-has-a-desktop-app-now-3ojm</guid>
      <description>&lt;p&gt;I have a lot of packages on macOS and my package manager of choice is &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With &lt;a href="https://brew.sh/2026/09/13/homebrew-7.0.0/" rel="noopener noreferrer"&gt;Homebrew 7.0&lt;/a&gt;, there is now a GUI application called &lt;a href="https://github.com/Homebrew/brewui" rel="noopener noreferrer"&gt;BrewUI&lt;/a&gt;. It lets you manage all your installed formulae and casks visually. &lt;/p&gt;

&lt;p&gt;In the past, I've written about &lt;a href="https://dev.to/hacksore/brewlet-the-missing-menubar-item-for-homebrew-3a65"&gt;Brewlet&lt;/a&gt;, which seemed cool. Nice to see we have a first-party app maintained by the Homebrew core folks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnzjjkcr0zalg9x8g8pfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnzjjkcr0zalg9x8g8pfr.png" alt=" " width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can install it via:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;homebrew-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It’s written in Swift, so if you’re interested in contributing, take a look at the repo.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Homebrew" rel="noopener noreferrer"&gt;
        Homebrew
      &lt;/a&gt; / &lt;a href="https://github.com/Homebrew/BrewUI" rel="noopener noreferrer"&gt;
        BrewUI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      📺 Homebrew's official macOS GUI
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🧑‍💻 BrewUI&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/125011/649449316-3969e6b2-3054-4127-be5c-847aa1d98c01.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODk5MjYxNjIsIm5iZiI6MTc4OTkyNTg2MiwicGF0aCI6Ii8xMjUwMTEvNjQ5NDQ5MzE2LTM5NjllNmIyLTMwNTQtNDEyNy1iZTVjLTg0N2FhMWQ5OGMwMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwOTIwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDkyMFQxNzM3NDJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hYjQyZDg1ZjQ0ZmE3ZjViNmM3YzM4YmM1ZTdlMGVmNWRiYzYxYzYzNDdkMzE5ZTUzNDQ0NDgyMzIwY2E3ZDY4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.Xbdn796xvbW8PC41VOAWAAt5GHFjOsVtbeRfh31Sxyw"&gt;&lt;img width="1336" height="844" alt="BrewUI user interface" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F125011%2F649449316-3969e6b2-3054-4127-be5c-847aa1d98c01.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODk5MjYxNjIsIm5iZiI6MTc4OTkyNTg2MiwicGF0aCI6Ii8xMjUwMTEvNjQ5NDQ5MzE2LTM5NjllNmIyLTMwNTQtNDEyNy1iZTVjLTg0N2FhMWQ5OGMwMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwOTIwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDkyMFQxNzM3NDJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hYjQyZDg1ZjQ0ZmE3ZjViNmM3YzM4YmM1ZTdlMGVmNWRiYzYxYzYzNDdkMzE5ZTUzNDQ0NDgyMzIwY2E3ZDY4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.Xbdn796xvbW8PC41VOAWAAt5GHFjOsVtbeRfh31Sxyw" class="js-gh-image-fallback"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Homebrew's official macOS GUI: making package management approachable for users who prefer graphical interfaces over Terminal, while maintaining complete transparency about underlying Homebrew operations.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 Motivation&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Enable CLI-averse users to safely discover, install, update and manage Homebrew packages through a native SwiftUI interface that never hides what Homebrew is doing.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📲 Tech&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Swift&lt;/strong&gt; with strict concurrency · &lt;strong&gt;SwiftUI&lt;/strong&gt; · &lt;strong&gt;Swift Package Manager&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Toolchain and macOS requirements: &lt;a href="https://github.com/Homebrew/BrewUI/Package.swift" rel="noopener noreferrer"&gt;Package.swift&lt;/a&gt;, &lt;a href="https://github.com/Homebrew/BrewUI/.swift-version" rel="noopener noreferrer"&gt;.swift-version&lt;/a&gt; and &lt;a href="https://github.com/Homebrew/BrewUI/Homebrew.xcodeproj/project.pbxproj" rel="noopener noreferrer"&gt;Xcode project&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Data from the &lt;code&gt;brew&lt;/code&gt; CLI and the &lt;a href="https://formulae.brew.sh/docs/api/" rel="nofollow noopener noreferrer"&gt;Homebrew JSON API&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📦 Installation&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;brew install --cask homebrew-app&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Homebrew configuration&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Put Homebrew options in &lt;code&gt;brew.env&lt;/code&gt; and relaunch BrewUI after changing them. Shell aliases and
exported variables do not configure the app. See &lt;a href="https://github.com/Homebrew/BrewUI/ARCHITECTURE.md#homebrew-configuration" rel="noopener noreferrer"&gt;Homebrew configuration&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Development&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;After cloning:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;./scripts/bootstrap&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This installs Mint from &lt;code&gt;Brewfile&lt;/code&gt;, runs &lt;code&gt;mint bootstrap&lt;/code&gt; to build the SwiftFormat and SwiftLint versions pinned in &lt;code&gt;Mintfile&lt;/code&gt;, enables repository git hooks and resolves Swift package…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Homebrew/BrewUI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;p&gt;As always, happy coding 😃!&lt;/p&gt;

&lt;p&gt;Follow me for all things tech&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>homebrew</category>
      <category>productivity</category>
      <category>swift</category>
    </item>
    <item>
      <title>Badger: An E-Ink Badge I Use For Conferences</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Mon, 31 Aug 2026 21:31:56 +0000</pubDate>
      <link>https://dev.to/hacksore/badger-an-e-ink-badge-i-use-for-conferences-2jmh</link>
      <guid>https://dev.to/hacksore/badger-an-e-ink-badge-i-use-for-conferences-2jmh</guid>
      <description>&lt;p&gt;I attend conferences regularly, and for years I’ve wanted a badge that makes it easy for people to find me online.&lt;/p&gt;

&lt;p&gt;In 2019, I attended defcon and built &lt;a href="https://github.com/hacksore/defpi" rel="noopener noreferrer"&gt;defpi&lt;/a&gt;, a goofy raspberry pi powered badge.&lt;/p&gt;

&lt;p&gt;While that was fun I wanted a bit more turnkey and I found just what I wanted with a Badgeware &lt;a href="https://badgewa.re/" rel="noopener noreferrer"&gt;Badger&lt;/a&gt; (nerdy &lt;a href="https://en.wikipedia.org/wiki/Domain_hack" rel="noopener noreferrer"&gt;domain hack&lt;/a&gt; badgewa.re).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu4wnw2hmarxgw7zuc9nt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu4wnw2hmarxgw7zuc9nt.gif" alt=" " width="480" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since my use case is to just have my socials via QR I chose the e-ink version as it made the most sense.&lt;/p&gt;

&lt;p&gt;So what does the Badger come equipped with?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RP2350&lt;/li&gt;
&lt;li&gt;WiFi&lt;/li&gt;
&lt;li&gt;1000mAh battery&lt;/li&gt;
&lt;li&gt;USB-C&lt;/li&gt;
&lt;li&gt;MicroPython&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I might not be the biggest Python fan but in the age of AI does it matter? I just ask Codex to help me get the desired outcome I'm looking for!&lt;/p&gt;

&lt;p&gt;So Codex and I cooked a few hundred lines of Python and boom my profiles are only a QR code scan away.&lt;/p&gt;

&lt;p&gt;Let's take a look at my default badge screen in all its glory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffi5bof9f62rybal3csll.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffi5bof9f62rybal3csll.png" alt=" " width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Social screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdw7qzhsh8ogsicrg8895.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdw7qzhsh8ogsicrg8895.png" alt=" " width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All in all it's pretty simple, get you to either my &lt;a href="https://www.linkedin.com/in/seanboult" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or my &lt;a href="https://seanboult.dev" rel="noopener noreferrer"&gt;personal site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The crazy thing is the simulator lets me test the code before I deploy it to the badge.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;make sim&lt;/code&gt; and I'm able to test it locally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fosc84m53t4e9bdwo2qb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fosc84m53t4e9bdwo2qb4.png" alt=" " width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then a simple &lt;code&gt;make deploy&lt;/code&gt; while the badge is connected and it deploys it all.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1cyjdy5g23ot9enp1ipk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1cyjdy5g23ot9enp1ipk.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can check out the code repo if you wanna &lt;del&gt;steal&lt;/del&gt; &lt;a href="https://www.slopfork.dev/" rel="noopener noreferrer"&gt;slopfork&lt;/a&gt; my setup.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Hacksore" rel="noopener noreferrer"&gt;
        Hacksore
      &lt;/a&gt; / &lt;a href="https://github.com/Hacksore/badger" rel="noopener noreferrer"&gt;
        badger
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Badger 2350 badge&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Personal &lt;a href="https://badgewa.re/" rel="nofollow noopener noreferrer"&gt;Badgeware&lt;/a&gt; app for the Badger 2350.&lt;/p&gt;
&lt;p&gt;Requirements: macOS, &lt;a href="https://docs.astral.sh/uv/" rel="nofollow noopener noreferrer"&gt;uv&lt;/a&gt;, Git, and a data-capable USB-C cable. Run &lt;code&gt;make&lt;/code&gt; to see the three available commands.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Simulator&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;make sim&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The first run clones and builds &lt;a href="https://github.com/pimoroni/badgeware-simulator" rel="noopener noreferrer"&gt;Badgeware Desktop&lt;/a&gt; beside this repo. Later runs reuse that build, stage the current app in an isolated filesystem, and launch it at the Badger's 264×176 resolution.&lt;/p&gt;
&lt;p&gt;Simulator controls:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Space&lt;/code&gt;: Button B; flip between the badge and social/QR screens&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;↑&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt;: change the background pattern&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;←&lt;/code&gt; / &lt;code&gt;→&lt;/code&gt;: Buttons A and C&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Esc&lt;/code&gt;: hot reload&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Deploy the app&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Connect the Badger over USB-C.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Double-tap &lt;strong&gt;RESET&lt;/strong&gt;. Wait for the &lt;code&gt;BADGER&lt;/code&gt; drive to appear.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;make deploy&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The command validates the app, copies its Python and image files into &lt;code&gt;/apps/badge&lt;/code&gt;, safely ejects the drive, and lets the badge reboot.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Update the firmware&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This installs the latest official firmware together…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Hacksore/badger" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;p&gt;Happy conferencing, folks! &lt;/p&gt;

&lt;p&gt;PS: If you're going to be in Dallas for &lt;a href="https://www.commityourcode.com/" rel="noopener noreferrer"&gt;Commit Your Code 2026&lt;/a&gt; come find me and I’ll show off the badge.&lt;/p&gt;

&lt;p&gt;Follow me for all things tech.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>diy</category>
      <category>hardware</category>
      <category>gadgets</category>
      <category>python</category>
    </item>
    <item>
      <title>3 Ways to Manage Files in CloudShell</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Thu, 20 Aug 2026 16:48:35 +0000</pubDate>
      <link>https://dev.to/aws/3-ways-to-manage-files-in-cloudshell-3j8n</link>
      <guid>https://dev.to/aws/3-ways-to-manage-files-in-cloudshell-3j8n</guid>
      <description>&lt;p&gt;So you've probably had to open &lt;a href="https://aws.amazon.com/cloudshell/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el" rel="noopener noreferrer"&gt;CloudShell&lt;/a&gt; from time to time to poke at something quickly. Say I wanted to test pulling down an artifact from a private &lt;a href="https://aws.amazon.com/codeartifact/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el" rel="noopener noreferrer"&gt;CodeArtifact&lt;/a&gt; registry. To do that, I'd need to tweak my &lt;code&gt;~/.npmrc&lt;/code&gt; so npm points at the right registry.&lt;/p&gt;

&lt;p&gt;Which raises the question: what's the best way to edit a file once you're in CloudShell? Let's look at a few options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using&lt;/strong&gt; &lt;strong&gt;vim&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use Neovim btw (sorry emacs users), so naturally I'm starting with vim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vim ~/.npmrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you're already comfortable with Vim, this is probably the fastest option. You're already in the terminal, you get all the navigation and search you're used to, and there's nothing else to open.&lt;/p&gt;

&lt;p&gt;Make your changes, hit ESC, and :wq (write + quit) to save the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwdh5jfvrkx0kt9mcu90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwdh5jfvrkx0kt9mcu90.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using&lt;/strong&gt; &lt;strong&gt;nano&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ah the old classic. I've been using this for decades to edit files on remote boxes.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.npmrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Unlike Vim, there's not much to learn before you can start typing. Nano even shows you the important shortcuts at the bottom of the screen.&lt;/p&gt;

&lt;p&gt;Make your changes, hit CTRL+O to write them to disk, and CTRL+X to exit.&lt;/p&gt;

&lt;p&gt;If you just need to make a quick edit and get out, nano is hard to beat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd395dds4l2p9o2c2e2dd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd395dds4l2p9o2c2e2dd.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using&lt;/strong&gt; &lt;strong&gt;edit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Okay, but what if you don't want to use a terminal editor at all?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cloudshell/latest/userguide/getting-started.html?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el#edit-run" rel="noopener noreferrer"&gt;CloudShell has an &lt;code&gt;edit&lt;/code&gt;&lt;/a&gt; command that opens the file directly in its built-in editor.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;edit ~/.npmrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Instead of editing inside the terminal, CloudShell opens the file in a familiar graphical editor where you can point, click, type, and save with CMD+S (CTRL+S on Windows/Linux) or the save icon.&lt;/p&gt;

&lt;p&gt;If you're used to editing files in VS Code or another graphical editor, this is probably going to feel the most familiar.&lt;/p&gt;

&lt;p&gt;No Vim modes. No terminal keybindings to remember.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faklqayz4l5v6ksi0c4bt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faklqayz4l5v6ksi0c4bt.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which one should you use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Honestly, whichever gets you back to solving the actual problem fastest.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Editor&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Use it when...&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;vim&lt;/td&gt;
&lt;td&gt;You're comfortable with Vim and want to stay in the terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nano&lt;/td&gt;
&lt;td&gt;You want a simple terminal editor without learning Vim&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;edit&lt;/td&gt;
&lt;td&gt;You'd rather use a familiar graphical editor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the next time you find yourself debugging something from CloudShell, you've got a few ways to quickly read or edit a file without leaving your browser.&lt;/p&gt;



&lt;p&gt;As always, happy coding 😄!&lt;/p&gt;

&lt;p&gt;Follow AWS for more articles like this and follow me for all things tech.&lt;br&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>aws</category>
      <category>cloudskills</category>
      <category>devops</category>
    </item>
    <item>
      <title>so close to 4k followers on here, currently sitting at 3,973 🥹</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Mon, 10 Aug 2026 21:26:21 +0000</pubDate>
      <link>https://dev.to/hacksore/so-close-to-4k-followers-on-here-currently-sitting-at-3973-44oo</link>
      <guid>https://dev.to/hacksore/so-close-to-4k-followers-on-here-currently-sitting-at-3973-44oo</guid>
      <description></description>
      <category>community</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>🛫 I Vibe Coded a Website at 35,000 Feet 🛬</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Tue, 04 Aug 2026 16:00:00 +0000</pubDate>
      <link>https://dev.to/aws/i-vibe-coded-a-website-at-35000-feet-2nfm</link>
      <guid>https://dev.to/aws/i-vibe-coded-a-website-at-35000-feet-2nfm</guid>
      <description>&lt;p&gt;🛫 Wheels up and I had three hours with nothing but airplane Wi-Fi...&lt;/p&gt;

&lt;p&gt;So naturally, I decided to vibe code an entire website before landing.&lt;/p&gt;

&lt;p&gt;I've written about &lt;a href="https://dev.to/aws/aws-waddles-what-the-duck-23nn"&gt;Waddles&lt;/a&gt; before, so I thought, what if I created him a little home on the web.&lt;/p&gt;

&lt;p&gt;So I got myself connected to the Delta Wi-Fi, cracked open Codex, and got to prompting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwplipk2719sxepfep8c0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwplipk2719sxepfep8c0.png" alt=" " width="566" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For my agentic workflow, I start by describing the MVP requirements to my agent in the chat and have it write out the plan to a markdown file.&lt;/p&gt;

&lt;p&gt;This allows me to ideate and steer the agent along the way with how I want the stack to look. You can see my iterations of the &lt;a href="https://github.com/sboult/waddles.website/commits/69ca290f97780b2606481d8e8f1b9c257f44e7ce/PROMPT.md" rel="noopener noreferrer"&gt;PROMPT.md&lt;/a&gt; over time.&lt;/p&gt;

&lt;p&gt;I configured things like what tech stack we wanted to use, how we wanted to deploy, as well as the basic idea for the website.&lt;/p&gt;

&lt;p&gt;What was the original tech stack I landed on?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Stack&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://react.dev" rel="noopener noreferrer"&gt;React 19&lt;/a&gt;, &lt;a href="https://www.typescriptlang.org" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build&lt;/td&gt;
&lt;td&gt;&lt;a href="https://vite.dev" rel="noopener noreferrer"&gt;Vite 8&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tooling&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;Node.js 24&lt;/a&gt;, &lt;a href="https://pnpm.io" rel="noopener noreferrer"&gt;pnpm&lt;/a&gt;, &lt;a href="https://turbo.build" rel="noopener noreferrer"&gt;Turborepo&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/s3/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=bl" rel="noopener noreferrer"&gt;Amazon S3&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CDN&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/cloudfront/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=bl" rel="noopener noreferrer"&gt;Amazon CloudFront&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS &amp;amp; TLS&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://aws.amazon.com/route53/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=bl" rel="noopener noreferrer"&gt;Route 53&lt;/a&gt;, &lt;a href="https://aws.amazon.com/certificate-manager/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=bl" rel="noopener noreferrer"&gt;AWS Certificate Manager&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://aws.amazon.com/cdk/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=bl" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt; / &lt;a href="https://aws.amazon.com/cloudformation/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=bl" rel="noopener noreferrer"&gt;CloudFormation&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; with &lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=bl" rel="noopener noreferrer"&gt;AWS OIDC&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So what did I build? I created a simple static site, &lt;a href="https://waddles.website" rel="noopener noreferrer"&gt;waddles.website&lt;/a&gt;, where Waddles can continuously surf the web and give you interesting quotes.&lt;/p&gt;

&lt;p&gt;Here is what the plane-shipped version looked like running on localhost:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv5t5o2mpyf77bvebneut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv5t5o2mpyf77bvebneut.png" alt=" " width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pretty simple, just an ASCII duck (Waddles) surfing on the DOM, literally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzyuosau8bnhm58cs8a8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzyuosau8bnhm58cs8a8p.png" alt=" " width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So that was working locally after several prompts. Now I was ready to ship it to the cloud and ready for the deployment...&lt;/p&gt;

&lt;p&gt;I had one pit stop to make, though: a domain name. So I saw &lt;code&gt;.website&lt;/code&gt; domains are a good fit for this. At $2/year, you can't beat that.&lt;/p&gt;

&lt;p&gt;It's now deployment time, and I already had &lt;a href="https://aws.amazon.com/products/developer-tools/agent-toolkit-for-aws/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el" rel="noopener noreferrer"&gt;Agent Toolkit for AWS&lt;/a&gt; set up. It was able to help me scaffold out all the CDK code needed to get a static application up.&lt;/p&gt;

&lt;p&gt;Then I used &lt;code&gt;aws login&lt;/code&gt; to get some credentials to my admin role, bootstrapped my account, and smashed the &lt;code&gt;cdk deploy&lt;/code&gt; command only to hit my first hurdle...&lt;/p&gt;

&lt;p&gt;Uploading 20 MB ZIPs for my CFN deployment on airplane Wi-Fi was giving me timeouts 😅. So I had to figure something out, and Codex suggested a fantastic workaround. Just push the code to GitHub and let CI/CD be the one to deploy the CloudFormation stack.&lt;/p&gt;

&lt;p&gt;Alas, we got the code up to github.com and it finally saw the ✅.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc3qhn5iaf9j152bpqsqo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc3qhn5iaf9j152bpqsqo.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Over the weekend I put a bit more polish on it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhq3dq7zysh979xkzszmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhq3dq7zysh979xkzszmp.png" alt=" " width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I migrated to &lt;a href="https://aws.amazon.com/amplify" rel="noopener noreferrer"&gt;AWS Amplify&lt;/a&gt; so I didn't have to manage CDK and could have preview environments.&lt;/p&gt;

&lt;p&gt;You can share your favorite Waddles quote and if you want, &lt;a href="https://github.com/sboult/waddles.website" rel="noopener noreferrer"&gt;contribute a new quote to the repo&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Happy Vibe Coding 😎! &lt;/p&gt;

&lt;p&gt;Follow AWS for more articles like this.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Follow me for all things tech.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Did You Know TLDs Can Be Websites?</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Thu, 16 Jul 2026 19:41:43 +0000</pubDate>
      <link>https://dev.to/aws/did-you-know-tlds-can-be-websites-2j13</link>
      <guid>https://dev.to/aws/did-you-know-tlds-can-be-websites-2j13</guid>
      <description>&lt;p&gt;You've probably registered a domain with &lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el" rel="noopener noreferrer"&gt;Route53&lt;/a&gt; or another popular registrar.&lt;/p&gt;

&lt;p&gt;You pick something like &lt;code&gt;seanboult.dev&lt;/code&gt;, spin up a &lt;a href="https://builder.aws.com/content/3BfvbBpwbonTDicuPTMLZBTt4Br/deploy-a-web-server-to-the-cloud?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el" rel="noopener noreferrer"&gt;web server&lt;/a&gt;, configure your A record, attach a TLS cert, and boom it's &lt;a href="https://seanboult.dev" rel="noopener noreferrer"&gt;live&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4lryndxnezve5pz9n7g8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4lryndxnezve5pz9n7g8.png" alt=" " width="620" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well in the past, before the AI boom, there once was a web server on &lt;code&gt;.ai&lt;/code&gt; and it made its way to &lt;a href="https://news.ycombinator.com/item?id=28253928" rel="noopener noreferrer"&gt;Hacker News&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This was a cool relic that always intrigued me. Here is a snapshot from the &lt;a href="https://web.archive.org/web/20160729161050/http://ai/" rel="noopener noreferrer"&gt;Wayback Machine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F41mi80qfkkk2oyskiprw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F41mi80qfkkk2oyskiprw.png" alt=" " width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you're like wait, I can't go to &lt;a href="http://ai" rel="noopener noreferrer"&gt;http://ai&lt;/a&gt; today? No, sadly at some point the A record was removed and the web server was shut down.&lt;/p&gt;

&lt;p&gt;Don't worry though, at the time of writing this I found another one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mqfhdivrlo4ut9ut4mo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mqfhdivrlo4ut9ut4mo.png" alt=" " width="498" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Without further ado, here it is! &lt;a href="https://uz" rel="noopener noreferrer"&gt;https://uz&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Seems the TLS cert does not match the common name so you'll have to force your way in...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp7mkk1x1yiv9i1pot8i7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp7mkk1x1yiv9i1pot8i7.png" alt=" " width="799" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But then you're in!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnjpgtvki9z0p908k9779.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnjpgtvki9z0p908k9779.png" alt=" " width="800" height="661"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So how does this work?&lt;/p&gt;

&lt;p&gt;Well, the same way you can add an A record to the apex of your domain (such as example.com), a registry operator can add DNS records directly to the apex of a Top-Level Domain zone, such as &lt;code&gt;.uz&lt;/code&gt; in this case.&lt;/p&gt;

&lt;p&gt;Would love to know if you find more like this, leave a reply if you do.&lt;/p&gt;

&lt;p&gt;If we ever did one on &lt;code&gt;.aws&lt;/code&gt; what would you like to see there 🤔?&lt;/p&gt;



&lt;p&gt;As always, happy coding 😉!&lt;/p&gt;

&lt;p&gt;Follow AWS for more articles like this.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Follow me for all things tech&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
.

</description>
      <category>aws</category>
      <category>infrastructure</category>
      <category>networking</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Bidwatch - Search Live Ebay Auctions Ending Soon</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sat, 11 Jul 2026 18:04:21 +0000</pubDate>
      <link>https://dev.to/hacksore/bidwatch-search-live-ebay-auctions-ending-soon-1393</link>
      <guid>https://dev.to/hacksore/bidwatch-search-live-ebay-auctions-ending-soon-1393</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I use ebay.com a lot as a passionate card collector to find auctions. It's super difficult to use their filters on both the web and mobile, but mobile is especially frustrating.&lt;/p&gt;

&lt;p&gt;The goal was to build a simple app that allows users to search for any auctions on eBay, filter those listings, find the ones ending soon, and save their filter preferences to find auctions more quickly.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://bidwatch.app/" rel="noopener noreferrer"&gt;Bidwatch&lt;/a&gt;, you can look for auctions ending soon with bids, no bids, or all auctions. These filters help you understand market sentiment for prices and see what's actually popular.&lt;/p&gt;

&lt;p&gt;I've used the app many times now to win some really awesome auctions that I would have never seen otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ZknUzX4L20s"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;AI helped me ship this pretty fast...&lt;/p&gt;

&lt;p&gt;I validated the idea was possible by starting up Codex Chat and explaining the basic MVP. It helped me research the ebay.com REST API offerings and confirmed it was possible to get all the data I needed.&lt;/p&gt;

&lt;p&gt;Codex helped me create a PRD (Product Requirements Document) for the MVP. Initially, that was literally just pulling search data back.&lt;/p&gt;

&lt;p&gt;The scope grew over time, and more and more features were added, such as filters, authentication, caching, and favoriting.&lt;/p&gt;

&lt;p&gt;Here is a quick look at the system architecture. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq8d4zlkftdsvp8irjseb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq8d4zlkftdsvp8irjseb.png" alt=" " width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Excited to be part of this challenge and see all the other project submitted.&lt;/p&gt;

&lt;p&gt;If you have any feedback or questions leave a comment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bidwatch.app" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Visit bidwatch.app today 🚀&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;Happy coding 😛!&lt;/p&gt;

&lt;p&gt;Follow me for all things tech&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>nextjs</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why Error Messages Matter More in the Age of AI</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Fri, 10 Jul 2026 12:45:24 +0000</pubDate>
      <link>https://dev.to/aws/why-error-messages-matter-more-in-the-age-of-ai-dib</link>
      <guid>https://dev.to/aws/why-error-messages-matter-more-in-the-age-of-ai-dib</guid>
      <description>&lt;p&gt;Everyone talks about AI writing code.&lt;br&gt;
Nobody talks about AI debugging code.&lt;/p&gt;

&lt;p&gt;Bad error messages are the worst, we've all seen them. You open the logs or run your program and see something like this...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: something went wrong
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn5f8kulz7mtbk02yd2zg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn5f8kulz7mtbk02yd2zg.png" alt=" " width="660" height="825"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It leaves you asking:&lt;/p&gt;

&lt;p&gt;What happened?&lt;br&gt;
Where did it happen?&lt;br&gt;
Why did it happen?&lt;br&gt;
How do I fix it?&lt;/p&gt;

&lt;p&gt;You might have written some of these pretty silly error messages, I know I have. They don't help us fix software quickly because we first have to figure out why the error happened.&lt;/p&gt;

&lt;p&gt;Rust has been shipping fantastic error messages for years.&lt;/p&gt;

&lt;p&gt;Take this example where I accidentally call &lt;code&gt;println&lt;/code&gt; instead of &lt;code&gt;println!&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cargo run                                                                                                   101 ↵
&lt;span class="go"&gt;   Compiling ducksay v0.2.0 (~/oss/ducksay)
error[E0423]: expected function, found macro `print`
&lt;/span&gt;&lt;span class="gp"&gt;  --&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;src/main.rs:51:3
&lt;span class="go"&gt;   |
&lt;/span&gt;&lt;span class="gp"&gt;51 |   print("{}", render_with_style(&amp;amp;message, cli.width.get(), style));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="go"&gt;   |   ^^^^^ not a function
   |
help: use `!` to invoke the macro
   |
&lt;/span&gt;&lt;span class="gp"&gt;51 |   print!("{}", render_with_style(&amp;amp;message, cli.width.get(), style));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="go"&gt;   |     
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It's fantastic! It tells you what went wrong, where it occurred, and how to fix it.&lt;/p&gt;

&lt;p&gt;When you're building software, you should make your error messages exceptional (punny 😂).&lt;/p&gt;

&lt;p&gt;Here's another example from &lt;a href="https://viteplus.dev/" rel="noopener noreferrer"&gt;Vite+&lt;/a&gt; where I had a syntax error in the config file.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;vp dev
&lt;span class="go"&gt;
failed to load config from ~/oss/test-ssr-on-aws/vite.config.ts
error when starting dev server:
Error: Build failed with 1 error:

[PARSE_ERROR] Error: Unexpected token
   ╭─[ vite.config.ts:5:3 ]
   │
 5 │   ,
   │   ┬
   │   ╰──
───╯
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now imagine debugging code with generic error messages that tell you absolutely nothing helpful. You'll have to manually trace through the code to figure out what the heck is going on.&lt;/p&gt;

&lt;p&gt;AI agents run into the same problem. If the error tells them almost nothing, they have to spend extra time reading files, tracing execution paths, and making additional tool calls just to understand what failed.&lt;/p&gt;

&lt;p&gt;So what can we do to help humans and AI? Here are some of my top recommendations for writing good error messages.&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Be descriptive and specific
&lt;/h4&gt;

&lt;p&gt;We started with &lt;code&gt;Error: Something went wrong&lt;/code&gt; and it tells us almost nothing.&lt;/p&gt;

&lt;p&gt;Instead, tell them exactly what happened and where it happened.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: Failed to load config.toml.

config.toml:23
Unknown property "waddles".
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  2. Emit structured logs
&lt;/h4&gt;

&lt;p&gt;A good error message is one thing, but don't forget about the logs around it.&lt;/p&gt;

&lt;p&gt;Using a structured logger like &lt;a href="https://getpino.io/#/" rel="noopener noreferrer"&gt;pino&lt;/a&gt; means every log includes useful metadata like timestamps, log levels, and request IDs.&lt;/p&gt;

&lt;p&gt;If you're writing JavaScript, pair it with &lt;a href="https://github.com/pinojs/pino-pretty" rel="noopener noreferrer"&gt;pino-pretty&lt;/a&gt; and your logs become a lot easier on the eyes too 💅.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;[17:35:28.992] ERROR (1337): Loading configuration failed, unknown property "waddles" config.toml:23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Those logs aren't just useful in your terminal. Once they're in your observability platform, you can search, filter, and correlate events across your application. &lt;a href="https://aws.amazon.com/blogs/mt/introducing-opentelemetry-promql-support-in-amazon-cloudwatch/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el" rel="noopener noreferrer"&gt;CloudWatch now supports OpenTelemetry&lt;/a&gt;, so all of that structured context comes along for the ride.&lt;/p&gt;

&lt;p&gt;The more useful context your logs contain, the less detective work there is for both you and your AI agent.&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Provide solutions/hints
&lt;/h4&gt;

&lt;p&gt;When things go wrong (and they will), a simple hint can save someone a lot of time.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: Missing required environment variable "DATABASE_URL".

hint: Add DATABASE_URL to your .env file or export it before starting the application.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Not every error can tell you exactly how to fix it, and adding hints can take extra work. But if you already know the most common fix, include it anyway. It'll save someone or an AI agent a trip to the documentation.&lt;/p&gt;



&lt;p&gt;FWIW some of these will only make sense when you are in a trusted environment. When giving errors to clients it's best to not give them more than they need, otherwise you might leak information that could help an attacker.&lt;/p&gt;

&lt;p&gt;For trusted environments like a local CLI tool or a server application where you control the logs it's ideal to craft really detailed messages.&lt;/p&gt;

&lt;p&gt;Good error messages have always mattered. AI agents make them even more valuable.&lt;/p&gt;

&lt;p&gt;AI is getting better at writing code every day. We should make it just as good at debugging it.&lt;/p&gt;

&lt;p&gt;Follow AWS for more articles like this.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Follow me for all things tech.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Quickie Posts, Is Anyone Using Them?</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Mon, 29 Jun 2026 20:09:34 +0000</pubDate>
      <link>https://dev.to/hacksore/quickie-posts-is-anyone-using-them-252d</link>
      <guid>https://dev.to/hacksore/quickie-posts-is-anyone-using-them-252d</guid>
      <description>&lt;p&gt;So there is this feature on dev.to called "Quickie Posts".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7vt45xmbuj13ey18esj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7vt45xmbuj13ey18esj.png" alt=" " width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They meant to be short twitter like posts then show up on the home feed.&lt;/p&gt;

&lt;p&gt;I've tried a few times but never got any traction on them. Curious have you used them or did the feature never really take off?&lt;/p&gt;

&lt;p&gt;Some original lore from &lt;a class="mentioned-user" href="https://dev.to/ben"&gt;@ben&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ben/this-is-a-new-thing-a-type-of-quick-post-that-doesnt-show-up-on-your-profile-or-in-notifications-its-in-beta-and-we-have-a-few-adjustments-and-improvements-in-the-pipeline-but-if-you-have-ideas-let-me-know-3e6a" class="crayons-story__hidden-navigation-link"&gt;This is a new thing: A type of quick post that doesn't show up on your profile or in notifications. It's in beta, and we have a few adjustments and improvements in the pipeline — but if you have ideas, let me know.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-status"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/ben" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1%2Fbabb96d0-9cd2-49bc-a412-2dc4caf94c2a.png" alt="ben profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ben" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ben Halpern
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ben Halpern
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2101446" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/ben" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1%2Fbabb96d0-9cd2-49bc-a412-2dc4caf94c2a.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ben Halpern&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/ben/this-is-a-new-thing-a-type-of-quick-post-that-doesnt-show-up-on-your-profile-or-in-notifications-its-in-beta-and-we-have-a-few-adjustments-and-improvements-in-the-pipeline-but-if-you-have-ideas-let-me-know-3e6a" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Nov 12 '24&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-status"&gt;
        &lt;a href="https://dev.to/ben/this-is-a-new-thing-a-type-of-quick-post-that-doesnt-show-up-on-your-profile-or-in-notifications-its-in-beta-and-we-have-a-few-adjustments-and-improvements-in-the-pipeline-but-if-you-have-ideas-let-me-know-3e6a" id="article-link-2101446"&gt;
          This is a new thing: A type of quick post that doesn't show up on your profile or in notifications. It's in beta, and we have a few adjustments and improvements in the pipeline — but if you have ideas, let me know.
        &lt;/a&gt;
      &lt;/h2&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/ben/this-is-a-new-thing-a-type-of-quick-post-that-doesnt-show-up-on-your-profile-or-in-notifications-its-in-beta-and-we-have-a-few-adjustments-and-improvements-in-the-pipeline-but-if-you-have-ideas-let-me-know-3e6a" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;10&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ben/this-is-a-new-thing-a-type-of-quick-post-that-doesnt-show-up-on-your-profile-or-in-notifications-its-in-beta-and-we-have-a-few-adjustments-and-improvements-in-the-pipeline-but-if-you-have-ideas-let-me-know-3e6a#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              19&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;If you have not tried a quickie post, maybe give it a try today and let me know your experience.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>have you installed the Agent Toolkit for AWS yet?</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Tue, 16 Jun 2026 21:03:54 +0000</pubDate>
      <link>https://dev.to/hacksore/have-you-installed-the-agent-toolkit-for-aws-yet-2bap</link>
      <guid>https://dev.to/hacksore/have-you-installed-the-agent-toolkit-for-aws-yet-2bap</guid>
      <description></description>
      <category>agents</category>
      <category>ai</category>
      <category>aws</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Testing Neovim in a Container with Finch (like Docker)</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Fri, 12 Jun 2026 15:30:00 +0000</pubDate>
      <link>https://dev.to/aws/testing-neovim-in-a-container-with-finch-like-docker-31dj</link>
      <guid>https://dev.to/aws/testing-neovim-in-a-container-with-finch-like-docker-31dj</guid>
      <description>&lt;p&gt;So developers like CI... for everything! We do this because we like things to be automated. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3sqj6qsegypqq9wpem8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3sqj6qsegypqq9wpem8.png" alt=" " width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building software is tedious and risky. If we can push a commit and let things happen in the cloud to give our change confidence, we absolutely will do that to reduce that potential risk.&lt;/p&gt;

&lt;p&gt;Now let's get into what this blog is about, brace yourself...&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65h1dqtzmqip8gb1z8h8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65h1dqtzmqip8gb1z8h8.png" alt=" " width="500" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've been using Neovim for a few years now and maintain my own config. Updating Neovim or my plugins is often considered scary because you are trusting a whole lot of maintainers to not make a breaking change that could bring you to a screeching halt.&lt;/p&gt;

&lt;p&gt;One day I had a wild idea. Is it possible to test the most critical part of my workflow? To me that's the TypeScript LSP which gives me hover diagnostics, go to definitions, and of course, the red squiggles.&lt;/p&gt;

&lt;p&gt;Now the implementation is somewhat involved but you can take a peek at my &lt;a href="https://github.com/Hacksore/dotfiles" rel="noopener noreferrer"&gt;dotfiles repo&lt;/a&gt; to learn more about how it works, I won't dive too deep here.&lt;/p&gt;

&lt;p&gt;Originally I only supported Docker because it's been one of my toolchains for a long time, over a decade at this point. I recently learned about Finch, an &lt;a href="https://aws.amazon.com/blogs/opensource/introducing-finch-an-open-source-client-for-container-development/" rel="noopener noreferrer"&gt;open source project by AWS&lt;/a&gt; which allows you to build and run containers.&lt;/p&gt;

&lt;p&gt;Finch is a drop-in replacement for Docker so I updated my CLI (&lt;code&gt;hack&lt;/code&gt;) to let me specify &lt;code&gt;docker&lt;/code&gt; or &lt;code&gt;finch&lt;/code&gt; via an env var (&lt;code&gt;HACK_CONTAINER_RUNTIME&lt;/code&gt;) or CLI flag (&lt;code&gt;--runtime&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;So I can start a run with Finch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hack &lt;span class="nt"&gt;--runtime&lt;/span&gt; finch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Once the build and tests finish, you should see output showing that the TypeScript LSP was able to report diagnostics, which gives me confidence that my Neovim setup isn't broken.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;⌛ Starting TypeScript LSP validation...   
📊 TypeScript diagnostics found: 1    
  [1] Type 'number' is not assignable to type 'string'.
✅ LSP validation completed successfully!
✅ Neovim test ran successfully...
NVIM v0.12.2
Build type: Release
LuaJIT 2.1.1774638290
Vim versions: 8.1, 8.2, 9.0, 9.1, 9.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;What happened at a high level after running the &lt;code&gt;hack&lt;/code&gt; CLI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builds the container image with Finch&lt;/li&gt;
&lt;li&gt;Installs Neovim and development tools in the container&lt;/li&gt;
&lt;li&gt;Links the Neovim configuration into the container&lt;/li&gt;
&lt;li&gt;Starts the test container in Finch&lt;/li&gt;
&lt;li&gt;Neovim opens a TypeScript test file&lt;/li&gt;
&lt;li&gt;Runs a custom Neovim command to verify the TypeScript LSP works&lt;/li&gt;
&lt;li&gt;Success 🥳&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My test is pretty narrow but solves my use case of ensuring my TypeScript LSP will work when new plugins and Neovim updates land.&lt;/p&gt;

&lt;p&gt;Give &lt;a href="https://runfinch.com/" rel="noopener noreferrer"&gt;Finch&lt;/a&gt; a try for running containers locally and let me know what you think in the comments.&lt;/p&gt;

&lt;p&gt;Happy Coding 🙂!&lt;/p&gt;



&lt;p&gt;Follow AWS for more articles like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Follow me for all things tech&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>neovim</category>
      <category>containers</category>
      <category>docker</category>
      <category>ci</category>
    </item>
    <item>
      <title>AWS Waddles: What the Duck?</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Mon, 01 Jun 2026 23:33:50 +0000</pubDate>
      <link>https://dev.to/aws/aws-waddles-what-the-duck-23nn</link>
      <guid>https://dev.to/aws/aws-waddles-what-the-duck-23nn</guid>
      <description>&lt;p&gt;For over a decade, there's been a tiny ASCII duck hiding in plain sight. Open the page source for &lt;a href="https://amazon.com" rel="noopener noreferrer"&gt;amazon.com&lt;/a&gt;, scroll all the way to the bottom, and there it is, surfing the web and quietly meowing at anyone who looks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!--       _
       .__(.)&amp;lt; (MEOW)
        \___)
 ~~~~~~~~~~~~~~~~~~--&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A few years ago I stumbled onto this meowing duck, and it turns out &lt;a href="https://www.reddit.com/r/ProgrammerHumor/comments/9zflz9/theres_meowing_duck_in_amazon_source_code/" rel="noopener noreferrer"&gt;the internet&lt;/a&gt; had too. MEOW has lived in that source code for years. If you've never seen it, go look now!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx41d1qtszkbr79awreio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx41d1qtszkbr79awreio.png" alt=" " width="240" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One day I thought, why not bring that same duck energy to AWS? So I made my own mascot. Same surfing spirit, except this one doesn't meow. It barks. Meet Waddles.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!--       _
       .__(.)&amp;lt; (woof)
        \___)
 ~~~~~~~~~~~~~~~~~~--&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Waddles made his first appearance on March 12, 2026 and landed on the timeline on X/Twitter.&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-2032135107977322989-291" src="https://platform.twitter.com/embed/Tweet.html?id=2032135107977322989"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2032135107977322989-291');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2032135107977322989&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;You'll be seeing Waddles around more, but I figured I owe the internet an explanation of sorts.&lt;/p&gt;

&lt;p&gt;Ok, I think all my ducks are in a row now 😂.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Waddles takin a nap
    _
.__(_)&amp;lt;
 \___)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Want your own Waddles? I built a little tool called &lt;code&gt;ducksay&lt;/code&gt;. &lt;a href="https://github.com/sboult/ducksay" rel="noopener noreferrer"&gt;Check out the repo here&lt;/a&gt;. Give it a message and it hands it right back to you, duck included:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ducksay "woof"
&amp;lt;!--       _
       .__(.)&amp;lt; (woof)
        \___)
 ~~~~~~~~~~~~~~~~~~--&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If ducks aren't your thing, drop some of your favorite ASCII art in the comments. Waddles could use some friends.&lt;/p&gt;

&lt;p&gt;Happy Coding 🤗!&lt;/p&gt;



&lt;p&gt;Follow AWS for more articles like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Follow me for all things tech&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>watercooler</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
