It looks too hard to make a chess engine on my own.
I found Caissa which is written in C++ and has an MIT license so I can use it for anything.
Just running an engine and changing some parameters with the UCI protocol probably isn't sufficient for my needs.
Thankfully, Caissa builds with MinGW make even though the instructions recommend creating a Visual Studio project.
I tested it with Arena which is a GUI for chess engines that implement the UCI protocol, and it seems to work properly.
Now I just need to see how realistic it is to modify this engine to suit my needs.
It seems like some UCI commands to control the engine measure time in seconds, which isn't what I want.
I spent a while reading the code but it's way too complicated, it says it uses 7 different search algorithms.
It doesn't seem to use NNUE but it uses a neural network of some kind.
Search.cpp seems to be the important part, but I don't have a clue what's going on.
It's possible that all good chess engines might be like this.
I found a very simple chess engine written in only 111 lines of python called sunfish, but I don't think it's strong enough since many human players can beat it.
Not sure how to find an engine in the middle ground between the two.