<?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>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>
    <item>
      <title>Markdown Should be Supported Everywhere Natively</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Fri, 29 May 2026 19:27:54 +0000</pubDate>
      <link>https://dev.to/aws/markdown-should-be-supported-everywhere-natively-8nd</link>
      <guid>https://dev.to/aws/markdown-should-be-supported-everywhere-natively-8nd</guid>
      <description>&lt;p&gt;You've probably seen this tweet by &lt;a href="https://x.com/trq212/" rel="noopener noreferrer"&gt;@trq212&lt;/a&gt; floating around on Twitter about letting agents write HTML instead of markdown...&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2052811606032269638-893" src="https://platform.twitter.com/embed/Tweet.html?id=2052811606032269638"&gt;
&lt;/iframe&gt;

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



&lt;/p&gt;

&lt;p&gt;Listed below are some of the reasons mentioned in the article: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Information Density&lt;/li&gt;
&lt;li&gt;Visual Clarity &amp;amp; Ease of Reading&lt;/li&gt;
&lt;li&gt;Ease of Sharing (to me this is the most compelling)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't disagree with Tariq, but rather than switch to HTML, I think the answer is to make markdown supported everywhere. We've been using it for years and it's powering much of the modern web. However, if we look at how software and platforms have evolved, markdown support is very dependent on the platform to render it.&lt;/p&gt;

&lt;p&gt;Why does markdown work for humans and machines? Well, it's pretty simple, humans write simple syntax that gets rendered into something rich, and unironically, that's often by converting it to HTML and a browser engine rendering it. For machines, it's lightweight to parse and easy to generate token by token without the verbosity of HTML.&lt;/p&gt;

&lt;p&gt;We write headers, code blocks, pull quotes, bold text, and what typically happens is something is converting that markdown to HTML.&lt;/p&gt;

&lt;p&gt;For example, I am literally typing this blog in &lt;strong&gt;markdown&lt;/strong&gt;, and the only way I can share it to the masses is through a platform like dev.to that converts it to HTML and hosts it for me.&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%2Fcr743izmtwef1oggod83.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%2Fcr743izmtwef1oggod83.png" alt=" " width="800" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So if the feature is available in some places, why is it not everywhere? I believe that software vendors haven't prioritized adding markdown rendering support, and they should.&lt;/p&gt;

