<?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: tomokat</title>
    <description>The latest articles on DEV Community by tomokat (@tomokat).</description>
    <link>https://dev.to/tomokat</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%2F1415059%2Fc255f7c5-e3b8-43f1-a73f-471f0018f7c3.png</url>
      <title>DEV Community: tomokat</title>
      <link>https://dev.to/tomokat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tomokat"/>
    <language>en</language>
    <item>
      <title>I'm back! (with more AI power!)</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Sun, 01 Nov 2026 18:14:26 +0000</pubDate>
      <link>https://dev.to/tomokat/im-back-with-more-ai-power-3d6n</link>
      <guid>https://dev.to/tomokat/im-back-with-more-ai-power-3d6n</guid>
      <description>&lt;h2&gt;
  
  
  Greeting
&lt;/h2&gt;

&lt;p&gt;Wow, I can't believe I did't write anything over 6 months! Well, actually I can see how that happened as I was swamped at work, as well as (Japanese) baseball season kick off, you know, I can't really do much at home so nothing to write about.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what brought you back?
&lt;/h2&gt;

&lt;p&gt;Few things. For one, my team went to play off and got eliminated rather quickly ... so that would open up few hours per day for me and at the same time, I have a reason to check my game (to prepare for internal tech conference)&lt;/p&gt;

&lt;h2&gt;
  
  
  6 months later ... AI is WAY more capable
&lt;/h2&gt;

&lt;p&gt;I remember, 6 months ago when I ask Antigravity (with low-end model) to change something on the biggest file, it often mess things up, like put closing braces somewhere else and break the game - I thought that's just the way it is. Now - it almost never mess things up. I'm using Antigravity still for development so low-end model for me is "Gemini 3.8 Flash-Low" but it's so capable (compared to old Flash model anyway)&lt;/p&gt;

&lt;p&gt;I myself learned a bit more on how &lt;code&gt;SKILL.md&lt;/code&gt; works and that certainly helped to speed my development but I feel even without all that, it can perform at least twice if not more things in the same amount of time - it's really insane how quickly AI improve!!!&lt;/p&gt;

&lt;h2&gt;
  
  
  My multi-agent approach
&lt;/h2&gt;

&lt;p&gt;Whole wack of people talk about how they can leverage multi-agents to supercharge the development process. I myself thought about it and probably could/should look into that but ... with this improved AI, I can't even keep up with making one agent busy lol I feel I'm the bottleneck here - but one thing I started to is to leverage Codex as a very clean place to do all sort of experiments - like creating various effects, blush up scenes and even look into 3D capability with Three.js (but I don't think I would use that in my game - at least in the first one that I'm builiding)&lt;/p&gt;

&lt;p&gt;So here is how I do - I use Antigravity to do coding task. While it is in progress, I then ask Codex for some experiment - I know, that's not really how "multi-agents" works but ... this works! Only problem is, because I like doing things with low-end model, they are rather responsive and it come back pretty fast lol&lt;/p&gt;

&lt;h2&gt;
  
  
  I built utility before and posted here
&lt;/h2&gt;

&lt;p&gt;I don't think not too many people follow me or read my past posting but I did talked about how I built utility to help me create a hotspots (&lt;a href="https://dev.to/tomokat/i-solved-one-of-my-major-pain-point-during-my-game-development-with-ai-chat-gpt-antigravity-kkd"&gt;link to article&lt;/a&gt;) It was pretty useful, I use it, I love it - it serve my purpose well.&lt;/p&gt;

&lt;p&gt;As I'm going back to game development, first thing I notice is the how i was placing my character in dialogue - it was awful as I was using standing image no matter what the background image is, making character looks like floating when they are indoor lol So I fixed it (well, Antigravity did) by moving character forward, and that would make the rather poor image resolution very obvious. I thought, if AI for coding agent is this much improved, I'm sure image generation capability of Gemini must improved too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remaster images
&lt;/h2&gt;

&lt;p&gt;So I took one image for test and ask it to remaster ... and OMG, it was done so well and so fast! (I set "Flash-Lite" as well) At first, I thought it just paste back the image I provided but when I look at the output, it is so much clearer and much better resolution. AI, you never disappoint me (well, never is too strong of a word but hopefully you get a gist of it)&lt;/p&gt;

&lt;h2&gt;
  
  
  Remaster images means ... I need to do THAT again ...
&lt;/h2&gt;

&lt;p&gt;For those of you who tried to build game knows this but game development has so many repetitious and tedious tasks. One of which is to take image and convert it to PNG with proper transparent zone so that you can use it. In the past, I've done this, with brute force, using Preview of Mac ... needless to say this was painful process. So knowing we can build utility, I decided to give that a shot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex, you are good too!
&lt;/h2&gt;

&lt;p&gt;Sorry, this might sounds stupid but I had Chat GPT for a while and I keep my paid subscription because ... I feel it helped me so much to refine my story, it's like a buddy of mine (I know, I might look weird to say that but that's how I feel so can't help it) Anyway, so I knew I have access to Codex. I heard a lot about it, I knew it's probably as capable (or more) than Antigravity so I gave it a shot.&lt;/p&gt;

&lt;h2&gt;
  
  
  One hour is all it need
&lt;/h2&gt;

&lt;p&gt;Honestly, I didn't keep track of time - it initially did what I want with essentially a single prompt but since they I've extend its capability few times. First, I ask it to be accessible via my tablet. The idea behind this is so that I can use tablet to do the small, fine area editing - this way I don't have to buy drawing tablet (which I bought once in my life and quickly gathered a dust lol)&lt;/p&gt;

&lt;p&gt;At first I thought I need to somehow mirror my PC and tablet - Gemini suggested me application (Duet something) but after going back and force, I realize:&lt;/p&gt;

&lt;p&gt;Hey, I have a tablet - maybe I can just use that?&lt;/p&gt;

&lt;p&gt;Once I got that idea, rest were rather easy. I realize I have a tablet (Pixel) that can work with SCI pen so I ordered that. But while I'm waiting on that, I thought I can work on another, arguably bigger pain points which is to create "facial expression images".&lt;/p&gt;

&lt;h2&gt;
  
  
  Here you go - meet Alpha Studio
&lt;/h2&gt;

&lt;p&gt;So once again, I decided to expand utility - idea is simple - load image, automatically detect background (often white but could be any color) and first automatically remove it. Then potentially use small tweak (I can do this per pixel - that is the reason why I wanted this tool) as needed and ...  here comes another pain points. The way I set up, I have 4x2 grid of images, all having specific facial expression so wouldn't it be nice if I can just simply assign area that I want to crop and then use pre-register filenames to generate all files a once? Yeah, Codex please make it happen.&lt;/p&gt;

