Thanks for the time and effort it must've taken to build this. I've had a little play around with it and it looks good. Also thanks for adding L/R splits, it was me that asked under your YouTube video if you planned on including them.
I think there may be an error on fielding calculations though, particularly 2B. I noticed it when sorting by wOBA and seeing Yordan Alvarez's SS WAR was over 3x higher than his 2B WAR. He'd be a terrible defender in either position so I wondered why there was such a difference. I did a bit of digging and I think IF range is being undervalued for 2B.
If I'm interpreting the calculations in config.py correctly it looks like IF range is over twice as valuable to 1B than it is to 2B which can't be right. Even 1B IF arm carries more weight at 75 rating