I decided to create this website with some restrictions:
- Performance: It has to be fast and light.
- Proper technologies and infrastructure: React + Typescript for the Frontend, Go Programming Language for the backend and GCP, AWS or Azure for the services.
- Price: as cheap as possible without ignoring the other restrictions.
That's why I used the following technologies:
- MongoDB Atlas as database. Free forever with 512 MB of storage, which is more than enough for this project.
- GCP Artifact Registry to store and manage docker images. Each image is a Go HTTP service for the static HTML and the GraphQL API. Almost free for a project like this.
- GCP Cloud Run to run the website in a fully managed infrastructure. Cloud Run scales applications based on the number of requests, for this website those won't be a lot so Cloud Run will scale to zero the number of instances, which means cold starts. To avoid cold starts, a minimum of instances need to be used. In total this will cost 8$ per month.
- GraphQL as query language for the API.
- Next.js as React framework using static generation and exporting static HTML to have a very fast and light website.
- Tailwind CSS as CSS framework. This project doesn't need a full UI framework like Material UI or Ant Design.
- CircleCI for continuous integration and continuous delivery.
- reCAPTCHA Enterprise to avoid bots in the Contact form.