In August 2026 I decided to try “AI vibe coding[1]”, which means to use LLMs to generate all the code for the project, ideally without reviewing the code.
I picked a topic I’ve written plenty about: map generation. My initial prompt was
Create a project to show a noise-based procedural map generator
following https://www.redblobgames.com/maps/terrain-from-noise/ .
My attempts:
- week-32/ - noise elevation + noise rainfall + biomes + towns + rivers + human activity affecting the landscape
- week-33/ - noise elevation + rainfall simulation + biomes + lakes + canyons
- week-34/ - noise elevation + rainfall simulation + biomes + towns + rivers + cylindrical map + polar/temperate/tropical zones + regions
Notes about the experience of using Antigravity+Gemini:
- The third time I had learned a lot from the first two, and was more precise with the prompts I used.
- If I type several prompts in, it doesn’t run the git commit from
AGENTS.mduntil all of them have finished. It concatenated the prompts together. - Some changes that I think should be easy seem to take it a long time because of the way it has structured the code.
- I’m on the free plan, and used up half my weekly quota in ~5 hours. I think that’s fine for this type of prototyping but I can see why people working on a bigger project would switch to a paid plan (probably Codex or Claude Code).
-
I wanted to keep track of my prompts. Initially I wrote them in a text file, but then I realized I could ask the agent to do it. I made a git repository and made
AGENTS.md:After every change you make to the codebase, automatically stage all changes and commit them. Use the user's most recent prompt as the git commit message. - I started out with small requests to do things I would’ve done myself, but over time became more ambitious and asked it to implement things I would’ve never done because they would’ve taken too long for me. I got to learn how well those algorithms worked in practice.
- Because I was prototyping lots of different ideas, sometimes I would ask it to change some subsystem to use a different approach, or remove some subsystem entirely. It wasn’t clean. I later looked at the code and found remnants of the earlier subsystems. That was part of the reason I started the third project. I pulled the prompts from the first two projects that I wanted to keep, and dropped the experiments that didn’t work out.
- It was pretty good at making assumptions about the default UI! It used the concepts I talked about in my tutorial.
- I had asked it to use a specific library, but it ended up coding a replacement to that library instead.
- By default it uses a heavyweight setup that is popular in the JS world. It installed its own copy of Typescript, Vite, and Tailwind, totalling >100MB. I have hundreds of projects, and I don’t want each one to be >100MB. I keep most of my projects under 1MB. So I had to instruct it to use the tools of my choice.
- Debugging was frustrating. Fortunately I could just ignore most of the bugs for prototyping.
- For the most part I don’t like the code it generated, but that’s ok in vibe-coding because I’m not supposed to look at it.
- I tried lots of ideas, and some of them gave me ideas of topics to add to my tutorials. But I don’t plan to use the code it generated. I’m using these prototypes to explore ideas. I’ll end up writing my own code.
TODO: try a longer AGENTS.md file, like https://fabiensanglard.net/agent.md/[2]