Start here. This is the direct spoken answer to practice first.
Why this question matters
A modular monolith needs explicit ownership even though it has one deployment. Folders alone do not prevent cross-module code and data access from creating one large dependency graph.
I would define each module's public operations and owned data, then block direct references to its internals. Other modules call that public API or react to an internal event instead of querying its tables. Shared code stays small and foundational; business concepts should not move into a common project merely because two modules mention them. I would start with the highest-change or most tangled boundary rather than redesigning everything at once.