Your signal and power traces have no ground return path beneath. That alone might be the killer here. If in doubt, the easiest way to achieve that is a contiguous ground plane under all traces.
The fact that you didn't put anything beneath your antenna is good, but not sufficient: Your buttons and traces right next to the antenna are as important as the things beneath it.
In fact, Espressif has a design guide and it's not really hard to follow. They even have a visualization where to put the antenna (and hint: where to not put it, and that's within the board outline), and it looks like this (pick one of these positions, not multiple):

If you really need to place things next to your antenna, leave 15mm space around it. That includes PCB substrate.

So in conclusion:
- don't put anything next to the antenna. Don't even put PCB material below the antenna (but honestly, PCB below that just loses you a few dB of signal, at most, due to mismatch and material losses; metal next to the antenna can distort your antenna diagram significantly, and/or absorb a majority of energy.).
- Don't route signals on top and bottom: your board is not that complex. Leave everything on top, and if you need to "bridge" something, wherever possible, just elegantly route it beneath a connector or passive component
- Have a ground plane, on the bottom side.
- Have good ground connectivity. So far, your module is connected to ground but through a single via (that's kind of OK), but your decoupling capacitor is reduced in usefulness, because it's "barely" connected to ground (for RF signals), only through a long trace instead of through a via to a large ground conductor (e.g. plane) very close to the capacitor).