Welcome to the codebase for my personal web application! The stack consists of Angular, NestJS, and PostgreSQL. Please visit the url, mattmaxwell.dev, to see it in action!
The API is built with the NestJS framework, which offers an incredibly similar feel to Angular. It has many capabilities, so please feel free to read more on the API page.
The UI is built with the Angular framework, offering an extensive and well-maintained library of functionality to use on the client-side. Check out the UI page to read more.
Although there are no 1:1 relationships in this database design, there is fortunately enough complexity in the app to warrant a need for 1:n and m:n relation types. For this reason, I chose PostgreSQL to efficiently and optimally handle my data needs opposed to a non-relational database technology like MongoDB (which would still work fine, but is not specifically intended for relational data).
The current deployment is hosted on Google Cloud Platform. To help save costs, I am using a system of building locally and pushing the images to the corresponding Cloud Run service.
Stripe is currently implemented for handling any and all of the details related to processing payments for shop products. More specifically, I'm using Stripe Checkout for handling the UI / UX needs since it does exactly what I need.
Search Engine Optimization (SEO) is hugely important for relevance on the web. There are certain things that we can do, as engineers and developers, to improve the performance of our website in terms of SEO.
This application features dynamic canonical URLs for things like blog posts and projects (or anything with its own separate page view), which improve URL readability and SEO. Similarly, the (HTML) title of a page changes dynamically according to the pages content.
I have also included files like robots.txt
and the sitemap.xml
to try and help indexing of my application's pages by Google.
This is the third version of mattmaxwell.dev and it felt just as much of a learning experience this time around as the previous two iterations. However, the whole point of this third re-work was to establish an application architecture that will be as maintainable and extendable as possible so that minimal work is required by me to make changes whenever needed.
I really appreciate you taking the time to checkout the repository and website - thank you very much. Cheers!