<?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: Jason Guo</title>
    <description>The latest articles on Forem by Jason Guo (@jasonguo).</description>
    <link>https://forem.com/jasonguo</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%2F3428797%2Fd645b7cf-ad0f-4d03-9fe1-ef243ee8d217.png</url>
      <title>Forem: Jason Guo</title>
      <link>https://forem.com/jasonguo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jasonguo"/>
    <language>en</language>
    <item>
      <title>Building a Cinematic 3D F-16 Takeoff Simulation Entirely in the Browser
When we think of 3D flight simulations, we usually picture heavy game engines like Unreal or Unity. 
https://best-games.io/blog/building-a-cinematic-3d-f-16-takeoff-simulation-entirely</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Sat, 04 Apr 2026 08:57:44 +0000</pubDate>
      <link>https://forem.com/jasonguo/building-a-cinematic-3d-f-16-takeoff-simulation-entirely-in-the-browser-when-we-think-of-3d-flight-2oll</link>
      <guid>https://forem.com/jasonguo/building-a-cinematic-3d-f-16-takeoff-simulation-entirely-in-the-browser-when-we-think-of-3d-flight-2oll</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://best-games.io/blog/building-a-cinematic-3d-f-16-takeoff-simulation-entirely" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbest-games.io%2Fimages%2Fbestgames-og.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://best-games.io/blog/building-a-cinematic-3d-f-16-takeoff-simulation-entirely" rel="noopener noreferrer" class="c-link"&gt;
            Best-Games.io - Play 200+ Free Online Games Instantly | No Download
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Play 200+ free online games instantly! Snake, Mahjong, 8 Ball Pool, racing, puzzle &amp;amp; action games. No download - play in browser.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbest-games.io%2Fimages%2Ficons%2Ficon.svg" width="512" height="512"&gt;
          best-games.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I Built a Game Site with an iframe — Someone Hit a 210-Second World Record on It</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Tue, 31 Mar 2026 16:25:40 +0000</pubDate>
      <link>https://forem.com/jasonguo/i-built-a-game-site-with-an-iframe-someone-hit-a-210-second-world-record-on-it-4mjl</link>
      <guid>https://forem.com/jasonguo/i-built-a-game-site-with-an-iframe-someone-hit-a-210-second-world-record-on-it-4mjl</guid>
      <description>&lt;p&gt;I'm not a game developer. I'm a Web developer addicted to side projects, and one afternoon I had a thought: instead of spending months building a game from scratch, what if I did something faster to validate the idea first — &lt;strong&gt;curate great games and build a genuinely useful game portal around them?​&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's how &lt;a href="https://taproad-game.com" rel="noopener noreferrer"&gt;taproad-game.com&lt;/a&gt; was born. The technical core is an iframe, but there's a lot built around it. This post is about the rabbit holes I fell into, the lessons I picked up, and why an "iframe site" can actually retain real users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Tap Road?​&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before deciding which game to build around, I did a round of keyword research. Tap Road is an HTML5 endless runner developed by AzGames.io — a glowing ball rolls down a neon-lit highway, and players tap or click to switch lanes, dodge obstacles, and collect gems.&lt;/p&gt;

&lt;p&gt;The numbers caught my eye immediately: &lt;strong&gt;7 million+ plays, a 4.2/5 rating, and nearly 11,000 reviews.&lt;/strong&gt;​ This wasn't some obscure indie experiment — it was a market-validated product with a real player base.&lt;/p&gt;

&lt;p&gt;More importantly, the gameplay is dead simple — &lt;strong&gt;one tap, zero learning curve.&lt;/strong&gt;​ That means anyone who lands on the site can pick it up within 5 seconds, with no onboarding copy needed from me. For a traffic-funnel game site, that's the ideal anchor game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the Game Actually Retains Players&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before building the site, I spent a serious amount of time studying what makes Tap Road work, because I needed to genuinely understand why it's fun before I could write content that would keep visitors around.&lt;/p&gt;

&lt;p&gt;The answer lies in its &lt;strong&gt;gem economy&lt;/strong&gt;.​ There are three gem tiers: common blue gems, purple gems worth 3x, and golden gems worth 10x. The golden gems are always placed in the most dangerous spots — you can go for them, but you'll probably die trying. This design turns every run into a series of micro-decisions: take the risk or play it safe? That tension creates the "just one more game" compulsion, rather than a pure reflex challenge.&lt;/p&gt;

&lt;p&gt;Gems are spent in the shop on 30+ ball skins, trail effects, and track themes. The game also has a hidden skin system — the &lt;strong&gt;Ghost Ball&lt;/strong&gt; requires dying 100 times total, the &lt;strong&gt;Rainbow Ball&lt;/strong&gt; requires playing 50 games in a single day, and the &lt;strong&gt;Supernova Ball&lt;/strong&gt; requires collecting 10,000 lifetime gems. These mechanics convert short-term "one more run" impulses into long-term return visit motivation.&lt;/p&gt;

&lt;p&gt;The speed system is worth noting too. The game ramps up at three thresholds: 30 seconds, 60 seconds, and 90 seconds. The 10-second window after each speed bump is the most dangerous — top players' strategy is to completely stop chasing gems during that window, focus purely on survival, and only reintroduce gem collection once their hands and eyes have adjusted to the new tempo.&lt;/p&gt;

