In my opinion, you should try a bunch of programming language and frameworks so you can judge yourself which one you really like. Building a bunch of small side projects to get a feel of those languages and frameworks is better than building one big project at this learning stage. After you have settled with one or two programming languages and frameworks you like, then you can proceed with complex side projects to gain deeper experience with the language and framework of your choosing.
My preferred stack to give you some inspiration:
- Backend: Django with Django Rest Framework. Reason: there are faster python backend framework out there, but nothing beat django yet when you need to build something quick.
- Frontend: Next.js is getting really good these days.
- Database: Postgres. Very easy to setup and left alone. Even without tuning, it works just fine.
- Task Queue: Learning how to use a task queue is essential. I use Celery with Redis backend for small projects or RabbitMQ backend for larger projects.
- Docker: learn how package your project into a docker image you can deploy in various cloud services
- Infra: I deploy my side projects to a bare metal server running RKE2. Having those projects as docker images with kubernetes config makes it really easy to migrate them to a new servers or cloud providers.