<?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>Forem: Myles Ngicu</title>
    <description>The latest articles on Forem by Myles Ngicu (@myl3s).</description>
    <link>https://forem.com/myl3s</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3267913%2F530819c3-08ee-47e7-8f17-b0d57dbf1cd4.jpg</url>
      <title>Forem: Myles Ngicu</title>
      <link>https://forem.com/myl3s</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/myl3s"/>
    <language>en</language>
    <item>
      <title>React Ref Problem: Ref Pointing to Multiple DOM Elements with CSS Media Query Hiding</title>
      <dc:creator>Myles Ngicu</dc:creator>
      <pubDate>Tue, 09 Sep 2025 14:25:20 +0000</pubDate>
      <link>https://forem.com/myl3s/react-ref-problem-ref-pointing-to-multiple-dom-elements-with-css-media-query-hiding-168h</link>
      <guid>https://forem.com/myl3s/react-ref-problem-ref-pointing-to-multiple-dom-elements-with-css-media-query-hiding-168h</guid>
      <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br&gt;
In React, a single ref object can only hold a reference to one DOM element at a time via its .current property. Assigning the same ref to multiple elements causes the ref to point to the last rendered element. This can cause issues in event handling logic when multiple elements are rendered but some are hidden using CSS media queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem Description&lt;/strong&gt;&lt;br&gt;
I had a bug where the same React ref (locationRef) was assigned to two  components that render differently for desktop and mobile views. This resulted in clicks inside the desktop view not working while clicks in the mobile view worked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useEffect(() =&amp;gt; {
  function handleClickOutside(event) {
    if (
      locationRef.current &amp;amp;&amp;amp;
      !locationRef.current.contains(event.target)
    ) {
      setIsLocationOpen(false);
    }
  }

  document.addEventListener("mousedown", handleClickOutside);
  return () =&amp;gt; {
    document.removeEventListener("mousedown", handleClickOutside);
  };
}, [locationRef]);

// JSX structure
&amp;lt;DesktopOnly&amp;gt;
  &amp;lt;LocationContainer ref={locationRef}&amp;gt;
    {/* Desktop location toggle and menu */}
  &amp;lt;/LocationContainer&amp;gt;
&amp;lt;/DesktopOnly&amp;gt;

&amp;lt;MobileOnly&amp;gt;
  &amp;lt;LocationContainer ref={locationRef}&amp;gt;
    {/* Mobile location toggle and menu */}
  &amp;lt;/LocationContainer&amp;gt;
&amp;lt;/MobileOnly&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;In this setup:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The same locationRef is used on both desktop and mobile .&lt;/p&gt;

&lt;p&gt;The mobile container is hidden via CSS media queries, e.g., display: none when on desktop screen sizes.&lt;/p&gt;

&lt;p&gt;What Happens Internally?&lt;br&gt;
Both desktop and mobile  are present in the DOM; only one is visually hidden.&lt;/p&gt;

&lt;p&gt;React assigns locationRef.current to the last rendered , typically the mobile one.&lt;/p&gt;

&lt;p&gt;Even though the mobile container is hidden by CSS, locationRef.current points to its hidden DOM element.&lt;/p&gt;

&lt;p&gt;The click outside handler checks events against the hidden element, causing flawed logic:&lt;/p&gt;

&lt;p&gt;Clicks inside the visible desktop container may appear outside the referenced element.&lt;/p&gt;