&lt;p&gt;The community-verified world record currently stands at &lt;strong&gt;210 seconds&lt;/strong&gt;, held by a player known as "NeonRunner" with a full gameplay recording as proof. That number sounds modest until you experience the blistering speed the game reaches past 90 seconds — every tap has to be frame-perfect.&lt;/p&gt;

&lt;p&gt;You can try it yourself at &lt;a href="https://taproad-game.com" rel="noopener noreferrer"&gt;taproad-game.com&lt;/a&gt; — no download, no signup, runs instantly in any browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Real Challenge of an iframe Site Isn't Technical&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Embedding the game took me under an hour. What actually took time was &lt;strong&gt;building a valuable content layer around the iframe&lt;/strong&gt;.​&lt;/p&gt;

&lt;p&gt;A page that's just an iframe offers no additional value to users and is essentially invisible to search engines. The core question I needed to answer was: why would a player come to my site instead of going directly to the original?&lt;/p&gt;

&lt;p&gt;My answer was: &lt;strong&gt;become the best information hub for the game&lt;/strong&gt;.​&lt;/p&gt;

&lt;p&gt;That meant genuinely researching the game and writing substantive guides — not "click to switch lanes" filler, but verified tips like "stop chasing gems for the first 10 seconds after the 90-second speed increase." It meant cataloguing the hidden skin unlock conditions, gathering world record discussions from the community, and explaining the underlying logic of the gem economy.&lt;/p&gt;

&lt;p&gt;Once the content was in place, the site's bounce rate dropped noticeably. Users were spending more time on the page because they were reading guides and checking unlock conditions before and after playing — the content and the game were feeding each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Unblocked" Audience: An Underrated Niche&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most surprising traffic source after launch was users searching ​&lt;strong&gt;"tap road unblocked."​&lt;/strong&gt; School and workplace networks block a huge number of gaming sites, and students and office workers are exactly the core demographic for quick browser games during downtime.&lt;/p&gt;

&lt;p&gt;I specifically optimized the site's technical setup for this — clean HTTPS, a domain with no history of being flagged by content filters — and wrote a dedicated &lt;a href="https://taproad-game.com/tap-road-unblocked" rel="noopener noreferrer"&gt;access guide page&lt;/a&gt;. This segment now accounts for a meaningful share of traffic, and the user quality is high because they arrive with clear intent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Actually Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Going in, I assumed an iframe site was a "low-effort" project I could set up and walk away from. The reality is that a low technical barrier means the competitive moat is entirely in content and execution.​ Anyone can replicate my technical setup in an hour. Nobody can replicate the guide content and community data I've compiled in an hour.&lt;/p&gt;

&lt;p&gt;The other lesson was about product selection logic. Building a site around a game with 7 million verified plays is a fundamentally different risk profile than building around a game that just launched. The former is distribution on top of validated demand. The latter is a bet that demand exists at all. For an indie developer, the former has a dramatically higher success rate.&lt;/p&gt;

&lt;p&gt;Finally, the &lt;strong&gt;"zero friction" nature of browser games is a real distribution advantage&lt;/strong&gt;.​ Under 2 seconds from link-click to gameplay — no platform that requires a download or account creation can match that. If you're considering any game-adjacent project, HTML5 browser games are a seriously underrated space.&lt;/p&gt;

&lt;p&gt;If you have thoughts on SEO strategy, content architecture, or monetization for game aggregator sites, I'd love to hear them in the comments. I'm also curious: &lt;strong&gt;what's the most "technically simple but operationally complex" side project you've ever shipped?​&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gamedev</category>
      <category>java</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Shipping a game in 2026? Easier than ever.
Getting noticed? Brutally hard.
The teams breaking through don't just build better — they think like publishers.
Full breakdown 
https://best-games.io/articles/2026-03-30-indie-game-development-brief-march-2026</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Mon, 30 Mar 2026 07:44:16 +0000</pubDate>
      <link>https://forem.com/jasonguo/shipping-a-game-in-2026-easier-than-ever-getting-noticed-brutally-hard-the-teams-breaking-5dm</link>
      <guid>https://forem.com/jasonguo/shipping-a-game-in-2026-easier-than-ever-getting-noticed-brutally-hard-the-teams-breaking-5dm</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://best-games.io/articles/2026-03-30-indie-game-development-brief-march-2026" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbest-games.io%2Fimages%2Fbestgames-og.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://best-games.io/articles/2026-03-30-indie-game-development-brief-march-2026" rel="noopener noreferrer" class="c-link"&gt;
            Best-Games.io - Play 200+ Free Online Games Instantly | No Download
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Play 200+ free online games instantly! Snake, Mahjong, 8 Ball Pool, racing, puzzle &amp;amp; action games. No download - play in browser.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbest-games.io%2Fimages%2Ficons%2Ficon.svg" width="512" height="512"&gt;
          best-games.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>The game industry in March 2026: record Quest usage, Xbox showcases, 3M Crimson Desert sales — and mass layoffs. Demand didn't disappear. It just stopped protecting jobs.
