Here's a walkthrough of the technologies I most commonly use when developing applications:
I have lately been developing single page applications (SPAs) using React. I like using Bootstrap or Semantic UI for styling / componentry, and Axios.js as a RESTful HTTP client. To manage the state of componentry, I started out using Redux, but later switched to using the built-in React Context API to reduce boiler-plate code and to improve maintainability.
Front-end Server & API Gateway
I am of the mindset that the front-end should be decoupled from the back-end to allow the two to be developed, built, and deployed separately. I currently use Nginx to achieve this since it can serve front-end builds and reverse-proxy HTTP requests to RESTful back-ends. Compared with Apache, Nginx makes a much better use of threads, is event driven, asynchronous, and non-blocking, making it able to handle a larger throughput.
On the server side, I like to handle requests using Node Express. When request handling needs to be scaled up, I use PM2 to allow the application to run on multiple processes, and additionally, I have used Amazon Elastic Beanstalk to scale horizontally. Due to its single threaded asynchronous nature, Node.js is particularly good at handling the most common types of requests, such as requests involving querying databases or making additional RESTful calls. But if the back-end needs to handle more computationally heavy tasks (processing large files, machine learning, or math for example), I create a separate application in a suitable language that handles this processing, and use a messaging queue like RabbitMQ to allow the request handler to offload the work to a cluster of servers more suited to do the heavy lifting. This type of design pattern allows for great scalability. If the userbase expands, the messaging queue will fill up, meaning it will take more time for the worker servers to get to the tasks. And when this happens, it's simple to add more servers to the work cluster.
When working with relational data, I typically choose Postgres as the database because it offers many features and can handle complicated queries and large datasets well. I use a good ORM in applications to query the database, such as Sequelize, to make the code more manageable and readable. When working with non-relational data or when rapidly prototyping an application, MongoDB with the Mongoose ODM as a is my go-to because it is very developer friendly.
Local Development Environment
In my local development environment, I use Ubuntu or a similar Linux distribution, git and Github / Bitbucket for source control, VS Code as my text editor. And when working with teams, I have used Jira and Confluence to manage tasking and documentation respectively.
Github and Bitbucket both have plugins available for triggering build servers on the event merging of pull requests, which I like to configure so that merging into the develop / main branch triggers Jenkins to build the project. I use webpack for minifying JavaScript projects, and Maven for building Java projects, and I use Docker to containerize the deployment of parts of the project.