Depends on the project. For websites I like to use a statically generated Nextjs site served by nginx[1] and for SPAs Nginx that serves a Vite-built static bundle with a backend that’s in whatever language the backend team chose.
[1] https://martijnhols.nl/blog/how-much-traffic-can-a-pre-rende...