New piece on why player spending and employment stability have officially decoupled.</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Fri, 27 Mar 2026 10:13:22 +0000</pubDate>
      <link>https://forem.com/jasonguo/the-game-industry-in-march-2026-record-quest-usage-xbox-showcases-3m-crimson-desert-sales-and-2kpd</link>
      <guid>https://forem.com/jasonguo/the-game-industry-in-march-2026-record-quest-usage-xbox-showcases-3m-crimson-desert-sales-and-2kpd</guid>
      <description></description>
    </item>
    <item>
      <title>I Built a Pixel Art Roguelite in Vanilla JS — Here Are 6 Things That Broke (And What I Learned)</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Mon, 23 Mar 2026 15:00:39 +0000</pubDate>
      <link>https://forem.com/jasonguo/i-built-a-pixel-art-roguelite-in-vanilla-js-here-are-6-things-that-broke-and-what-i-learned-3gb0</link>
      <guid>https://forem.com/jasonguo/i-built-a-pixel-art-roguelite-in-vanilla-js-here-are-6-things-that-broke-and-what-i-learned-3gb0</guid>
      <description>&lt;p&gt;Full article:&lt;br&gt;
&lt;a href="https://instantgames.top/blog/posts/pixel-dungeon-dev-log-building-roguelite-crawler-with-ai.html" rel="noopener noreferrer"&gt;Pixel dungeon dev log&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I spent the last few weeks building a roguelite dungeon crawler using nothing but vanilla JavaScript and HTML5 Canvas. No React. No Phaser. No build tools. Just 6 JS files, a 16×16 pixel art tileset, and a growing list of bugs I didn't see coming.&lt;/p&gt;

&lt;p&gt;The game has procedural dungeon generation, 5+ enemy types with AI state machines, a full camp system with crafting stations, procedural Web Audio music, and an equipment/inventory system. It runs from a single HTML file.&lt;/p&gt;

&lt;p&gt;Here's what actually went wrong — and the fixes that made the biggest difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Enemy That Disappeared When You Got Close&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most absurd bug I encountered: enemies became invisible when the player walked toward them.&lt;/p&gt;

&lt;p&gt;The cause? State transitions. When an enemy switches from patrol to chase (triggered by proximity), there's a window of 2-3 frames where the state variable updates but the sprite reference hasn't resolved yet. Canvas drawImage() with an undefined source doesn't throw an error — it just silently draws nothing.&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%2Ftjcfdc2jpign6khktnsn.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%2Ftjcfdc2jpign6khktnsn.png" alt=" " width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Takeaway: Canvas fails silently. Unlike DOM rendering, you get zero feedback when drawImage receives bad input. Defensive fallback chains are mandatory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Players Couldn't Figure Out the Camp&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After clearing floor 1, players enter a camp with 9 interactive stations — bonfire, workbench, anvil, furnace, alchemy table, etc. I thought it was self-explanatory.&lt;/p&gt;

&lt;p&gt;The first person who played it immediately asked: "What is this? What am I supposed to do?"&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%2F29nt36be937ri4hhxrkh.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%2F29nt36be937ri4hhxrkh.png" alt=" " width="642" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The problem: in 16×16 pixel art, a bonfire is ~12 pixels of flickering orange. An anvil is a gray blob next to a different gray blob. Without explicit labels, it's all noise.&lt;/p&gt;

&lt;p&gt;The fix was information layering at three distances:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screen-level: Welcome banner with instructions&lt;/li&gt;
&lt;li&gt;Room-level: Persistent icon + name labels on every station&lt;/li&gt;
&lt;li&gt;Close-up: Pulsing highlight + "[E] to interact" + description&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Takeaway: If you built it, you already know what everything does. That knowledge makes you blind to your own UX problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Canvas Resolution Trap&lt;/strong&gt;&lt;br&gt;
Every Canvas tutorial starts with:&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%2Feopg1oz3tv3f01g6wi3r.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%2Feopg1oz3tv3f01g6wi3r.png" alt=" " width="800" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For pixel art, this is a disaster.&lt;/p&gt;

&lt;p&gt;Pixel art requires integer scaling. A 16×16 tile at 1753px window width creates fractional pixel offsets. Sprites shimmer. Grid lines misalign. The whole thing looks "off" in a way players feel but can't articulate.&lt;/p&gt;

&lt;p&gt;The fix is separating internal resolution from display size:&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%2Fq299fssslso345oihtbo.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%2Fq299fssslso345oihtbo.png" alt=" " width="800" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But then there's a follow-up trap: mouse coordinates break. event.offsetX maps to CSS display size, not internal canvas size. Every click-based UI element silently stops working.&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%2F77xfswzs3l9a2auxdwzw.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%2F77xfswzs3l9a2auxdwzw.png" alt=" " width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And another follow-up: HUD elements using position: fixed anchor to the browser window, not the game canvas. When the canvas is centered with dark borders, the HUD floats off into the corner.&lt;/p&gt;

&lt;p&gt;Solution: wrap everything in a position: relative container, use position: absolute for overlays.&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%2Fldvvv2qw91f9ex4kyyuq.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%2Fldvvv2qw91f9ex4kyyuq.png" alt=" " width="640" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Tile Caching is Non-Negotiable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Early builds re-drew every tile every frame. On a 40×40 map: 1,600 fillRect calls per frame, plus decorations like torches, cracks, and wall details.&lt;/p&gt;

&lt;p&gt;Switching to an off-screen canvas tile cache — render the map once, blit it as a single drawImage — dropped draw calls from 2,000+ to under 200. On mobile, this was the difference between 60fps and slideshow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Atmosphere is Just Math&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The difference between "atmospheric dungeon" and "I can't see anything" is one float:&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%2Fpp3cokuwyr5bkhd80eil.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%2Fpp3cokuwyr5bkhd80eil.png" alt=" " width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same engine. Same radial gradient. Different emotional experience.&lt;/p&gt;

