Don't mention AI, just point out why the code is bad. I've had co-workers who were vim wizards and others who literally hunt and pecked to type. At no point did their tools ever come up when reviewing their code. AI is a tool like anything else, treat it that way. This also means that the OPs default can't be AI == bad; focus on the result.
The thing I don't understand is that you keep bringing up your friends' experience in all your responses and in the blog itself. What about your experience and your success rate and productivity gain that you observed with AI agent? It feels like you yourselves aren't confident on your gain and must bring up second hand experience from your friends to prop up your arguments
The current image on the landing page might be even worse. It just updates Message to MessageV1. Why would you pay money for what's a string replacement?
The comment on the right says it'll help the user with protocol versioning. This is not how you do that...
> Doing a presentation at another company? They've got an overly-aggressive firewall on the guest network
This happened to me lol. I copied a demo video from our landing page, and the host company somehow blocked our CDN, so the demo slide is just a blank page. Have to mouth the whole demo from memory, not too bad but it's really awkward.
> why do I call .deinit() on a structure before alllocator() call
This is explained right in the documentation about arena allocator. Arena allocator deallocate everything at once when it goes out of scope (with defer deinit()). You need to call .allocator() to get an Allocator struct because it's a pattern in Zig to swap out the allocator. And with this, other code can call alloc and free with out caring about the implementation.
This is just how arena allocator works and not related to Zig's design. You may take issue with how Zig doesn't have built-in interface and having to resort to this implementation struct returning the interface struct pattern, but I think the GP clearly explained the Why.