As a personal project, I aimed to create a back-end based on a relational database to store and serve my experiences and skills. The goal was to use this backend in a portfolio website, both displaying my skills to anybody and allowing myself to edit the data.

From a full-stack template using FastAPI, PostgreSQL, and Vue JS, I developed a full-stack website. The back-end was based on FastAPI, which serves a REST API on top of a WSGI HTTP server (for which I used Gunicorn). Using SQLAlchemy library, I designed the data model, both for user authentication and authorization workflows and to store professional skills. Good practices of using linters/formaters (black, pylint and isort here), continuous integration (with GitHub Actions) and containerization (with Docker) were used.

The front-end is based on React JS, MUI and Tailwind CSS libraries (in opposition to Vue JS that was used in the original template). It uses Axios to communicate with the backend, including for authentication. Here again, good practices of using linters/formaters (Prettier and ESLint), continuous integration and containerization were applied.

I also set up a reverse proxy, based on Traefik, in charge of redirecting API calls properly to the back-end. It uses Let's Encrypt to automatically renew a SSL certificate (needed to enable HTTPS protocol).

The architecture is described using Docker Compose, that includes the back-end, the front-end, the reverse proxy, and other services like the PostgreSQL database.

The back-end was hosted on Amazon Web Service (AWS), using an Elastic Compute Cloud (EC2) instance. A custom domain name (mandin.dev) was dedicated to this website. Finally, Continuous Deployment workflows were setup to deploy automatically the website updates in production.

During this project, which was ultimately abandoned, I learned how to build a real-world full-stack website, from the technical functionalities (e.g. authentication) to the deployment (GitHub Actions, AWS, domain name, SSL certificates, etc.). I also learned how to set up a reverse proxy and how to work with various libraries and technologies like FastAPI, React, and SQLAlchemy.

Docker Docker compose React JS MUI Tailwind CSS TypeScript FastAPI Python PostgreSQL Traefik CI/CD GitHub GitHub actions SQL Alchemy AWS Elastic Compute Cloud EC2 RabbitMQ SSL Certificate VS Code

Source code