&lt;p&gt;I also bumped the camp floor tile colors from rgb(68+v) to rgb(95+v) — a +27 shift. The camp instantly felt warmer, cozier, more safe. Atmosphere isn't a vague artistic quality. It's concrete numbers in your rendering pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Procedural Audio is Underrated&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Zero audio files in the entire project. Every sound — sword slashes, footsteps, healing chimes, background music — is synthesized using the Web Audio API.&lt;/p&gt;

&lt;p&gt;A sword attack is a filtered noise burst. A healing potion is an ascending C-E-G arpeggio. The dungeon BGM is a looping minor pentatonic pattern in square waves.&lt;/p&gt;

&lt;p&gt;The best part: sounds become tunable. Boss hits play at lower frequency. Critical hits add a pitch sweep. Camp music shifts the filter for warmth. Sound becomes data, not static assets.&lt;/p&gt;

&lt;p&gt;The Full Story&lt;br&gt;
This post covers the highlights, but there's a lot more in the full writeup — the procedural dungeon generation algorithm, floor difficulty scaling, the complete camp station system, and how the entire architecture fits in 6 files with zero dependencies.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://instantgames.top/blog/posts/pixel-dungeon-dev-log-building-roguelite-crawler-with-ai.html" rel="noopener noreferrer"&gt;Read the full dev log on InstantGames&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎮 &lt;a href="https://instantgames.top/lab/pixel-crawler/" rel="noopener noreferrer"&gt;Play the game (browser, no install)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built with vanilla JavaScript + HTML5 Canvas. No frameworks. No build tools. The whole game is a single HTML file with 6 JS modules. If you're doing something similar, I'd love to hear about it in the comments.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>javascript</category>
      <category>pixelart</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A developer built 4 complete 3D games in 7 days.</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Wed, 18 Mar 2026 13:50:47 +0000</pubDate>
      <link>https://forem.com/jasonguo/a-developer-built-4-complete-3d-games-in-7-days-41i6</link>
      <guid>https://forem.com/jasonguo/a-developer-built-4-complete-3d-games-in-7-days-41i6</guid>
      <description>&lt;p&gt;A developer built 4 complete 3D games in 7 days.​&lt;br&gt;
Zero lines of code written by hand.&lt;br&gt;
Total cost: ~$20.&lt;br&gt;
Here's how "Vibe Coding" is about to destroy the barrier to game development:&lt;br&gt;
Instead of learning Unity or Unreal for months, you just... talk.&lt;br&gt;
"Make a 3D arena shooter with weapon pickups and enemy AI."&lt;br&gt;
→ AI writes the code&lt;br&gt;
→ AI generates the assets&lt;br&gt;
→ AI debugs the errors&lt;br&gt;
→ You play and give feedback&lt;br&gt;
→ Repeat until done&lt;br&gt;
The stack he used:&lt;br&gt;
🔧 Claude Code (primary) + Codex CLI&lt;br&gt;
🎮 ThreeJS for 3D rendering&lt;br&gt;
🎨 Meshy for AI-generated 3D models&lt;br&gt;
🧪 Playwright for automated testing&lt;br&gt;
In one week: endless runner, tower defense, Mario Party clone, arena shooter.&lt;br&gt;
15,000+ lines of code. All AI-generated.&lt;br&gt;
The full step-by-step guide is here:&lt;br&gt;
👉 &lt;a href="https://best-games.io/game-daily/2026-03-18" rel="noopener noreferrer"&gt;Game Daily&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
    </item>
    <item>
      <title>AI Daily Report: Foundation Models · Research (Mar 17, 2026)</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Tue, 17 Mar 2026 14:33:58 +0000</pubDate>
      <link>https://forem.com/jasonguo/ai-daily-report-foundation-models-research-mar-17-2026-4bk8</link>
      <guid>https://forem.com/jasonguo/ai-daily-report-foundation-models-research-mar-17-2026-4bk8</guid>
      <description>&lt;p&gt;OpenAI’s GPT-5.4 isn’t just a bigger model; its 32x efficiency gain for reasoning tasks—dropping a complex ARC-AGI-1 task from $11.64 to a mere $0.37—changes the unit economics of autonomy. &lt;/p&gt;

&lt;p&gt;We have moved from 'is this possible?' to 'how many millions of times per day should we do this?' &lt;/p&gt;

&lt;p&gt;This is why NVIDIA is pivoting GTC 2026 toward the 'Agentic Scaling Law.' The bottleneck is no longer raw tokens-per-second; it’s the infrastructure required to manage sub-agent spawning, memory movement, and long-context tool calling. &lt;/p&gt;

&lt;p&gt;If you are building for the chat interface, you are building for 2024. If you are building for the 'NemoClaw' and 'GPU+LPU' supercomputers, you are building for the agentic era.&lt;/p&gt;