&lt;p&gt;Resulting in setIsLocationOpen(false) triggering unexpectedly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Situation&lt;/strong&gt;&lt;br&gt;
If locationRef.current points to the mobile container which is hidden (but still in DOM due to CSS):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (locationRef.current &amp;amp;&amp;amp; !locationRef.current.contains(event.target)) {
  // This may trigger even if the click is inside the visible desktop container,
  // because locationRef.current points to the hidden mobile container node.
  setIsLocationOpen(false);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Recommended Solutions&lt;/strong&gt;&lt;br&gt;
&lt;u&gt;&lt;em&gt;1. Use Separate Refs for Desktop and Mobile&lt;/em&gt;&lt;/u&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const desktopLocationRef = useRef(null);
const mobileLocationRef = useRef(null);

useEffect(() =&amp;gt; {
  function handleClickOutside(event) {
    const activeRef = window.innerWidth &amp;gt;= 768 ? desktopLocationRef : mobileLocationRef;

    if (
      activeRef.current &amp;amp;&amp;amp;
      !activeRef.current.contains(event.target)
    ) {
      setIsLocationOpen(false);
    }
  }

  document.addEventListener("mousedown", handleClickOutside);
  return () =&amp;gt; {
    document.removeEventListener("mousedown", handleClickOutside);
  };
}, []);

&amp;lt;DesktopOnly&amp;gt;
  &amp;lt;LocationContainer ref={desktopLocationRef}&amp;gt;{/* desktop content */}&amp;lt;/LocationContainer&amp;gt;
&amp;lt;/DesktopOnly&amp;gt;

&amp;lt;MobileOnly&amp;gt;
  &amp;lt;LocationContainer ref={mobileLocationRef}&amp;gt;{/* mobile content */}&amp;lt;/LocationContainer&amp;gt;
&amp;lt;/MobileOnly&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;u&gt;&lt;em&gt;2. Conditionally Render Only One DOM Tree&lt;/em&gt;&lt;/u&gt;&lt;br&gt;
Instead of hiding via CSS, conditionally render only the applicable container per screen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return (
  &amp;lt;&amp;gt;
    {isDesktop ? (
      &amp;lt;LocationContainer ref={locationRefDesktop}&amp;gt;{/* desktop */}&amp;lt;/LocationContainer&amp;gt;
    ) : (
      &amp;lt;LocationContainer ref={locationRefMobile}&amp;gt;{/* mobile */}&amp;lt;/LocationContainer&amp;gt;
    )}
  &amp;lt;/&amp;gt;
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents multiple refs assigned to DOM elements simultaneously.&lt;/p&gt;

</description>
      <category>react</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Vibe coding clarity with Kiro specs</title>
      <dc:creator>Myles Ngicu</dc:creator>
      <pubDate>Tue, 22 Jul 2025 14:50:01 +0000</pubDate>
      <link>https://forem.com/myl3s/vibe-coding-clarity-with-kiro-specs-5e56</link>
      <guid>https://forem.com/myl3s/vibe-coding-clarity-with-kiro-specs-5e56</guid>
      <description>&lt;p&gt;When AWS made the Kiro announcement, I was more than excited to try it out. As I write this blog, it is still in it's preview stage. I was able to download it before its access was limited for fine-tuning. I would love to share my experience so far.&lt;/p&gt;

&lt;p&gt;We are in the awesome age(some would think scary😅), of code-native AI agents. Think of it as a coding partner that is integrated to your coding environment such as your terminal or IDE. It has a codebase-wide understanding of your project which means it understands your project structure and gets the context across multiple files.&lt;/p&gt;

&lt;p&gt;Kiro is one of these cool tools. When I downloaded it, I signed in using my AWS Builder ID. There are other sign-in options including Google and Github. I loved this option that allowed me to import my configs from VScode&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%2Flqru4vlgfliou0f62c7f.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%2Flqru4vlgfliou0f62c7f.png" alt="Import VSCode configs" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you finish setting up and open a project folder, you get to choose what mode you want to build 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.amazonaws.com%2Fuploads%2Farticles%2Fl7g32viotbcp9ftdxs57.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%2Fl7g32viotbcp9ftdxs57.png" alt="Kiro build modes" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the &lt;strong&gt;Vibe&lt;/strong&gt; mode you chat with Kiro and tell it what you need it to do. It gets right into the implementation. Most code-native AI agents do something similar. This is an example of a prompt I wrote to test the 'vibe mode'. &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%2F1zgjt1uitxyc9sja1clf.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%2F1zgjt1uitxyc9sja1clf.png" alt="Kiro vibe mode" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For me, the real 'magic' happens in the &lt;strong&gt;Spec&lt;/strong&gt; mode. Kiro specs introduces clarity to vibe coding! It starts by generating &lt;strong&gt;user stories&lt;/strong&gt;, just as you would do in the requirement gathering stage of s/w development. You can tell it to edit and update the requirements until you are satisfied. When it's all good you proceed to design.&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%2Ftqle40qgonpndh3vpjf5.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%2Ftqle40qgonpndh3vpjf5.png" alt="Kiro requirement generation" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kiro designs the &lt;strong&gt;system architecture for you&lt;/strong&gt;! From architecture diagrams to Typescript interfaces, it knows what is needed based on the requirements. Once again, you can tell Kiro to update it until it fits your preference, then you proceed to generating the task list.&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%2Fdv53f387ux1rq3ixw5iv.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%2Fdv53f387ux1rq3ixw5iv.png" alt="Kiro architecture diagram generation" width="800" height="452"&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fcl8tozalnq8km3xc0rvr.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%2Fcl8tozalnq8km3xc0rvr.png" alt="Kiro TS interfaces generation" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now this is my favourite part. Unlike your usual vibe coding sessions, this one is well guided. Kiro generates an &lt;strong&gt;implementation plan&lt;/strong&gt; which is a sequence of tasks to execute. The tasks are modular and include test generation. Just click 'Start task' and let Kiro execute.&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%2Fopt84b5i0h3wn6uomytp.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%2Fopt84b5i0h3wn6uomytp.png" alt="Kiro executing tasks" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you see where the clarity in vibe coding comes in, right? As you vibe code, Kiro allows you to be very organised. You know exactly what tasks are done and which ones are remaining. One can almost visualise their project, end-to-end.&lt;/p&gt;

&lt;p&gt;I'm excited to try out more of their features such as the &lt;strong&gt;Agent hooks&lt;/strong&gt; which allows you to automate repetitive tasks. I highly recommend that you &lt;a href="https://kiro.dev/downloads/" rel="noopener noreferrer"&gt;join the waitlist&lt;/a&gt; to get this AWSome experience with Kiro!&lt;/p&gt;

</description>
      <category>kiro</category>
      <category>aws</category>
      <category>ai</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Building a game using Amazon Q CLI</title>
      <dc:creator>Myles Ngicu</dc:creator>
      <pubDate>Mon, 16 Jun 2025 10:08:46 +0000</pubDate>
      <link>https://forem.com/myl3s/building-a-game-using-amazon-q-cli-2h7a</link>
      <guid>https://forem.com/myl3s/building-a-game-using-amazon-q-cli-2h7a</guid>
      <description>&lt;h2&gt;
  
  
  Creating a Space Invaders Game with Amazon Q CLI
&lt;/h2&gt;

&lt;p&gt;If you think Amazon Q is cool, make a game with it on the CLI and experience the AWSomeness! That's exactly what I did and I marvelled at how easy it is.&lt;br&gt;
Amazon Q as a generative AI for developers. On the CLI, it doesn't have native support for Windows. I hadd a little trouble with that but I found out that I can install it using &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/install" rel="noopener noreferrer"&gt;WSL&lt;/a&gt;. After that, just type 'q' and voila, you're 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.amazonaws.com%2Fuploads%2Farticles%2Flcm5mr1ysazj1gwaotso.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%2Flcm5mr1ysazj1gwaotso.png" alt="Launching Amazon Q on WSL" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I wanted to create the retro game called "Space Invaders" where a space ship shoots down alien invaders. All I needed to do was give Amazon Q this detailed prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a complete "Space Invaders"-style game using vanilla HTML, CSS, and JavaScript. The game should have a player ship at the bottom that moves left and right with arrow keys and shoots bullets upward with spacebar. Rows of aliens move side to side at the top and shoot bullets downward toward the player. Players score points by destroying aliens, the score should be displayed and updated in real time, and the game should show "GAME OVER" if an alien bullet hits the ship. Provide a directory structure with index.html, style.css, and script.js files, well-commented and functional by opening index.html in a modern browser.
&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%2F1vqxys52pabpfoi11a6y.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%2F1vqxys52pabpfoi11a6y.png" alt="Prompting Amazon Q CLI" width="800" height="468"&gt;&lt;/a&gt;&lt;br&gt;
It requested for permission to run a shell command and I did so by typing 't'(always allow such actions for this session).&lt;/p&gt;
&lt;h2&gt;
  
  
  Amazon Q's Response
&lt;/h2&gt;

&lt;p&gt;Amazon Q created a folder with the following files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;space-invaders/
├── index.html    # Main HTML structure
├── style.css     # Game styling
└── script.js     # Game logic and functionality
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response included instructions on how to run the game.&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%2Fthv4027ewv000vpvbns5.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%2Fthv4027ewv000vpvbns5.png" alt="Amazon Q CLI response" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Playing the game
&lt;/h2&gt;

&lt;p&gt;I navigated to the folder containing the game files and ran the index.html on my browser&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%2F66rk9rx7ricxnuszx8in.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%2F66rk9rx7ricxnuszx8in.png" alt="File Explorer" width="800" height="604"&gt;&lt;/a&gt;&lt;br&gt;
As requested in the prompt, the game includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Player ship that moves left and right with arrow keys&lt;/li&gt;
&lt;li&gt;Shooting functionality with the spacebar&lt;/li&gt;
&lt;li&gt;Rows of aliens that move side to side and gradually descend&lt;/li&gt;
&lt;li&gt;Aliens that randomly shoot bullets downward&lt;/li&gt;
&lt;li&gt;Score tracking that updates in real-time&lt;/li&gt;
&lt;li&gt;"GAME OVER" display when hit by an alien bullet&lt;/li&gt;
&lt;li&gt;Different coloured aliens worth different point values&lt;/li&gt;
&lt;/ul&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%2Fiqmn0bwudjw4a0s1a62o.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%2Fiqmn0bwudjw4a0s1a62o.png" alt="Playing Space Invaders" width="800" height="448"&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fhzkqtc5pfa6bziuvccdo.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%2Fhzkqtc5pfa6bziuvccdo.png" alt="Space Invaders game lost" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, I haven't won a game yet(the aliens keep getting me). I enjoyed how easy it is to create the Space Invaders game using Amazon Q CLI in a single prompt-response interaction. It shows just one of the many capabilities of Amazon Q on the CLI.&lt;br&gt;
I hope y'all create cool games and join the &lt;a href="https://community.aws/content/2y6egGcPAGQs8EwtQUM9KAONojz/build-games-challenge-build-classics-with-amazon-q-developer-cli" rel="noopener noreferrer"&gt;challenge&lt;/a&gt; which ends on June 30th 2025.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>amazonqdevcli</category>
      <category>buildgameschallenge</category>
      <category>amazonqcli</category>
    </item>
    <item>
      <title>Debut!</title>
      <dc:creator>Myles Ngicu</dc:creator>
      <pubDate>Mon, 16 Jun 2025 06:37:08 +0000</pubDate>
      <link>https://forem.com/myl3s/debut-3772</link>
      <guid>https://forem.com/myl3s/debut-3772</guid>
      <description>&lt;p&gt;Hi there! This is my first day here(I feel like an intern😅). I'll use this space mostly to blog about cloud related projects I do on AWS. See you around! &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
