Blog Home

Building the Homepage

April 23, 2025

With my server running and reasonably secure, it was time to set up a proper homepage! I already had Grafana exposed at grafana.jamesmassucco.com but I didn't have a proper root site at jamesmassucco.com. Again, I relied on ChatGPT to get started. I told it I wanted a sleak and simple website for showcasing my coding, and it rendered a terminal-style website, and then generated some CSS and HTML to make it real! It honestly did a phenomal job, and all I really had to do was edit the content it had populated to align with what I wanted to say.

To serve it up, I added a new docker-compose.yml under the new top-level director homepage/ to create an nginx container with a my homepage/site/ directory mapped into the /usr/share/nginx/html directory of the container. After that, all I need to do was add my desired top-level directory to my cloudflare-ddns setup and it was automatically registered to Cloudflare, and boom - I was able to access my website!

Once I had a homepage, I wanted to add a bit more content, so I (agin with help from ChatGPT) cooked up a Metrics page! I initially wanted to embed Grafana directly in the page to show metrics, but this raised some security red flags due to the use of IFrames, and so I opted instead to generate some fake metrics, both static ones and a bit of JavaScript to make some dynamic plots.

Repo Quality of Life

Since the website came together more quickly than I'd expected, I decided to spent a bit of time on repo quality of life items. First, I setup a .vscode/ directory with settings.json and extensions.json files so that default settings get automatically applied in any VSCode session accessing the repo, and so that the required extensions are automatically suggested.

Next, I added linters: Prettier (HTML/CSS/Markdown), Stylelint (CSS), and Ruff (Python). I made sure to update the VSCode extensions to include them all, and set up configuration files for them in the root of the repo using some basic settings.

Finally, I setup a bootstrap.sh script to provision a fresh install of the repo with the required dependencies. There's still some work to be done there, because it does a lot of unnecessary work and has some error messages, but it's enough for now. This will be helpful when I start to expand my cluster to multiple pieces of hardware and want to provision the repo on each of them during initial configuration.