&lt;p&gt;Read full article:&lt;br&gt;
&lt;a href="https://windflash.us/daily-report/en/2026-03-17" rel="noopener noreferrer"&gt;https://windflash.us/daily-report/en/2026-03-17&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Built a Tower Defense Game With Zero Dependencies — AI Art, Procedural Audio, and ~3,200 Lines of Vanilla JS</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Mon, 16 Mar 2026 12:32:12 +0000</pubDate>
      <link>https://forem.com/jasonguo/i-built-a-tower-defense-game-with-zero-dependencies-ai-art-procedural-audio-and-3200-lines-of-42m1</link>
      <guid>https://forem.com/jasonguo/i-built-a-tower-defense-game-with-zero-dependencies-ai-art-procedural-audio-and-3200-lines-of-42m1</guid>
      <description>&lt;p&gt;No React. No Phaser. No Pixi.js. No npm install. Just &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;, vanilla JS, and the Web Audio API.&lt;/p&gt;

&lt;p&gt;🎮 &lt;a href="https://instantgames.top/lab/arcane-bastion/" rel="noopener noreferrer"&gt;Play it here&lt;/a&gt; · 📖 &lt;a href="https://instantgames.top/blog/posts/arcane-bastion-dev-log-building-tower-defense-with-ai.html" rel="noopener noreferrer"&gt;Full dev log&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Arcane Bastion is a crystal tower defense game with：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 elemental towers（Fire / Ice / Lightning / Vine / Arcane）× 3 upgrade tiers
&lt;/li&gt;
&lt;li&gt;10 enemy types with status effects（freeze, burn, poison）
&lt;/li&gt;
&lt;li&gt;AI‑generated art — every sprite and map background
&lt;/li&gt;
&lt;li&gt;Procedural audio — every sound synthesized from oscillators, zero audio files
&lt;/li&gt;
&lt;li&gt;Dynamic tower rotation — smooth tracking with recoil feedback
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The entire thing is 9 script files loaded via &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags in dependency order. Old school, but it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arcane-bastion/
├── js/
│   ├── sprites.js    ← async image loader (18 assets)
│   ├── map.js        ← 20×14 tile grid + AI backgrounds
│   ├── tower.js      ← 5 types, targeting, smooth rotation
│   ├── enemy.js      ← 10 types, waypoint pathfinding
│   ├── projectile.js ← homing missiles, chain lightning
│   ├── audio.js      ← Web Audio synthesis (~400 lines)
│   ├── ui.js         ← HUD, panels, bestiary overlay
│   ├── game.js       ← 60fps loop, wave state machine
│   └── demo-mode.js  ← scripted auto-demo + MediaRecorder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Hardest Bug: Chrome's Autoplay Policy 🔇
&lt;/h2&gt;

&lt;p&gt;This one wasted hours. My audio engine worked perfectly in local testing, but was completely silent on Chrome after deployment.&lt;/p&gt;

&lt;p&gt;Root cause: Creating an &lt;code&gt;AudioContext&lt;/code&gt; before the first user gesture puts it in suspended state — permanently. My &lt;code&gt;Game.init()&lt;/code&gt; was calling &lt;code&gt;AudioEngine.init()&lt;/code&gt; on page load.&lt;/p&gt;

&lt;p&gt;The fix：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ BAD: Creates AudioContext on page load&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AudioContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// suspended forever!&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ GOOD: Lazy-create on first user interaction&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AudioContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="c1"&gt;// now it works because user clicked first&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And crucially — every sound function must call &lt;code&gt;ensureContext()&lt;/code&gt; &lt;strong&gt;before&lt;/strong&gt; the &lt;code&gt;if (!ctx) return&lt;/code&gt; guard, not after. Get the order wrong and the context never gets created.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Art: Not Plug-and-Play
&lt;/h2&gt;

&lt;p&gt;I generated all 18 visual assets（5 towers, 10 enemies, 3 maps）using AI image generation. Sounds easy, right?&lt;/p&gt;

&lt;p&gt;The reality：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistency — Every prompt needed the same style anchor: “dark fantasy, pixel art, top-down, glowing magical effects”
&lt;/li&gt;
&lt;li&gt;Transparency — Early sprites had visible rectangular backgrounds. Each needed manual cleanup
&lt;/li&gt;
&lt;li&gt;Contrast — Sprites that looked great on a white canvas disappeared against dark map backgrounds. Had to add glow auras and brightness boosts
&lt;/li&gt;
&lt;li&gt;Scale — A beautiful 512×512 sprite becomes a blurry 50px blob at game scale
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI art saved weeks of illustration work, but the integration “last mile” still required significant manual effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Procedural Audio: Math → Sound
&lt;/h2&gt;

&lt;p&gt;The most satisfying system to build. Every sound in the game is synthesized from &lt;code&gt;OscillatorNode&lt;/code&gt; waveforms：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Frost tower attack: crystalline "ping"&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;frostShoot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;playTone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sine&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// high shimmer&lt;/span&gt;
    &lt;span class="nf"&gt;playTone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;triangle&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// harmonic&lt;/span&gt;
    &lt;span class="nf"&gt;playNoise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                  &lt;span class="c1"&gt;// ice crackle&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fire, ice, lightning, vine, arcane — each element has a unique audio signature created by combining oscillator types（sine, triangle, sawtooth, square）at different frequencies and durations.&lt;/p&gt;

