Hosting: probably one of the more affordable VPS providers out there, like Contabo, Hetzner, or in my case Time4VPS. Homelab servers (just boxes with Debian/Ubuntu) for dev/testing environments at first. Probably some popular OS like Ubuntu for the remote servers as well, just because of how easy such a setup is to get from any provider.<p>Runtimes: OCI containers with Docker, there are other options out there as well, but this one is stable and boring, plus makes deployments easy. Probably at least something like Docker Compose or maybe Docker Swarm (more or less uses the same format) to orchestrate stuff across multiple nodes and take care of networking, if needed. Maybe Portainer for easier management. Can later move to Nomad or Kubernetes if needed, but the previous options are good enough.<p>Databases: probably MariaDB/PostgreSQL for relational data, if needed then MongoDB as a document store, MinIO (S3 compatible) for any larger binary blobs, Redis for key-value storage and RabbitMQ for queues. Admittedly, in most cases you won't need that much more than just a single relational DB instance, unless you have particular workloads to deal with. Honestly, even SQLite can be a good starting point for a single node deployment.<p>Back end: honestly, any of the most popular languages out there. Java (either Dropwizard or Spring Boot) or .NET (ASP.NET) for good performance and rich ecosystems, Go for small statically linked executables, Python for packages to do basically anything (most likely Flask/Django in webdev), Ruby for particular CRUD setups (with Rails), Node (most likely with Express.js) for getting up and running relatively quickly. Personally, I'd opt for static type systems when not in too much of a hurry, but also recognize the benefits of any of the options listen. Frankly, they're all good enough, so just pick whatever feels suitable for the problems you want to solve. Even PHP with Laravel is viable nowadays.<p>API design: probably something RESTful, though some like GraphQL (personally, I think that it brings a certain amount of complexity with it), in rare cases would also go for something like gRPC or also WebSocket stuff, though again it depends on what you're building.<p>Front end, server side rendering: if you decide not to make a RESTful API but are okay with server side rendering (certain Django, Rails, Laravel setups, for example), then you won't have to think about this too much. In those cases, I'd just throw in something like Bootstrap and maybe something to make dealing with JS easier.<p>Front end, SPA: However if you're building a SPA (which is great because you can swap out front ends or use it for other stuff, not just the current UI) then I'd recommend you look in the direction of Vue 3 + a component framework/library like PrimeVue. Angular does TypeScript really well but is cumbersome to work with, React seems to get more and more complex with every release, whereas Vue does everything from hooks to recommended state management solutions (like Pinia) well and without too much accidental complexity. I'd pick the component framework/library because making your own is sometimes a waste of time. I'd consider TailwindCSS, but not always.<p>Web servers: personally I'd go with Apache for my own reasons (modules for most stuff), but Caddy is also excellent. Nginx is also good, but doesn't do ACME certs out of the box, although setting up certbot isn't too hard. I've written on my blog about using Apache, actually: <a href="https://blog.kronis.dev/tutorials/how-and-why-to-use-apache-httpd-in-2022" rel="nofollow">https://blog.kronis.dev/tutorials/how-and-why-to-use-apache-...</a> and about Nginx as a reverse proxy.<p>Day 2 concerns: I'd also look into Matomo analytics if the MVP gets popular, as well as Zabbix for server monitoring, Uptime Kuma for uptime monitoring, maybe way later something like Graylog for log shipping and Apache Skywalking for APM/tracing. For managing nodes, Ansible can be a good bet later.<p>So it might look like: Ubuntu + Docker + MariaDB + Ruby + Rails.<p>It might also look like: Ubuntu + Docker + PostgreSQL + Node + Express.js + REST + Vue + PrimeVue.<p>Or any other number of combinations. It's hard to go completely wrong nowadays. Cloud options are also nice, but personally I like being able to run basically the same thing both locally and on a server somewhere. Actually, I had a somewhat related blog post about this, "How boring or novel should your technology choices be", too: <a href="https://blog.kronis.dev/articles/how-boring-or-novel-should-your-technology-choices-be" rel="nofollow">https://blog.kronis.dev/articles/how-boring-or-novel-should-...</a>