&lt;p&gt;I thought this is too wishful thinking but Codex one shot my requests. I was deeply impressed (and honestly got scared how powerful this thing is) &lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/U3MxA7yeu-k" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Anyway, I recorded my entire session of&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;load image&lt;/li&gt;
&lt;li&gt;select background and remove it&lt;/li&gt;
&lt;li&gt;do small tweak (here, boundary is clean enough I didn't need to go to pixel by pixel but if I wanted to, I can)&lt;/li&gt;
&lt;li&gt;use multi-select to frame each facial expression images&lt;/li&gt;
&lt;li&gt;select all frame and move frame a bit up so that I can capture up to what I wanted to be&lt;/li&gt;
&lt;li&gt;export as zip, with filenames that is ready to be loaded into my game!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I can't believe what you can do with AI these days ... and best part is, all of this (remaster images and build utility) is not even full morning task! Honestly I feel I'm spending more time typing this (yeah, I know, I can use AI for this too but I'd rather use my own words when I put some article out, though nothing with using AI too if quality of information is high, mine post has questionable in that sense so I should at least type this out :p)&lt;/p&gt;

</description>
      <category>codex</category>
      <category>antigravity</category>
      <category>gamedev</category>
      <category>utility</category>
    </item>
    <item>
      <title>My recent honest thoughts with Google Antigravity</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Thu, 02 Apr 2026 06:41:14 +0000</pubDate>
      <link>https://dev.to/tomokat/my-recent-honest-thoughts-with-google-antigravity-ig1</link>
      <guid>https://dev.to/tomokat/my-recent-honest-thoughts-with-google-antigravity-ig1</guid>
      <description>&lt;p&gt;I know how (somewhat) recent quota change with Antigravity &lt;strong&gt;pissed off&lt;/strong&gt; so many people (based on seeing countless post on Reddit about it) I too first thought took a hit when I could barely use "Gemini High" model. But when I was forced to use "Gemini Flash", at least for what I'm doing, it actually started to work better.&lt;/p&gt;

&lt;p&gt;Once again I'm not saying this is true for everyone but for me (and maybe few others as well - I thought small number of Reddit post talk about similar experience), that is the case and I want to write a bit about how I'm getting the most out of Google Antigravity. I don't have a guts to put a post in Reddit (as I will be quickly seen as someone from Google lol) but hopefully here in dev.to, I can share some of my honest opinion and perspective about Google Antigravity (w/ Google AI Pro license)&lt;/p&gt;

&lt;p&gt;I think it is still one of the best value out there (though I have to admit, I didn't shop around too much, I have Chat GPT Plus and Google AI Pro and being pretty happy with this set up)&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask Antigravity to generate documentation
&lt;/h2&gt;

&lt;p&gt;You might think - "here we go again - Mr. obvious" - and I know there are many posts and article talk about this, including having good agent md file, instructions files, skills etc. But my approach is slightly different. I'm not saying having these files are wrong and probably good in most cases but for me, what works well is that whenever I want to implement new features (mind you, what I'm doing is to create game using Phaser as game engine), I first start off asking it to document some pre-requisite knowledge I want AI to have. This has (at least) 2 benefits - first, such document is useful for me as I can't possibly remember all the detail and second, of course such document is great for AI to quickly understand what I wanted to do - this allow me to switch room when I feel context is getting filled up (more on this later)&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't afraid to create new chat
&lt;/h2&gt;

&lt;p&gt;Another popular topic on Reddit about Google Antigravity is the error&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The model's generation exceeded the maximum output token limit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;which I got hit hard today as well. First I was trying to keep working with it - Antigravity also trying its best to break response to smaller chunks but it was brutal. Not sure what exactly trigger this but my hypothesis is that at some point it sucked in very large JSON data (enemies.json) which I don't touch directly (instead, I have smaller files and then use node script to combine it into 1 file) and that somehow stick with it.&lt;/p&gt;

&lt;p&gt;So what I've done? I asked Antigravity to generate me a summary of what I was trying to, where we are etc. and anything that new room can benefit knowing (but in compact manner) I then took that and start new conversation - experience is night and day difference! So if you get hit hard with that error message first make sure you are not giving entire context - even us human can't work like that (also I don't know about you but I don't want to review such large context changes later) and then try creating new chat - might save you some time :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Conversation based approach works really well
&lt;/h2&gt;

&lt;p&gt;This is something took me while to realize but ... Google Antigravity can really understand your intent! First I was using Chat GPT to craft fairly lengthy prompt then feed it into Antigravity but when I realize how well Nano-Banana understand my intent, I thought maybe I can give that a shot with Antigravity and yep, it works. I usually start off asking it document how it works so that might help a bit but for most part it can understand our intent really well!&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't just say "do it" - review the implementation plan
&lt;/h2&gt;

&lt;p&gt;I've done this in the past as well so I know it is super easy to just say "looks good, go ahead and implement" but wait - if you read the implementation plan carefully, it might be asking some of your inputs (much like how Cursor ask few questions - difference is, Cursor does that in more of flow manner but Antigravity is having it in the plan document itself, could be easily missed unless you pay some real attention)&lt;/p&gt;

&lt;p&gt;Once I started to pay attention to implementation plan and especially question it was asking, I feel the quality of output improve in fairly noticeable way so you might want to try that, if you never done it before.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI can only get more expensive
&lt;/h2&gt;

&lt;p&gt;So to summarize, I'm getting quite bit of things done with Google Flash. My game is not rocket science but also not super trivial (I think) but so far Google Antigravity (Gemini Flash) been able to assist me to do what I want really well. I can only sense that AI price can go up, I really hope Google AI Pro license remains within the ballpark of where it is - considering it also give more prompt to Nano Banana Pro and even has 1000 credit for Google Flow, I think it is still one of the best value (again, my personal opinion)&lt;/p&gt;

&lt;h2&gt;
  
  
  Not most recent one but to give you idea of what I'm building
&lt;/h2&gt;


&lt;div&gt;
    &lt;iframe src="https://www.youtube.com/embed/DDq340T-ozs"&gt;
    &lt;/iframe&gt;
  &lt;/div&gt;


&lt;p&gt;(I made quite bit of progress since I made this video but for now this is the best English version demo (translation is not complete so you might still see Japanese character here and there) - if I made another English demo video, I will post it here)&lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>ai</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Power of "Data-Driven Architecture" applies to game development as well</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Fri, 23 Jan 2026 11:28:19 +0000</pubDate>
      <link>https://dev.to/tomokat/power-of-data-driven-architecture-applies-to-game-development-as-well-6m0</link>
      <guid>https://dev.to/tomokat/power-of-data-driven-architecture-applies-to-game-development-as-well-6m0</guid>
      <description>&lt;p&gt;I thought I didn't write here for while but looks like I did write one article back in Jan 4th this year so maybe it's not that bad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bit of terminology&lt;/li&gt;
&lt;li&gt;Motivation&lt;/li&gt;
&lt;li&gt;The problem&lt;/li&gt;
&lt;li&gt;A Solution&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;li&gt;Bit of info about my game&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I want to make sure I'm focusing on "development" topic when I write something here - as opposed to just give an update to my game development (honestly, who cares about that? lol) and since I started to establish my "development flow" which goes like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;start with Chat GPT to refine my ask, make sure I'm clear on what I want&lt;/li&gt;
&lt;li&gt;eventually Chat GPT generate "nice looking" (or "scary looking") super long, detailed prompt that I won't have patience to write&lt;/li&gt;
&lt;li&gt;I then pass it to Antigravity&lt;/li&gt;
&lt;li&gt;Check the work done, sometimes I need to chime in to fix few things here and there but for most part Chat GPT + Antigravity will make it happen in very few try&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So ... yeah, I'm no longer "developing" code and hence I feel I don't have much to add value to dev.to community. I feel here, most people are fairly hardcore developers.&lt;/p&gt;

&lt;p&gt;But today I feel I have a topic that I finally want to share and write bit about - and that is the power of "Data-Driven Architecture".&lt;/p&gt;

&lt;h2&gt;
  
  
  Bit of terminology &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I need to look up if this is the real term (I think it was anyway) - yep, I was wrong (and glad I check it) Originally I thought it is "Data-Driven Development" but that term might be confusing with business term "Data-Driven" so Gemini suggested to change it to "Architecture" :) Anyway, just because I add a word "Architecture" won't all the sudden make me smart, so please bear with me if I said something bit off - goal of this post is to share my experiences and why I felt this approach make sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Motivation &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Fist of all, let's state the obvious - "game development is time consuming activity". While AI can greatly reduce effort, we all know it won't be just magic box that you can throw whatever you want and it generates (well, maybe for fairly simple thing it can) So you want to reduce effort on your end when it comes to perform the cycle of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;developing a feature&lt;/li&gt;
&lt;li&gt;testing a feature (manually)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The problem &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This is especially true when you are solo developer - you have so many things you need to do and last thing you want to deal with, is bunch of hard-coded logic all over the place. Why? Because you can't quickly try slightly different thing - like what if I increase the HP of this boss monster, how does that impact the playability of my game? (I'm purposely trying to keep this to as generic as possible - so not talking too specific about what I'm building) If your logic is deeply hard-coded in the game itself you (or AI) will be&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;first locate the code/area where you need ot change value&lt;/li&gt;
&lt;li&gt;(this might trigger process like compilation - depends on your setting/language/framework/game engine)&lt;/li&gt;
&lt;li&gt;test your feature (manually)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This works, to some degree but eventually will drive you crazy. I can tell you this because when I built my old game with Android 0.6, I was doing this. I was using Static classes all over the place to trigger game logic and boy it was messy! Honestly I was young, inexperienced but had lots of time on my hand so I end up brute force this and (somehow) get to the point I release the app (really scary what passion can do - but in the end that's why I end up spending 3000+ hours on this)&lt;/p&gt;

&lt;h2&gt;
  
  
  A solution &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I said "A solution" as I'm sure this is not the only way to solve this problem. I never used it myself but from what I see, this is exactly how "RPG (or Game) Maker" provide to its users. It provides ability to set various events (which is crucial for RPG game) and be able to trigger nicely. It also provide a way to quickly tweak monster parameters by changing values (stored in some form of DB?)&lt;/p&gt;

&lt;p&gt;I honestly didn't know how exactly I can do this but I know what is my ideal state so I started to ask how I can extract game logic (whether it is to handle ADV game like conversation, to manage hotspots data in the town) I already wrote about these so I won't repeat myself here but that was best decision I made. Why? Because it game me ability to extend my game rapidly. I can keep adding new FX (of which I can simply define in my txt file, converted to CSV format and then let my game read and react to it)&lt;/p&gt;

&lt;p&gt;I then keep applying this concept whenever I can - I need a logic to build "world" which I wanted to be super configurable but make many parameter random (yep, I want to build "rogue-light" game) and I just made a way to do this pretty much all things defined in JSON file and then be able to even add yet another hook from my txt file to call this with simple target id. I can't express the freedom this provide to me - I can now trigger this from pretty much any event scene (not that I have good reason to do that, but hey, you never know - I might want to do that at some later stage)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "id": "WT_CALM",
  "name": "Calm",
  "tags": [
    "intro",
    "stable"
  ],
  "bgPool": [
    "bg_world_0"
  ],
  "rules": {
    "gridMin": 11,
    "gridMax": 11,
    "distortionGainPerStep": 0,
    "distortionGainPerBattle": 5,
    "monsterRate": 0.08,
    "npcRate": 0.03,
    "worldDistortionLimit": 100,
    "encounters": {
      "monster": {
        "mode": "count",
        "min": 7,
        "max": 9,
        "respawn": {
          "checkSteps": 7,
          "spawnMin": 2,
          "spawnMax": 3,
          "constraints": {
            "minDistFromCity": 3,
            "minDistFromPlayer": 5,
            "preferFog": true
          }
        }
      },
      "npc": {
        "mode": "count",
        "initial": 2
      },
      "elite": {
        "mode": "count",
        "initial": 1,
        "visible": true
      }
    }
  },
  "overrides": {
    "cities": [
      {
        "id": "first_town",
          "pos": {
            "x": 2,
            "y": 2
          },
          "hubId": "hub_1"
        }
      ],
      "dungeonGates": [
        {
          "id": "gate_intro_1",
          "pos": {
            "x": 8,
            "y": 8
          },
          "dungeon": {
            "type": "earth"
          },
          "gate": {
            "bgKey": "bg_gate_01",
            "titleKey": "gate.intro.title",
            "descKey": "gate.intro.desc"
          }
        }
      ],
    "disableRandomCities": true
  }
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;please note: this game is under development and most likely this data format will change (also not everything described here are implemented - some are just placeholder still lol)&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I feel "Data-Driven Architecture" is a way to go and anther benefit this approach provides in this AI era is that it seem to be easier for AI (both my brain partner Chat GPT and my amazing developer Antigravity) to understand what I want. I wonder why and then came to realize that you are essentially forced to bring potentially complex concepts if we were to explain all this through words but data format like this is lot easier for AI (or even for me) to make sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bit of info about my game &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Lastly, if you are interested, please check my itch.io site that I recently created - here, I plan to post more about my game progress (through development blog post feature) I plan to release Trial version of my game in sometime late February so please check it out!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://w-ai.itch.io/para-logos-w-ai" rel="noopener noreferrer"&gt;https://w-ai.itch.io/para-logos-w-ai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>gamedev</category>
      <category>phaser</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>I solved one of my major pain point during my game development with AI (Chat GPT + Antigravity)</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Mon, 05 Jan 2026 04:46:24 +0000</pubDate>
      <link>https://dev.to/tomokat/i-solved-one-of-my-major-pain-point-during-my-game-development-with-ai-chat-gpt-antigravity-kkd</link>
      <guid>https://dev.to/tomokat/i-solved-one-of-my-major-pain-point-during-my-game-development-with-ai-chat-gpt-antigravity-kkd</guid>
      <description>&lt;p&gt;Today I wake up thinking I will implement a feature that I really wanted but couldn't (this is way back when I was trying to build a game using Android 0.6 - yes, that's long time ago)&lt;/p&gt;

&lt;p&gt;Here is what I wanted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there is a picture of town (preferably can scroll to accommodate bigger picture than screen)&lt;/li&gt;
&lt;li&gt;I can somehow map "clickable regions" (I'm not being that fancy here - just want simple rects) and when I hover, I want to highlight the object (I can live with entire clickable region light up but if I can, I want to show object being lit up, as opposed to entire region show up)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I started to chat with Chat GPT - it explained to me that it is called "Hotspots" and also walk me through how I can implement this with Phaser 3. It is important to get "pixel perfect" co-ordinate and image (of which remove background to the object that I want to hover, with transparent PNG)&lt;/p&gt;

&lt;p&gt;After understanding how it works, I said fine, let me get to work. First I chat with Gemini &amp;amp; Nano Banana to craft few pictures - this was (relatively) easy part. Next, I load up these images in Preview app (I'm using Mac) thinking I should be able to get &lt;code&gt;(x,y)&lt;/code&gt; co-ordinate of my mouse and using rectangular selection (which shows width and height), I can do this however it turns out I can't seem to get &lt;code&gt;(x,y)&lt;/code&gt; co-ordinate (relative to the loaded picture) that easily.&lt;/p&gt;

&lt;p&gt;I paused for a second ... I look up alternative - some old Stack Overflow post says we can do this using Gimp but I want something lightweight and prefer to stick with the tool I have.&lt;/p&gt;

&lt;p&gt;So what I end up doing? Go back to Chat GPT, shared my desire to build super simple tool to do this and ~3 min later it spit out the fairly long prompt for me to give to Antigravity. It claim Antigravity can probably one shot this prompt - and here is the best part - it is instruct to build this in single file! (HTML/CSS/JavaScript all in one file)&lt;/p&gt;

&lt;p&gt;After ~7 min later, Antigravity ask me to review and wola - it's done. Here is the screenshot of the tool it generated from one super long prompt. Sure, it's not real product quality, sure it's missing bunch of features (like I can't seem to resize the box for now - but I can delete or move so good enough for my purpose)&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%2F4feqmn5uurnvk14e0jqs.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%2F4feqmn5uurnvk14e0jqs.png" alt="Hotspot Editor in action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;End result - I got what I needed - quick way to implement "hotspots" over image file that I can scroll - something I couldn't do before so I'm super excited to what this journey to build game with AI will take me to!&lt;/p&gt;

&lt;p&gt;Here is a 12-second screencast showing how this works within my game - hover effect might not be that noticeable but that can be easily tweak (also these data are all behind JSON - so I can easily add/remove/modify hotspots data per city data)&lt;/p&gt;

&lt;p&gt;

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


&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>antigravity</category>
      <category>chatgpt</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Keep extending ADV game engine with Antigravity</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Mon, 29 Dec 2025 18:15:13 +0000</pubDate>
      <link>https://dev.to/tomokat/keep-extending-adv-game-engine-with-antigravity-2idn</link>
      <guid>https://dev.to/tomokat/keep-extending-adv-game-engine-with-antigravity-2idn</guid>
      <description>&lt;p&gt;I didn't expect this at all (I know that's the same line I started my &lt;a href="https://dev.to/tomokat/end-up-building-a-decent-adv-game-engine-with-antigravity-and-chat-gpt-5cle"&gt;previous post&lt;/a&gt;) - it keep exceeding my expectation (in a good way, of course!)&lt;/p&gt;

&lt;p&gt;I'm writing this article mainly for myself so that later on I can refer back what I was thinking but also hoping maybe this might help some other people who might want to do something similar.&lt;/p&gt;

&lt;p&gt;Anyway so what have I done recently? I'm asking Antigravity to keep expanding that CSV-based ADV game engine and it's going pretty strong! The way I'm working is that whenever I feel I want new capability, first I chat with Chat GPT (that I've been talking about my game since the beginning) and it help me craft a prompt that I can feed into Antigravity.&lt;/p&gt;

