We would then break down the demo HTML into templates, which we would render in the backend, and work from there.
There would be JS for interactive components - first Knockout (viewmodels, terrible idea), then React (which would let you separate the state from presentation).
Backend templates + React frontend components was IMO the optimum, as long as your POST handling logic was sensible and data-oriented rather than some OO nightmare (https://wtforms.readthedocs.io/en/3.2.x/fields/#the-field-base-class).
You didn't have to implement the API separately from the frontend to later discover that your frontend developer worked really... fast. And implemented their own understanding of the problem domain. These days, if you're super unlucky, you discover that your frontend has been blessed with some non-standard component wrappers, which wrap components, which wrap components, which wrap... And somehow types in TS docs still have no links, so good luck finding what they mean by TData, especially if TData comes from a different codebase.
tl;dr: The tldr is in the title. I want sanity back :D
Sanity is available immediately if you are willing to be paid less. There are tons of simple, non-SPA, non-stack-on-stack projects out there, they just usually pay 1/10th the complex stuff.
I don't want to go back to JavaScript for employment so long as its riddled with unnecessary abstraction/dependency nonsense. While I did get tired of solving for the numerous problems that shouldn't exist in the first place I got more tired of insecure peers who were always quick to point fingers. I don't have to worry about that any more.
I don’t know if that’s still the case.