&lt;p&gt;The background music is a multi‑oscillator ambient drone that evolves over time. The total audio system is ~400 lines — zero bytes of audio assets loaded.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Changes That Made the Biggest Visual Difference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AI map backgrounds replacing procedural tiles — went from “programmer art” to “atmospheric”
&lt;/li&gt;
&lt;li&gt;Glow auras on tower sprites（radial gradient circles behind each tower）— instant depth
&lt;/li&gt;
&lt;li&gt;Smooth tower rotation with &lt;code&gt;Math.atan2&lt;/code&gt; + lerp interpolation — made everything feel alive
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these changed gameplay. All of them changed how the game feels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Stats
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lines of JS&lt;/td&gt;
&lt;td&gt;~3,200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code modules&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI-generated assets&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External dependencies&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio files&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build tools&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I wrote a much deeper technical breakdown covering grid systems, pathfinding, chain lightning implementation, tower synergies, and how I recorded the demo video with audio using the browser's MediaRecorder API.&lt;/p&gt;

&lt;p&gt;📖 &lt;a href="https://instantgames.top/blog/posts/arcane-bastion-dev-log-building-tower-defense-with-ai.html" rel="noopener noreferrer"&gt;Read the full 3,000+ word dev log&lt;/a&gt; →&lt;/p&gt;

&lt;p&gt;🎮 &lt;a href="https://instantgames.top/lab/arcane-bastion/" rel="noopener noreferrer"&gt;Play Arcane Bastion&lt;/a&gt; →&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Claude just launched Code Review for Claude Code, and I think this is a much bigger signal than a normal feature release.

The next bottleneck in AI coding is no longer writing code.
It’s reviewing code.
https://claude.com/blog/code-review</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Tue, 10 Mar 2026 03:59:23 +0000</pubDate>
      <link>https://forem.com/jasonguo/claude-just-launched-code-review-for-claude-code-and-i-think-this-is-a-much-bigger-signal-than-a-2746</link>
      <guid>https://forem.com/jasonguo/claude-just-launched-code-review-for-claude-code-and-i-think-this-is-a-much-bigger-signal-than-a-2746</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://claude.com/blog/code-review" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;claude.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




</description>
      <category>ai</category>
      <category>codequality</category>
      <category>news</category>
      <category>programming</category>
    </item>
    <item>
      <title>I built a passive income gaming site in 7 days using AI — here's the exact workflow</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Fri, 06 Mar 2026 15:05:51 +0000</pubDate>
      <link>https://forem.com/jasonguo/i-built-a-passive-income-gaming-site-in-7-days-using-ai-heres-the-exact-workflow-59de</link>
      <guid>https://forem.com/jasonguo/i-built-a-passive-income-gaming-site-in-7-days-using-ai-heres-the-exact-workflow-59de</guid>
      <description>&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%2Fps5y2hc5bpe1s6lxp5s2.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%2Fps5y2hc5bpe1s6lxp5s2.png" alt=" " width="760" height="429"&gt;&lt;/a&gt;&lt;br&gt;