&lt;p&gt;Since the last post, here are some new capabilities I added (not all these new capabilities are exposed back to txt file format yet)&lt;/p&gt;

&lt;p&gt;1) I now have my message appear one character at a time, with ability to control the speed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go_with_else,10,SAY,エルス,あ、アクシスだ。おーい,,start_of_the_adventure,else@C:neutral,,,else:neutral,DIALOG,TYPE:120,
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;here, as you can see I can simply add &lt;code&gt;TYPE:120&lt;/code&gt; to slow down that message appearance (pretending a character speaking slowly)&lt;/p&gt;

&lt;p&gt;2) ability to add BLACKOUT effect&lt;/p&gt;

&lt;p&gt;This is super useful (I can also change the color and alpha value) effect, before dislaying a text that I want to put some emphasis&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;opening,12,FX,,,,black,,,,,NODIALOG,,BLACKOUT:fadeIn=400,alpha=1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) ability to display text in the middle with bit of "ink" effect&lt;/p&gt;

&lt;p&gt;It's not exactly how I wanted so I might still tweak but be able to put emphasis on text by simply providing few parameter is golden!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;opening,15,FX,,,,black,,,,,NODIALOG,,CENTER_TEXT:fontSize=30,fadeIn=1400,hold=2000,y=-40,ink=1
opening,20,NARR,,それは、もう終わったはずの物語だった,,black,,,,,NODIALOG,,
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4) very specific need/want to perform "symbol storm"&lt;/p&gt;

