# #2 - Planned Tech stack

We saw a brief background about Wobu in my [previous post.](https://hellosambhavi.com/1-wobu-a-bit-of-background) After deciding the features that are planned for the first rollout, the logical next step will be to decide on the tech stack to be used.

The plan is to use [django](https://www.djangoproject.com/) as the underlying framework.

**Why:** It's a time-tested framework in terms of reliability, scalability and speed. One can develop applications quickly as the base framework has a lot of nuts and bolts built-in so that the developer does not have to re-invent the wheel.

From a frontend perspective, I plan to keep it simple with html and css, no fancy frontend js frameworks. The only twist is to use [tailwind css](https://tailwindcss.com/) instead of plain vanilla.

**Why:** tailwind is a low-level css framework, meaning nothing is pre-built. I imagine it as Lego blocks, it's up to the developer's creativity and needs to build what they want. For someone coming more from a backend world, tailwind is quite intuitive and easy to understand. Most importantly, everything sits in html.

To bring in more reactive behavior, I'll use [htmx](https://htmx.org/) wherever applicable.

**Why:** htmx is quite a tool in a developer's pocket. Especially when one does not want to start with heavy frontend frameworks, and still wants to provide an event-driven experience, htmx fits the bill.

The database is going to be [Postgresql](https://www.postgresql.org/).

**Why:** Similar reasons as why I chose django plus it's a ORDBMS. Wobu is user-centric with a lot of text. Text search features are quite powerful in Postgresql.

[pytest](https://docs.pytest.org/en/7.3.x/) and [pytest-django](https://pytest-django.readthedocs.io/en/latest/) will be used for unit testing, and [playwright](https://playwright.dev/) and [playwright-pytest](https://playwright.dev/python/docs/test-runners) for end-to-end testing.

Smart notifications will have a strong focus in Wobu. I'm exploring multiple options for real-time notifications, one is [django channels](https://channels.readthedocs.io/en/stable/) and celery, another option is [firebase cloud messaging](https://firebase.google.com/products/cloud-messaging), and the last one is [magicbell](https://www.magicbell.com/).

For monitoring, I plan to start with [Sentry](https://docs.sentry.io/platforms/python/guides/django/) that has django integration. I may explore a few other tools as the usage grows.

For deployment, I'm going to use [Pulumi](https://www.pulumi.com/), an Infrastructure as code platform to deploy in AWS. I usually deploy directly on Digital Ocean and GCP. This will be my first time taking this route. Since I heard a lot of benefits about Pulumi from one of my favorite [python communities](https://pybit.es/), planning to give it a go.

There are other touchpoints like integrated chat in the website for customer support, newsletter subscription, and subscription payment. I've shortlisted products for each of these, but similar to notifications, I shall write separate short posts when we get there.

That's all for now 👋
