when something doesn't work out as intended (like for example, it didn't work out as we planned for some reason), I fix the issue on my side, then send him the template back
That's the root of your troubles. The flow of design should always be from
Designer to Developer and never reversed. Revisions and changes should have been made by the designer, and then pushed to you for implementation in the website. You can always make fast fixes yourself, but try to accept that those fast fixes are just temporary. The designer needs to go back to his designs and figure out the proper solution. He then pushes the change to you, and if it happens to be the same as your quick fix then great, otherwise you update from his designs.
He sends the complete template to me (the HTML export from Pinegrow)
Don't become addicted to receiving HTML you can work with. It's better if you implement the website technology (Bootstrap, CSS, jQuery, React, PHP, etc.. etc.. etc..) the way you need it. You then reproduce his designs using those tools. If the HTML he gives you is a quick start then great, but later as the project grows it won't be of much use. You'll need to make the changes yourself because only you understand your templating engine (i.e. CakePHP views, templates, plugins, component, etc.. etc..)
This process, as one could imagine is painstakingly slow and inefficient.
It's always been that way. Designers aren't programmers. They take their time to figure out what works best for the user, and sometimes they make mistakes. They don't understand concepts like components, frameworks and such. As the programmer you have to speak to your designer and share the how I implement what you design.
The designer is stuck in the middle. On one side they must please the needs of the programmer, and on the other side they must please the needs of user.
So my question is, how can we make this process go smoother?
I've found that physically sitting beside the designer and programming there really helps with the communication. If you two are working remotely, then keep facetime running for a few days. It really helps speed things up.
I've seen a lot of stuff about that we should use React and use RESTful and what not, but we want to use CakePHP for it.
CakePHP is one of the best frameworks on the planet (full disclosure, I'm on the CakePHP core team).
Cake is a rabbit development framework where the features are designed to build websites quickly. I know that sounds like a sales pitch, but this is what it is classified as. There are many other frameworks that are classified as rabbit. Java would be an example of a framework that is more enterprise than rabbit. If you were using that language, then I would have made a recommendation to change. Since you're using CakePHP. I would argue you should stay with it.
CakePHP makes for a good back-end server if you need RESTful APIs.
So I say. Use React/Angular/Vue now while their hot, but don't get to committed to them. Something new and better will be along shortly. I think we live in a world now where you can't build good websites without them.
Could some people guide me to some helpful resources about it?
Requests for lists are off topic here. Sorry.
I missed the part about tracking design changes.
Have your designer save his HTML output in BitBucket (they have free private repositories). You can then track and do comparisons using the BitBucket website. Everytime the designer makes a major change he adds a new branch with a version number.
It should be relatively easy for him to do this, and this will allow you to have a place to comment on said changes. For example; he can make a pull request to update the repository where you perform a review of the changes before they are merged.