I have used project-per-virtual-desktop approach for years. I assign "shared apps" (Mail, Slack, etc) to all desktops (option-click via dock icon). My "project apps" are mostly terminal, text editor, and browser windows.
There are couple of issues¹, but this is still by far the best approach I can think of. Actually, I don't understand how other people can manage their stuff without per-project virtual desktops.
¹ cannot rename virtual desktops on macOS, not all apps can restore their windows on correct desktop after reboot, not all apps support multi-window workflow (e.g. Slack), "minimized windows" area in dock should be per-desktop instead of global