Last week I sat down with Cursor, a domain registrar, and a very specific niche keyword. Seven days later, the site was live, indexed, and earning its first AdSense impressions.&lt;br&gt;
No team. No boilerplate repo I'd spent weeks perfecting. Just a clear prompt, an AI that could actually build what I described, and a keyword gap that nobody had filled yet.&lt;br&gt;
Here's the part that surprised me most: the hardest part wasn't the code.​ Cursor handled the frontend. Claude Code handled the backend logic. GitHub Copilot filled in the gaps inline. The hard part was the judgment call — picking the right game, the right tool type, and the right search query that sits in that sweet spot of high intent and low competition.&lt;br&gt;
The gaming niche looks saturated on the surface. It isn't. IGN and GameSpot own "best games 2026." Nobody owns "nicheRPGniche RPGnicheRPG damage calculator after patch 4.1." That's where a focused tool site walks in and ranks on page one within weeks.&lt;br&gt;
The monetization side is equally concrete. Gaming sites on AdSense typically earn $3–$10 RPM. At 50k monthly pageviews from US/UK traffic, that's $300–$800/month passively. Hit 50k sessions and you can graduate to Mediavine for another 20–70% on top. It's not "get rich quick" math — it's compounding, predictable, and entirely driven by whether you picked the right keyword in week one.&lt;br&gt;
The full guide covers everything I actually did:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ul { list-style-type: disc; }
    ul ul { list-style-type: circle; }
    ul ul ul { list-style-type: square; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;How to choose between Cursor, Claude Code, and GitHub Copilot (and why stacking them beats picking one)&lt;br&gt;
The three-layer keyword research method for finding gaps before competitors do&lt;br&gt;
The 7 most profitable gaming tool site types ranked by traffic ceiling and monetization&lt;br&gt;
A day-by-day 7-day build timeline with exact prompts&lt;br&gt;
The AdSense approval checklist that gaming sites specifically need to pass&lt;/p&gt;

&lt;p&gt;If you've been sitting on a side project idea and waiting for the tooling to catch up — it has.&lt;br&gt;
Read the full guide on &lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://best-games.io/articles/2026-03-06-ai-gaming-tool-site-adsense-2026" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbest-games.io%2Fimages%2Fbestgames-og.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://best-games.io/articles/2026-03-06-ai-gaming-tool-site-adsense-2026" rel="noopener noreferrer" class="c-link"&gt;
            Best-Games.io - Play 200+ Free Online Games Instantly | No Download
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Play 200+ free online games instantly! Snake, Mahjong, 8 Ball Pool, racing, puzzle &amp;amp; action games. No download - play in browser.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbest-games.io%2Fimages%2Ficons%2Ficon.svg" width="512" height="512"&gt;
          best-games.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>ai</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Today, a game site I developed passed the Google AdSense review. After being rejected 4 or 5 times previously, this feels like a small step forward.
https://best-games.io</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Thu, 05 Feb 2026 14:26:26 +0000</pubDate>
      <link>https://forem.com/jasonguo/today-a-game-site-i-developed-passed-the-google-adsense-review-after-being-rejected-4-or-5-times-4dpk</link>
      <guid>https://forem.com/jasonguo/today-a-game-site-i-developed-passed-the-google-adsense-review-after-being-rejected-4-or-5-times-4dpk</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://best-games.io/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbest-games.io%2Fimages%2Fbestgames-og.jpg" height="" class="m-0" width=""&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://best-games.io/" rel="noopener noreferrer" class="c-link"&gt;
            Snake, Mahjong, 8 Ball Pool &amp;amp; More - Best Free Online Games | Best-Games.io
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Play 200+ free online games instantly! Snake, Mahjong, 8 Ball Pool, racing, puzzle &amp;amp; action games. No download - play in browser.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbest-games.io%2Fimages%2Ficons%2Ficon.svg" width="512" height="512"&gt;
          best-games.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>From “Vibe Coding” to “Agentic Engineering”: When Coding Becomes Orchestrating Agents</title>
      <dc:creator>Jason Guo</dc:creator>
      <pubDate>Thu, 05 Feb 2026 09:54:41 +0000</pubDate>
      <link>https://forem.com/jasonguo/from-vibe-coding-to-agentic-engineering-when-coding-becomes-orchestrating-agents-1b0n</link>
      <guid>https://forem.com/jasonguo/from-vibe-coding-to-agentic-engineering-when-coding-becomes-orchestrating-agents-1b0n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;More Articles please vist: &lt;a href="https://windflash.us" rel="noopener noreferrer"&gt;Windflash AI Daily&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In February 2025, Andrej Karpathy sent out a tweet that defined a moment. He christened a new style of programming "Vibe Coding"—a state where you surrender completely to the flow of AI generation. For a brief window, developers felt a unique kind of liberation: you simply spoke to your IDE, and code poured out like magic. Errors were fixed instantly, features appeared on command, and the only thing that mattered was the result. It was a dopamine-fueled joyride where we focused on the "what" and blissfully ignored the "how."&lt;/p&gt;

&lt;p&gt;Fast forward to 2026. Looking back, the software world didn't collapse into a heap of unmaintainable sludge. Instead, it evolved. In his one-year retrospective, Karpathy noted that we have shifted from "vibes" to discipline, coining a new term: "Agentic Engineering." This isn't just a rebrand; it marks the maturation of the industry from weekend hacking to professional system orchestration. Today, the core skill for every developer is no longer just typing code, but mastering the art of guiding AI agents that code faster than we can think—while ensuring production-grade safety and quality. This post explores how we got here and provides a practical roadmap for the new era of agentic workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What People Mean by “Vibe Coding”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To understand where we are going, we have to revisit where we started. In early 2025, tools like Cursor Composer integrated models like Claude 3.5 Sonnet, creating a quantum leap in developer experience. &lt;/p&gt;

&lt;p&gt;Karpathy described this shift as "fully giving in to the vibes, embracing exponentials, and forgetting that the code even exists." It was a shift away from precision and toward pure momentum.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Typical Symptoms of Vibe Coding&lt;/strong&gt;&lt;br&gt;
As originally described, this mode of work is characterized by several distinct behaviors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Natural Language Driven: The keyboard gathers dust. You talk directly to your IDE using tools like SuperWhisper. You give vague commands like "decrease the padding on the sidebar by half" because you are simply too lazy to hunt down the CSS file yourself.&lt;/li&gt;
&lt;li&gt;Accept All: You stop reading the diffs. The AI generates code faster than you can verify it, so you hit "Accept All" and trust the momentum.&lt;/li&gt;
&lt;li&gt;Paste Errors as Prompts: When the build fails, you don't debug. You paste the stack trace directly into the chat window without a single word of commentary. Usually, the AI fixes it.&lt;/li&gt;
&lt;li&gt;Abandoning Comprehension: The codebase grows rapidly, often beyond your mental model. If the AI can't fix a bug, you ask it to "randomly change things until it goes away" or find a workaround. You prioritize forward motion over understanding the root cause.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;This pattern was incredibly seductive because it lowered the barrier to creation. As tools like SuperWhisper demonstrated, developers could act as commanders, dispatching orders to Cursor or Claude Code and watching ideas transmute into products in real-time. &lt;br&gt;
&lt;strong&gt;For weekend projects, prototypes, or throwaway scripts&lt;/strong&gt;, this was perfect—it offered maximum efficiency and instant gratification. However, as Karpathy later admitted, this was more of an "experience" than a rigorous engineering method. When this "don't look at the code" habit bled into long-term production environments, the cracks appeared: unmaintainable spaghetti code, hidden security vulnerabilities, and team friction caused by a total collapse of shared understanding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One Year Later: From “Let It Rip” to Engineering Discipline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If 2025 was the year of the "Vibe Coding" party, 2026 is the year of the hangover—and the subsequent return to sobriety. In his retrospective, Karpathy admitted that the term went viral because it captured the excitement of the moment. But he was clear: while professional workflows now default to using LLM agents, they must be paired with significantly higher oversight and scrutiny.&lt;/p&gt;

&lt;p&gt;This new paradigm is Agentic Engineering. The name itself signals a dual commitment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agentic: Acknowledging that for 99% of the work, you are not writing the code directly. You are orchestrating agents that do.&lt;/li&gt;
&lt;li&gt;Engineering: Emphasizing that this is a discipline requiring expertise, structure, and science. It is not a slot machine; it is a skill you can refine and master.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shift represents a fundamental change in how we operate. As Google Engineering Director Addy Osmani describes, we are crossing the chasm from "Imperative" to "Declarative" programming. We no longer tell the computer how to do something (write this loop, define that variable); we tell it what we want (pass these tests, handle this edge case). The table below contrasts these two eras:&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%2Fu9iu881gp4dm5zpze41u.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%2Fu9iu881gp4dm5zpze41u.png" alt=" " width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As predicted, 2026 brings us improvements in both the Model Layer and the Agent Layer. These advancements allow us to build software that is more complex and robust than ever before—but only if we learn to effectively "manage" our digital workforce.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bringing Agents to Production: A Safer Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest risk in bringing AI agents into production is what Addy Osmani calls "Comprehension Debt." When an agent generates code faster than you can read and understand it, you are borrowing against your future ability to maintain that system. AI can easily do the first 80% of the work. But the final 20%—the integration, the subtle bugs, the performance tuning—requires deep understanding. If you check out mentally during the first 80%, that final 20% becomes an insurmountable wall.&lt;/p&gt;

&lt;p&gt;To mitigate this, we need a "Playbook for Production" that turns the luck-based "vibe" into a controlled process:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Prompts as Specifications&lt;/strong&gt;&lt;br&gt;
Stop giving vague instructions like "make this page better." Treat your prompts like requirements documents for a junior engineer. A qualified agent task description must include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acceptance Criteria: Specific conditions the feature must meet to be considered done.&lt;/li&gt;
&lt;li&gt;Boundary Conditions: Expected behavior for empty states, network failures, or invalid inputs.&lt;/li&gt;
&lt;li&gt;Non-goals: Explicitly tell the Agent what not to do to prevent "Abstraction Bloat"—the tendency of agents to over-engineer simple solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Automated Verification as Guardrails&lt;/strong&gt;&lt;br&gt;
In the Vibe Coding era, we relied on our eyes. In Agentic Engineering, code does not enter the repository without passing automated checks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TDD Revival: Have the AI write the test cases first. Once you verify the tests are correct, let the AI write the implementation until the tests pass. This is the most effective defense against hallucinations.&lt;/li&gt;
&lt;li&gt;Strict Type Checking: Leverage the type systems of TypeScript or Rust. Let the compiler be your first line of defense, filtering out the low-level syntax errors and type mismatches that agents are prone to making.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Task Decomposition and Permissions&lt;/strong&gt;&lt;br&gt;
Never ask an Agent to refactor an entire module in one go.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Atomic Iteration: Break large tasks into atomic units, where each change touches only 3-5 files. This ensures the resulting diff is small enough for a human to actually review.&lt;/li&gt;
&lt;li&gt;Require Explanations: Before accepting code, force the Agent to generate a "Summary of Changes" explaining what it did and why. If its explanation is confused, the code is almost certainly broken.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Fresh Context Review&lt;/strong&gt;&lt;br&gt;
Addy Osmani suggests a powerful technique: ask the AI to review its own code, but do it in a fresh chat window. In a long conversation, the AI often suffers from "Sycophantic Agreement"—it doubles down on previous mistakes to please you. A fresh context forces it to look at the code objectively, often revealing logic gaps it previously missed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When should you NEVER Vibe Code?&lt;/strong&gt;&lt;br&gt;
Tools are powerful, but some domains require 100% human control. Do not delegate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security-Critical Logic: Payment processing, authentication flows, and encryption implementation.&lt;/li&gt;
&lt;li&gt;Compliance-Heavy Data: Handling PII (Personally Identifiable Information) or medical records.&lt;/li&gt;
&lt;li&gt;Infrastructure Core: A hallucinated Terraform configuration can lead to a cloud bill explosion or a total service outage.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Conclusion: Turn Vibes into Method&lt;/strong&gt;&lt;br&gt;
From 2025 to 2026, we witnessed AI programming settle from a dizzying "Vibe" into a replicable "Method." The value of Vibe Coding was that it shattered the barriers to creation, allowing us to splash ideas onto the screen like artists. Agentic Engineering builds on that freedom but reintroduces the discipline and rigor of the engineer.&lt;br&gt;
In this new era, your value as a developer is no longer defined by your typing speed or your memorization of API parameters. It is defined by the clarity with which you define problems and the accuracy with which you judge results. As Karpathy envisions, 2026 will see the dual evolution of models and agents. Our job is to be the ones who define the destination and ensure the quality of the journey.&lt;br&gt;
To ensure you aren't left behind by this wave, here are three actionable steps to start today:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Start as a Reviewer: In your next feature, try writing only the tests and documentation. Let the Agent write the implementation, then force yourself to review it as strictly as you would a colleague's code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practice Declarative Communication: When the Agent makes a mistake, don't paste code snippets to fix it. Instead, try to describe the logical fallacy in precise natural language. Train yourself to "direct" rather than "do."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Focus on Architecture, Not Syntax: Use the time you save to study system design, design patterns, and security architecture. These are the areas where AI is most likely to dig a hole—and the hardest for it to fill on its own.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>vibecoding</category>
    </item>
  </channel>
</rss>