&lt;p&gt;This is one of the effect I wanted for my game (but honestly I don't think I can implement this myself) - here is what it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;specify map (object) that can map some symbols to images&lt;/li&gt;
&lt;li&gt;randomly place it on the screen, and grow in size as it rotates each images and fill the screen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://youtube.com/shorts/aH5HxgCjcCE?feature=share" rel="noopener noreferrer"&gt;Link to screencast&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I know this make absolute no sense but that's what I wanted and it implemented perfectly (I do end up tweaking a bit)&lt;/p&gt;

&lt;p&gt;With this, game now looks like this: (please ignore the message - it's still non-sense, also "symbol storm" effect still need more refinement but be able to build this in "just few hours" is really something and that's what I want to share most today in this post)&lt;/p&gt;

&lt;p&gt;I know - I probably shouldn't build animation (nor title screen) and instead, I should focus on building more fundamental part of my game but ... sometimes you want to do things in bit of out of order to bring your motivation high and for me this feels like a right approach (and best part of building everything by yourself (+ AI) is that you can decide whatever you want! :)) &lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>chatgpt</category>
      <category>gamedev</category>
      <category>phaser</category>
    </item>
    <item>
      <title>Build something vs. add new features and maintaining it</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Tue, 23 Dec 2025 21:05:50 +0000</pubDate>
      <link>https://dev.to/tomokat/build-something-vs-add-new-features-and-maintaining-it-1app</link>
      <guid>https://dev.to/tomokat/build-something-vs-add-new-features-and-maintaining-it-1app</guid>
      <description>&lt;p&gt;In &lt;a href="https://dev.to/tomokat/end-up-building-a-decent-adv-game-engine-with-antigravity-and-chat-gpt-5cle"&gt;my last post&lt;/a&gt; I shared my experience with asking AI to help me build a utility that would speed up my game development (at least building scenario and story lines) but for those of you who have been writing code knows that generating something new is relatively easy compared to adding features and maintaining it for very long time.&lt;/p&gt;

&lt;p&gt;So I asked Chat GPT (who assisted me to generate a prompt that I feed into Antigravity - of course this can be done by Gemini as well) this question:&lt;/p&gt;

&lt;p&gt;Can I assume to keep working in "this manner" (here I mean to ask AI to generate a prompt and feed into Antigravity) or would I soon see the tipping point where I need to roll up my sleeve and expected to code?&lt;/p&gt;

&lt;p&gt;The answer I got was - as long as we are very clear on what we want and be able to explain it clearly, there is no reason why I have to go into deep end of a codebase (but it reminds me, I need to provide all the data, scenario etc.)&lt;/p&gt;

&lt;p&gt;Of course that's what it says so I asked Chat GPT my specific ask of extending that CSV file to simulate ability to add party (so that I can easily add or remove someone into the game party) Mind you, at this point my game didn't even have concept of party (though Chat GPT knows as I exchange LOTS of conversation about the scenario and how I want to expand) so I thought this is too much ask.&lt;/p&gt;

&lt;p&gt;The result? Chat GPT gave me super long prompt (really scary length - I can follow what is asking, even on my good day it would take me few days to implement this without any bug) and ask it to give to Antigravity (I ask to expand CSV to be able to add/remove party, be able to tell who can be added to party and also add reusable UI component to render as we add character to the party) Wait a bit and ... wola, it's working! (I wont' lie, I need to ask few times to tweak a bit so it wasn't all one shot but still pretty impressive!)&lt;/p&gt;

&lt;p&gt;Here is a screenshot - I trigger one event where I added 2 characters to my party (nothing is happening other than adding to party and add display but still started to look like a real game, isn't 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%2Fb6mp8dgd5imyuvrhxpcr.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%2Fb6mp8dgd5imyuvrhxpcr.png" alt="Explorer scene with party display at the end" width="800" height="1410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can't believe what I just experienced - this means not only I can ask it to build something but keep tweaking and maintaining it. It can sure understand what is the current implementation, be able to only add code that is needed (this, kudos to the Chat GPT giving me great prompt to instruct Antigravity to do that)&lt;/p&gt;

&lt;p&gt;With that success, I also told my desire to be able to specify source and destination of my source scenario (txt) file and where to generate scenario file (csv). What this allow me to do is to separate as many scenario files as I wanted - again huge plus to keep this project more maintainable!&lt;/p&gt;

&lt;p&gt;So my goal is to see what's the limit of this AI driven approach to develop a game - and I plan to keep making posts about it here so please stay tuned!&lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>chatgpt</category>
      <category>gamedev</category>
      <category>phaser</category>
    </item>
    <item>
      <title>End up building a decent ADV game engine with Antigravity and Chat GPT</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Mon, 22 Dec 2025 19:55:05 +0000</pubDate>
      <link>https://dev.to/tomokat/end-up-building-a-decent-adv-game-engine-with-antigravity-and-chat-gpt-5cle</link>
      <guid>https://dev.to/tomokat/end-up-building-a-decent-adv-game-engine-with-antigravity-and-chat-gpt-5cle</guid>
      <description>&lt;p&gt;I didn't expect this at all - at first I was just thinking "I can probably use Antigravity to help me set up Phaser 3 project and once I get the scaffolding done, I probably need to code manually"&lt;/p&gt;

&lt;p&gt;It turns out, so far I didn't write any code - only thing I'm doing is to provide scenario/image data and I'm continued to be amazed how much it can understand and how capable this beast is! I mean I need to have very specific need/want in my game design (I knew it is technically possible with Phaser 3 already have many capabilities) and based off of my past experience (though that time what I was doing is quite laughable), I have general idea of how I might want to put my scenario file data but AI just extended to the place where I didn't imagine.&lt;/p&gt;

&lt;p&gt;Let me explain this a bit - the format I came up with initially was CSV with headers like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scene,idx,op,speaker,message,text_id,bg,char1,char2,char3,icon,ui,tags,goto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if you ever made ADV game before you can probably guess what these are and I was quite happy how I can externalize scenario data from the main game codebase. This is where you want to be able to quickly iterate, fix, try etc. but CSV is not easiest for human to deal with so I started to ask question to Chat GPT - after exchanging few message, it then suggest to me the idea of asking Antigravity to write utility tool (in node) to read much simpler "scenario data" and then covert to CSV file format. That was brilliant idea and after explaining what I want, Antigravity one shot implement this (I do need to tweak a bit but still ...)&lt;/p&gt;

&lt;p&gt;Here is an example of how "raw scenario data" get converted - best part of this approach is that I no longer need to deal with "number of comma" and "manually keeping track of idx"!&lt;/p&gt;

&lt;p&gt;from (opening_jp.txt)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@bg destruction_of_world
@ui DIALOG
@chars alexis@C:neutral
@face alexis:neutral
アクシス：な、何が起きてるんだ？

@bg black
@ui NODIALOG
@chars clear
@face clear
[NARR] それは、もう終わったはずの物語だった
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to (scene_script.csv)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;opening,10,SAY,アクシス,な、何が起きてるんだ？,,destruction_of_world,alexis@C:neutral,,,alexis:neutral,DIALOG,,
opening,20,NARR,,それは、もう終わったはずの物語だった,,black,,,,,NODIALOG,,
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(sorry I'm building this game in Japanese but hopefully you get the gist of this)&lt;/p&gt;

&lt;p&gt;and this is how it appeared in 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%2Fpo44hvdsu1x79i4254fr.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%2Fpo44hvdsu1x79i4254fr.png" alt="Image of dialog scene generated by the script above" width="800" height="1401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(note: this is still very early days of the game and likely to change - I just want to see how I can display character(s), show face icon and then be able to display message)&lt;/p&gt;

&lt;p&gt;I feel with this (and very preliminary yet powerful event system via &lt;code&gt;events.json&lt;/code&gt;), I should be able to focus on writing a story for this game (again, I'm not trying to just build ADV game so there are tons of things I still need to work on but so far I probably spent ~1 day of effort and compared to how much time I spent in the past with my Android game, this feels like I'm flying all thanks to AI!)&lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>chatgpt</category>
      <category>gamedev</category>
      <category>phaser</category>
    </item>
    <item>
      <title>My second day with Antigravity</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Sat, 20 Dec 2025 13:39:52 +0000</pubDate>
      <link>https://dev.to/tomokat/my-second-day-with-antigravity-3hpd</link>
      <guid>https://dev.to/tomokat/my-second-day-with-antigravity-3hpd</guid>
      <description>&lt;p&gt;If you already saw my &lt;a href="https://dev.to/tomokat/my-first-day-with-antigravity-4jai"&gt;previous post&lt;/a&gt;, no, I don't think I can possibly create "every day" report of Antigravity but I feel I just can't stop sharing my excitement with this beast! Also I plan to put more focus on my experience with it for (very simple) game development here - while keeping my LinkedIn for more (potentially) work related.&lt;/p&gt;

&lt;p&gt;Once again due to its incredible power, I was done "(potentially) work related" study/research by noon, after lunch I quickly flipped to expand my game. Here is what Antigravity achieved for me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expand &lt;code&gt;DialogScene&lt;/code&gt; from simple one character display and message window to up to 3 characters display, face icon, speaker and message window&lt;/li&gt;
&lt;li&gt;bring bit of scripting into my game. I can define each conversation with CSV file format, it even managed to load all words from another file (like language resource file)&lt;/li&gt;
&lt;li&gt;expand this CSV script with ability to perform basic animation (for now I implemented WAIT, SHAKE, FADE_OUT, FADE_IN)&lt;/li&gt;
&lt;li&gt;create very basic yet powerful event trigger system with JSON format data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My approach for working with any AI tool is, first talk with Chat GPT and/or Gemini to keep asking what I want to do and refine prompt. I have a theory that AI tool knows best how it want to be prompted (I use this back in days when I was working with my Lovable project) and that seem to work very well so far. For all these 4 points, most of them are done with single prompt with 2-3 small tweaks after that! (can you believe it? Some prompt sure look really long but somehow it always nailed it)&lt;/p&gt;

&lt;p&gt;Another thing worth noting is that code Antigravity generates, at least so far, being impressively clean! I feel this project is getting more complex as I keep asking it do more - to give you some idea about this, here is a JSON file I have (generated by Chat GPT) to test event trigger work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "events": [
        {
            "id": "EV_GREETING",
            "kind": "dialogue",
            "script": "scene_script.csv",
            "startScene": "event_0",
            "once": true,
            "conditions": [
                {
                    "type": "flag_not_set",
                    "key": "EV_GREETING_DONE"
                }
            ],
            "effects": [
                {
                    "type": "set_flag",
                    "key": "EV_GREETING_DONE"
                }
            ]
        },
        {
            "id": "EV_LOWHP_HELP",
            "kind": "dialogue",
            "script": "scene_script.csv",
            "startScene": "join_yes",
            "once": true,
            "conditions": [
                {
                    "type": "hp_lte",
                    "value": 10
                }
            ],
            "effects": [
                {
                    "type": "set_flag",
                    "key": "EV_LOWHP_HELP_DONE"
                }
            ]
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I don't think all of these are properly implemented yet BUT I can already test/check that &lt;code&gt;EV_GREETING&lt;/code&gt; occurs as expected (but while writing this I realize I didn't specify WHERE and WHEN this event take place so I need to fix/expand that) When I go to (2,4), event should trigger only once - and it works as expected. With this set up (mind you, all I spent is total 7-8 hours!) I already have enough hook to build decent Adventure game.&lt;/p&gt;

&lt;p&gt;Another really cool (and even scary) thing is that, when I ask it to expand &lt;code&gt;DialogScene&lt;/code&gt; to have 3 characters, it actually started to generate images on its own! (So all the images you see in video, character images and background image is auto-generated) I thought that was really cool, as of course I will prepare my images later but the fact that it automatically generate something to give me a feel for how conversation takes place was beyond my expectation!&lt;/p&gt;

&lt;p&gt;I'm building this game in Japanese (mainly so that I can focus on scenario - that is one major difference I'm taking with my game development this time. I'm talking to Chat GPT insane amount (in fact, most of my time is used to do that, not to create game lol) as I got really interesting story line and Chat GPT help me refine it to the detail I would never imagined.&lt;/p&gt;

&lt;p&gt;Here is a quick screencast, show casing how that event EV_GREETING works (again, sorry dialog is in Japanese (and even if you understand it, what it is saying make no sense lol) but I think you get the gist of why I feel Antigravity is a beast - which is the main reason why I want to write this article!), as well as how CSV handles branching - hope you enjoy it! :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtube.com/shorts/S943iwxZorw?feature=share" rel="noopener noreferrer"&gt;https://youtube.com/shorts/S943iwxZorw?feature=share&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>gamedev</category>
      <category>showdev</category>
      <category>antigravity</category>
    </item>
    <item>
      <title>My first day with Antigravity</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Sat, 20 Dec 2025 12:59:33 +0000</pubDate>
      <link>https://dev.to/tomokat/my-first-day-with-antigravity-1oaa</link>
      <guid>https://dev.to/tomokat/my-first-day-with-antigravity-1oaa</guid>
      <description>&lt;p&gt;I know I didn't write anything for while - mainly because I was really busy at work but starting from yesterday (Dec 17th), I'm in my holiday break so I have time/energy to look into interesting things.&lt;/p&gt;

&lt;p&gt;First I got study/research topic with Gemini (based on few topics that I was interested - I made &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7407157405060517889/" rel="noopener noreferrer"&gt;a LinkedIn post&lt;/a&gt; so please take a look if you are interested)&lt;/p&gt;

&lt;p&gt;I was planning to spend first 2 days looking into some (at least to me) fairly complex technology mashups but you know what? Antigravity actually one shot it and I was kind of done what I wanted to do by noon so I expand my research a bit into some "fun" stuff - which is to develop a very simple game.&lt;/p&gt;

&lt;p&gt;Again I had some chat with Chat GPT (to refine scenario) and Gemini (to come up with good starting prompt) and then feed into Agent Manager and see where it will take me. I was actually blown by the fact that it can get something up and running (although VERY simple)&lt;/p&gt;

&lt;p&gt;I maybe work with it for 3-4 hours top, but I already got basic wiring of various game scenes working together (I've worked on similar game development in the past so I kind of knew what to ask)&lt;/p&gt;

&lt;p&gt;But ... be able to get random generated world with n x m size randomized and be able to provide scroll capability is something I struggle a lot back in days when I work on my old game (that time I was working with Android 0.6 - so there is no good library for me to choose so I have to write everything and I remember the bug I created) So the fact that I already have&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;world scene where I can move around&lt;/li&gt;
&lt;li&gt;I can only see adjacent tiles (Civ style)&lt;/li&gt;
&lt;li&gt;I can pretend I'm talking to someone&lt;/li&gt;
&lt;li&gt;I can pretend I'm in the battle, where I got cards and fight with monsters&lt;/li&gt;
&lt;li&gt;***I have a trigger to force rebuild world &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last point is crucial for what I want to build so the fact that I got this much in first day is out of my expectation BY FAR and it's all thanks to Antigravity so if you want to try but haven't, I'll strongly recommend you to check it out!&lt;/p&gt;

&lt;p&gt;Lastly here is a link to screencast - I know it's laughable but for those of you who tried to do this manually in the past will know why I feel Antigravity is a real beast. Even doing this could take weeks, if not months!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtube.com/shorts/I2h6ohO9jHE" rel="noopener noreferrer"&gt;https://youtube.com/shorts/I2h6ohO9jHE&lt;/a&gt;&lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>ai</category>
      <category>gamedev</category>
      <category>phaser</category>
    </item>
    <item>
      <title>My first day with Antigravity</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Fri, 19 Dec 2025 03:19:29 +0000</pubDate>
      <link>https://dev.to/tomokat/my-first-day-with-antigravity-4jai</link>
      <guid>https://dev.to/tomokat/my-first-day-with-antigravity-4jai</guid>
      <description>&lt;p&gt;I know I didn't write anything for while - mainly because I was really busy at work but starting from yesterday (Dec 17th), I'm in my holiday break so I have time/energy to look into interesting things.&lt;/p&gt;

&lt;p&gt;First I got study/research topic with Gemini (based on few topics that I was interested - I made a &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7407157405060517889/" rel="noopener noreferrer"&gt;LinkedIn post&lt;/a&gt; so please take a look if you are interested)&lt;/p&gt;

&lt;p&gt;I was planning to spend first 2 days looking into some (at least to me) fairly complex technology mashups but you know what? Antigravity actually one shot it and I was kind of done what I wanted to do by noon so I expand my research a bit into some "fun" stuff - which is to develop a very simple game.&lt;/p&gt;

&lt;p&gt;Again I had some chat with Chat GPT (to refine scenario) and Gemini (to come up with good starting prompt) and then feed into Agent Manager and see where it will take me. I was actually blown by the fact that it can get something up and running (although VERY simple)&lt;/p&gt;

&lt;p&gt;I maybe work with it for ~3 hours top, but I already got basic wiring of various game scenes working together (I've worked on similar game development in the past so I kind of knew what to ask)&lt;/p&gt;

&lt;p&gt;But ... be able to get random generated world with n x m size randomized and be able to provide scroll capability is something I struggle a lot back in days when I work on my old game (that time I was working with Android 0.6 - so there is no good library for me to choose so I have to write everything and I remember the bug I created) So the fact that I already have&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;world scene where I can move around&lt;/li&gt;
&lt;li&gt;I can only see adjacent tiles (Civ style)&lt;/li&gt;
&lt;li&gt;I can pretend I'm talking to someone&lt;/li&gt;
&lt;li&gt;I can pretend I'm in the battle, where I got cards and fight with monsters&lt;/li&gt;
&lt;li&gt;***I have a trigger to force rebuild world &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last point is crucial for what I want to build so the fact that I got this much in first day is out of my expectation BY FAR and it's all thanks to Antigravity so if you want to try but haven't, I'll strongly recommend you to check it out!&lt;/p&gt;

&lt;p&gt;Lastly here is a link to screencast - I know it's laughable but for those of you who tried to do this manually in the past will know why I feel Antigravity is a real beast. Even doing this could take weeks, if not months!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtube.com/shorts/I2h6ohO9jHE" rel="noopener noreferrer"&gt;https://youtube.com/shorts/I2h6ohO9jHE&lt;/a&gt;&lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>ai</category>
      <category>gamedev</category>
      <category>phaser</category>
    </item>
    <item>
      <title>Compare (OpenAI) LLM performance from Supabase Edge function directly</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Mon, 01 Sep 2025 18:57:09 +0000</pubDate>
      <link>https://dev.to/tomokat/compare-openai-llm-performance-from-supabase-edge-function-directly-47pk</link>
      <guid>https://dev.to/tomokat/compare-openai-llm-performance-from-supabase-edge-function-directly-47pk</guid>
      <description>&lt;p&gt;EDIT: added information about the how to configure "inputs" to your Supabase Edge funciton and how to run CLI tool.&lt;/p&gt;

&lt;p&gt;As I was continue building my app, I started to wonder, am I using optimal AI model for my Edge function? Behind the scene, these Edge functions will make a call to OpenAI API and I'm sure each model has its strength and weakness so I wanted to find a way to compare it, without manually changing model, capturing response etc.&lt;/p&gt;

&lt;p&gt;I then started to look for utility tool out there, thinking I can't be the first one who wanted to do that but while I can find something similar like &lt;em&gt;promptfoo&lt;/em&gt;, starting point is different - and while I admit measuring directly with LLM call is probably the most generic way, the reason why I want to call Supabase Edge function directly is, there are quite bit of logic exist within my Edge function that I don't want to manually extract all inputs to LLM myself.&lt;/p&gt;

&lt;p&gt;My idea is simple - since I'm talking about the Supabase Edge function, I can certainly create a (temporary?) table to hold data (that way, I don't need to modify response object from the Edge function) I can easily expand request parameters to Edge function without breaking the functionality (this is so that I can pass extra information like model, id to mark each group run etc.) To measure pure LLM performance, I do need to inject stopwatch timer time of code into my Edge function but I learned that you can simply do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const start = performance.now();
//make a LLM call like
const analyzeResponse = await fetch('https://api.openai.com/v1/chat/completions', {
      method: 'POST',
...
});
const end = performance.now();
const latencyMs = end - start;
console.log(`Latency: ${latencyMs} ms`);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and apparently &lt;code&gt;performance&lt;/code&gt; object is built-in to Deno so I thought that is not too bad. Then at the end, simply dump the record into database table (and since I wanted to do this to multiple Edge functions, I wrote a utility code - I will share link to repo at the end of this article where you can see all these code)&lt;/p&gt;

&lt;p&gt;To minimize modification to the Edge function itself, I'm inserting record twice - once from the Supabase Edge function and once from the CLI tool itself. Once again I need to do this so that I can capture the raw response from LLM while I can group the execution - I feel this is good compromise but you might not like it (and if so, feel free to modify script - this is expected to run locally and hence I open these tools to public - also pull requests are always welcome!)&lt;/p&gt;

&lt;p&gt;Maybe I want to mention about how to pass in parameters - hopefully it is pretty obvious but the input file to run CLI tool can be used for that and for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "models": ["o3", "o3-mini", "gpt-4o", "gpt-4o-mini"],

  "inputs": {
    "textInput": "{some resume data}",
    "targetJobDescription": "",
    "userPrompts": [],
    "resumeId": "new"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;here "inputs" are input to Edge function and this is of course expected to be custom to your need. Once you have input file ready, you can simply execute (assuming you already done &lt;code&gt;npm install&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start &amp;lt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="nt"&gt;-name&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &amp;lt;path-to-scenario&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or for scenario&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm start analyze-resume-data scenario/analyze-resume-data/test-data.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once I got data into table, I then wanted a quick way to visualize the result so I vibe code this super preliminary viewer (using Gemini Code Assistant) I have plan to expand this but it serve my purpose already. When you use CLI tool to generate data, then this visualization app will simply fetch record, group them and show it to you in a way (hopefully) bit more consumable. Here is a screenshot of one of my test result:&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%2Ffjok0zwsfirvjsmgf0kv.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%2Ffjok0zwsfirvjsmgf0kv.png" alt="Screenshot of the viewer" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maybe there is a way to achieve this by not injecting code but for now, I'm pretty satisfied with what I got but if you have a way to extend this, please do so and share it back to the community!&lt;/p&gt;

&lt;p&gt;Lastly, here are the links to my repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLI tool: &lt;a href="https://github.com/tomokat/supabase-llm-usage-benchmark" rel="noopener noreferrer"&gt;supabase-llm-usage-benchmark&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Viewer: &lt;a href="https://github.com/tomokat/supabase-llm-benchmark-viewer" rel="noopener noreferrer"&gt;supabase-llm-benchmark-viewer&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hopefully some of you find this interesting/useful - happy (vibe?) coding!&lt;/p&gt;

</description>
      <category>supabase</category>
      <category>benchmark</category>
      <category>llm</category>
      <category>performance</category>
    </item>
    <item>
      <title>How to check if your Supabase table is open to public</title>
      <dc:creator>tomokat</dc:creator>
      <pubDate>Thu, 21 Aug 2025 04:03:29 +0000</pubDate>
      <link>https://dev.to/tomokat/how-to-check-if-your-supabase-table-is-open-to-public-5f1n</link>
      <guid>https://dev.to/tomokat/how-to-check-if-your-supabase-table-is-open-to-public-5f1n</guid>
      <description>&lt;p&gt;These days tools like Lovable is getting better and know how to handle Supabase table better and more secure way but by the time I generate my code, it wasn't really putting RLS properly (for reading data) so please read on if you have a slightest doubt that you might be victim of this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I'm coming from
&lt;/h2&gt;

&lt;p&gt;If you read Reddit, there are many people warn you about the potential security issue, but I know I have RLS enabled so I'm fine - I was so WRONG! Just because you have RLS for add, update and delete (at least in the old days), Lovable tend to leave read wide open. Also there are so many discussions about this and some people are offering app that we can check security etc. but I wonder if I can do this check by myself so I asked Chat GPT this prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you show me without tightening, how can someone query my table?&lt;br&gt;
(this way I can test myself to see how information get exposed?)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and I got this super simple node script&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  'https://YOUR_PROJECT.supabase.co',
  'YOUR_PUBLIC_ANON_KEY'
)

async function testLeak() {
  const { data, error } = await supabase
    .from('{repalce-this-with-your-table-name}')
    .select('*') // &amp;lt;-- selects ALL columns

  console.log({ data, error })
}

testLeak()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is extremely simple - all it's doing is to use information that is fairly easily extractable from Lovable app (especially if you know how to check what kind of network activity are happening within app) to create Supabase client and then execute simple SELECT * - this can't be right ... this is joke, until, I have to admit it actually returned data for me.&lt;/p&gt;

&lt;p&gt;I was shocked ... and glad that I didn't rush to ship my app to public quickly. I'm not blaming tool at all - security should be responsibility for all of us who build app (whether if let AI generate or hand coded, doesn't matter) I also want to share that Lovable added quite bit of security feature and it now properly flag these issues (even offer free security check) and almost prevent user to publish app unless you resolve these critical security issues.&lt;/p&gt;

&lt;p&gt;If you know how to set up node, add package.json etc. above code example is probably enough but with bit of help from Gemini Code Assistant (read as "I was lazy to do this myself"), I created this repo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tomokat/supabase-security-checker" rel="noopener noreferrer"&gt;https://github.com/tomokat/supabase-security-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;that you can checkout and try it - it's all in your local so no need to worry about leaking anything but please note, this is the simplest and almost dumbest way to check if your table is publicly exposed (you should kick yourself if this returns table data, especially that table contains sensitive user data) and just because this says secure, it doesn't mean anything and you should definitely do the more thorough, proper security review/audit (as AI generated and call this out properly in README)&lt;/p&gt;

&lt;p&gt;I will also put another small warning - depends on when you generate your code and how much of your code uses that table, fixing these issues may not be as easy as adding RLS (or removing SELECT privilege from admin/public) because your code might reference it exactly that way! (This is one of the reason I believe when I ask Lovable to auto fix security issues it flag as errors, it often break app) - I'm still in the middle of doing this myself but I'm carefully changing code (and this is one of the reason why I strongly feel I want to have local Supabase AGAIN - but since I didn't use it for while, it was no longer really in synch and migration scripts are erroring out - if you are in the same situation as I am, I just wrote &lt;a href="https://dev.to/tomokat/setting-up-local-supabase-when-migration-scripts-error-out-4k60"&gt;another article&lt;/a&gt; talking about how I resolve it so please check it out) &lt;/p&gt;

</description>
      <category>supabase</category>
      <category>lovable</category>
      <category>security</category>
      <category>vibecoding</category>
    </item>
  </channel>
</rss>
