However, if you see the next form, it creates a single curl request that stays open and does not need bash or additional calls for each key. It uses the open request. (You do need to set the terminal to raw for this.)
HOWEVER, to push back against myself: It's relatively easy to do when other people did the heavy lifting: Doomgeneric, terminals, curl, etc. I also couldn't use websockets because it doesn't come with curl by default. And you can also move forward only when pressing a button to refresh the frame.
So yeah, not the most impressive thing by far. But it is curl used to play the game and that's... something?