If I'm calling the shots, up until recently it's been:
Backend: Clojure + Postgres. Keep it as simple as possible.
Frontend: Simple server-side templating in Clojure if that's sufficient. React (from either JS or ClojureScript) if non-trivial client-side interactivity is needed. My experiences with Javascript "frosting" on mostly-server-side applications hasn't been great -- can easily end up more complicated than an all-React implementation, even if you need server-side rendering.
But I'm increasingly keen to avoid the JVM, so future projects will probably have something else on the backend. I've used node backends a few times recently, mostly in "need to glue something together fast" contexts, and have been pleasantly surprised.
Lately have picked up Micronaut which is a very interesting take because it has no support for traditional front end, but supports SPA style front ends really nicely. So:
Backend: Clojure + Postgres. Keep it as simple as possible.
Frontend: Simple server-side templating in Clojure if that's sufficient. React (from either JS or ClojureScript) if non-trivial client-side interactivity is needed. My experiences with Javascript "frosting" on mostly-server-side applications hasn't been great -- can easily end up more complicated than an all-React implementation, even if you need server-side rendering.
But I'm increasingly keen to avoid the JVM, so future projects will probably have something else on the backend. I've used node backends a few times recently, mostly in "need to glue something together fast" contexts, and have been pleasantly surprised.