Goal

Create a demonstration of my full stack software development and architecting skills.

Rather than being an online copy of my resume, Rich Designs is a vehicle to publish a portfolio of my personal projects which cover software development, solution and software architecture, and physical endeavours e.g. boat building.

Solution architecture

Solution diagram

Rich Designs is a web application running on an EC2 instance in the AWS free tier. The application is backed by a popular relational database and makes use of a mix of static and dynamic content.

The main guiding architectural principle of the project is to achieve the goal whilst staying within the limits of the AWS free tier as much as possible. Since the application is likely to have an audience in the 10s per year it doesn't make sense to deploy large EC2 instances for example.

This decision also provides a fun side challenge: rather than let raw computing horsepower save a potentially poor or inefficient design, I have to think carefully about everything from server side Java to client side CSS/HTML, server disk space, application weight, and so on.

For the data layer I chose a relational database over newer memory cache or no SQL data stores because in this use case the data model is structured.

Postgres made a good fit to the requirement, being open source, available to Windows and Linux, and simple to set up. I also had only a passing familiarity with it and wanted to use a new tool.

Application architecture

The web application is based on the MVC pattern; a set of entity and repository classes form the model. Data retireval functionality is implemented such that each repository class extends base CRUD functionality provided by the JPA ListCrudRepository class.

Method signatures determine the predicates for SQL queries and JPA does the rest, thus forming a layer of abstraction from the details of data storage and manipulation.

Dynamic HTML templates form the view and I use Thymeleaf templating engine to dynamically generate required HTML for some pages e.g. 'Professional', which will need to grow as I add work experience to the database.

A single Java class acts as the controller with a simple method mapped to each endpoint, generally each method returns the name of the view template which should be served. Where dynamic content is used then the controller method also passes data in an array for acces on the browser side.

Technology stack

“A rock pile ceases to be a rock pile the moment a single man contemplates it, bearing within him the image of a cathedral.”
-- Le Petit Prince

Inspiration