I have water profile to be a major factor in making quality beers. I would recommend that you send your water off to have it professionally analyzed. Once you have that, you can use a water profile calculator (there's a great excel one EZ Water calc) to adjust your mash and boil water with the proper amount of brewing salts for the type of beer you are brewing. I have soft water so I end up adding CaSO4, CaCO3, and MGSO4 to almost every pale, IPA, etc I make. It also helps in getting your ph down to the proper ranges for a successful mash.
A couple questions
0. What was your grain crush like? Were the hulls intact or shredded?
1. What was your strike water temp and mash temp after strike?
2. How long was your mash period and did you test with iodine/iodophor to confirm conversion?
3. I'm not a BIAB brewer but I'm assuming your mashing with all of your pre boil wort.
4. What was your pre and post boil gravity reading
5. What sanitizer do you use on your fermentation equipment
6. What temp did you ferment at?
7. Did you reoxygenate the wort prior to pitching?
8. You indicated primary and secondary. What was the total time your beer was on the cake
9. Did you force carbonate or use priming sugar?
Making great beer is not easy, but it is definitely rewarding!