I highly recommend anyone using terraform start with a mono repo. Still use modules and then spread out your components but definitely don't try to split them up in separate repos because keeping the version graph together will become a real pain and is easy to mismanage.
From there, ensure any logical components have their own separate lock and state file. If you don't do this, it is going to be a game of roulette to know when this resource was last run and what might change if you roll it out. It is easy to build your own directed graph between components using data sources. These allow you to have component B read component A's state file to get the outputs it needs.
All in all, I've found most of the documentation and "best practice" in the terraform community promoting dangerous practices. I talk more about these practices in this podcast[0]
[0]: https://packetpushers.net/podcast/full-stack-journey-027-und...