&lt;p&gt;We should be able to send a standalone index.md file and view it in all web browsers, chat applications, and emails. Some apps already do this like Discord and Slack (Slack's &lt;a href="https://www.markdownguide.org/tools/slack/" rel="noopener noreferrer"&gt;markdown support&lt;/a&gt; disappoints me). We can do this with HTML today, all modern browsers will render something nice, but if you load up markdown in your browser today you will become sad.&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%2Fu3vm83fa178xsnib3bt4.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%2Fu3vm83fa178xsnib3bt4.png" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have to reach for things like Obsidian or Kiro to render the markdown, which I feel limits the portability of it all.&lt;/p&gt;

&lt;p&gt;Curious what you think and where you see yourself heading in terms of AI agent output. Let me know in the comments if you're switching to HTML or sticking with markdown.&lt;/p&gt;




&lt;p&gt;As always, 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;


</description>
      <category>discuss</category>
      <category>html</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Terminal Superpowers You Should Be Using in 2026</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Tue, 19 May 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/aws/terminal-superpowers-you-should-be-using-in-2026-38b4</link>
      <guid>https://dev.to/aws/terminal-superpowers-you-should-be-using-in-2026-38b4</guid>
      <description>&lt;p&gt;I live in my terminal. Here's what I use to stay fast.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fuzzy finder (fzf)&lt;/li&gt;
&lt;li&gt;Terminal motions&lt;/li&gt;
&lt;li&gt;Sudo shortcut&lt;/li&gt;
&lt;li&gt;Tab completion&lt;/li&gt;
&lt;li&gt;Autosuggestion&lt;/li&gt;
&lt;li&gt;Autocompletion&lt;/li&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Command buffering&lt;/li&gt;
&lt;li&gt;Terminal clearing&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;NOTE: Some of these are zsh-specific, so make sure you have that set up first.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Fuzzy finder (fzf)
&lt;/h2&gt;

&lt;p&gt;Please please stop spamming up arrow to find that command you ran. Instead you can make this so much simpler with &lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;fzf&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once installed, hit &lt;code&gt;Ctrl+R&lt;/code&gt; and your shell history becomes searchable. No more mashing the up arrow 47 times to find that docker command you ran last Tuesday.&lt;/p&gt;

&lt;p&gt;You can also use it to find files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# fuzzy find a file and open it in your editor&lt;/span&gt;
vim &lt;span class="si"&gt;$(&lt;/span&gt;fzf&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or pipe anything into it:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# search git branches&lt;/span&gt;
git branch | fzf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Seriously, just install fzf.&lt;/p&gt;
&lt;h2&gt;
  
  
  Terminal motions
&lt;/h2&gt;

&lt;p&gt;Stop holding backspace and typing everything all over again...&lt;/p&gt;

&lt;p&gt;Here are the motions that saved me the most time:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Option + ←/→&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jump by word&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Option + Backspace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete a word&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jump to beginning of line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + E&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jump to end of line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + K&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete everything after cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Drill these for a week and holding backspace will start to physically hurt you.&lt;/p&gt;
&lt;h2&gt;
  
  
  Sudo shortcut
&lt;/h2&gt;

&lt;p&gt;You've done this before:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;something
&lt;span class="c"&gt;# Permission denied&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Instead of retyping the whole thing, just run:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;!!&lt;/code&gt; expands to your last command. Done.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tab completion
&lt;/h2&gt;

&lt;p&gt;ZSH tab completion goes further than bash:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tab into directories and keep going (no need to hit enter between each level)&lt;/li&gt;
&lt;li&gt;Cycle through matches with repeated tab presses&lt;/li&gt;
&lt;li&gt;Case-insensitive matching by default&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this case I did &lt;code&gt;~/.aw&amp;lt;tab&amp;gt;/co&amp;lt;tab&amp;gt;&lt;/code&gt;.&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%2Fhulspug40q4a2g97csvm.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%2Fhulspug40q4a2g97csvm.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're typing full paths by hand, you're doing it wrong.&lt;/p&gt;
&lt;h2&gt;
  
  
  Autocompletion
&lt;/h2&gt;

&lt;p&gt;Some CLI tools ship with their own completions for subcommands and flags. The &lt;a href="https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-completion.html" rel="noopener noreferrer"&gt;AWS CLI&lt;/a&gt; is a good example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add this to your .zshrc&lt;/span&gt;
autoload bashcompinit &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bashcompinit
autoload &lt;span class="nt"&gt;-Uz&lt;/span&gt; compinit &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; compinit
&lt;span class="nb"&gt;complete&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s1"&gt;'/usr/local/bin/aws_completer'&lt;/span&gt; aws
&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.amazonaws.com%2Fuploads%2Farticles%2Fxm24amx3prz7b7wacowu.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%2Fxm24amx3prz7b7wacowu.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now &lt;code&gt;aws s3&amp;lt;TAB&amp;gt;&lt;/code&gt; shows you all the s3 subcommands. Most popular CLIs (&lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;kubectl&lt;/code&gt;, &lt;code&gt;gh&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;) have similar setups. Check their docs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Autosuggestions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/zsh-users/zsh-autosuggestions" rel="noopener noreferrer"&gt;zsh-autosuggestions&lt;/a&gt; gives you fish-like behavior in ZSH. As you type, it shows a grayed-out suggestion based on your history. Press the right arrow to accept 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.amazonaws.com%2Fuploads%2Farticles%2Fpllkeiaffkjy5tsd15ee.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%2Fpllkeiaffkjy5tsd15ee.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give it a few days and you won't be able to go back.&lt;/p&gt;
&lt;h2&gt;
  
  
  Syntax highlighting
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting" rel="noopener noreferrer"&gt;zsh-syntax-highlighting&lt;/a&gt; highlights your commands as you type. Valid commands go green, invalid go red. It's instant feedback before you even hit enter.&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%2Fbpedbeii4ec59ynt2fhd.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%2Fbpedbeii4ec59ynt2fhd.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You catch typos before you hit enter. That's it, that's the sell.&lt;/p&gt;
&lt;h2&gt;
  
  
  Command buffering
&lt;/h2&gt;

&lt;p&gt;Kick off a long-running command like &lt;code&gt;pnpm i&lt;/code&gt;, then just type your next command and hit enter. ZSH buffers it and runs it when the first one finishes.&lt;/p&gt;

&lt;p&gt;You're typing blind so typos happen, but it beats waiting around.&lt;/p&gt;
&lt;h2&gt;
  
  
  Terminal clearing
&lt;/h2&gt;

&lt;p&gt;Two quick ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;clear&lt;/code&gt; (or &lt;code&gt;Ctrl + L&lt;/code&gt;) - clears the screen but keeps scrollback&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cmd + K&lt;/code&gt; - nukes everything including scrollback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I use &lt;code&gt;Cmd + K&lt;/code&gt; when I want a clean slate and &lt;code&gt;clear&lt;/code&gt; when I just want visual breathing room.&lt;/p&gt;
&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;Here's everything linked in one place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ohmyzsh/ohmyzsh" rel="noopener noreferrer"&gt;Oh My ZSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;Fuzzy Finder (fzf)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zsh-users/zsh-autosuggestions" rel="noopener noreferrer"&gt;zsh-autosuggestions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting" rel="noopener noreferrer"&gt;zsh-syntax-highlighting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/a/5542996" rel="noopener noreferrer"&gt;Terminal Motions Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scriptingosx.com/2019/07/moving-to-zsh-part-5-completions" rel="noopener noreferrer"&gt;Tab Completion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;That's my setup. Most of these take under a minute to install and will save you hours over time. If you found this useful, feel free to follow me for more dev tooling tips.&lt;/p&gt;

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

&lt;p&gt;Also 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;



</description>
      <category>productivity</category>
      <category>cli</category>
      <category>zsh</category>
    </item>
  </channel>
</rss>
