Heres how I do it. I just use express.js, sequelize (sqlite) for ORM, nunjucks for templating. Then on the frontend I use VueJs 2 which I use like jQuery - no compile step no components. Throw in some Bootstrap 4.5 because I dont need the new features of 5. Deploy on a $5 lightsail server. Done!
WordPress plugins (and themes) are plagued by freemium versions. SEO has been gamed. Gone are the days of finding a non-freemium, single functionality plugin, that just works. You have to be a seasoned WP developer to wade thru all the crap that is the WP ecosystem, or if all else fails, write your own functionality via functions.php.
In my workflow, I PULL when they initial get online and MERGE non conflicting changes and ACCEPT the changes with the latest timestamp if there is a conflict.
It's not perfect and people still complain, to do it cleanly I would need to prompt the user which change to take but I haven't figured out a clean way to do that yet.