I’d like to give a brief technical explanation of how this website came to be and mention a couple of improvements that I’d like to make. Perhaps even moreso than an excuse to write, this project is an excuse to learn some web development skills. I’m going to try to explain my full process with the assumption of a completely non-technical reader. I think it’s a useful experiment for my own understanding of what I’ve done, and hopefully you learn something along the way.

I chose to use AWS as a starting point, because it’s what I’m comfortable with. AWS stands for Amazon Web Services, and all my work for Everstream Analytics over the last three years has lived inside of AWS. They offer a whole suite of software services, but there are truly only two that are currently relevant to jackspoetic.

Route 53

This is a Domain Name System service. This is where I bought the domain name jackspoetic.com. The process of figuring out a name took months. Nothing felt right. I brainstormed with ChatGPT, with Maria, and eventually found one that I liked. October of last year I purchased it via Route 53 in AWS for $14.00. I pay 50 cents per month for the “Hosted Zone”, i.e. the instructions that direct jackspoetic.com to the associated IP address. A domain name, like jackspoetic.com, is just a friendly label for something that actually lives at a number (IP address), like 13.53.239.40.1 The entire internet works like this.

EC2

Short for Elastic Compute Cloud, this is a server where I run the code necessary to run the website. This is basically a way to have constant access to compute. If I were to run the necessary code on my personal laptop, it would run into issues when I shut it down. It would also be constantly using compute resources (albeit few) and potentially slow down my laptop. For that reason, I use a “virtual machine” or a “cloud server”, which particularly at the miniscule size I’m using, are incredibly cheap. I’m still on a free tier as a new user, so I have yet to pay for a server. As friends of mine that know more about this than I do would tell you (talking about you Jordi), paying for a server is probably silly. The amount of compute I need is so small that there are any number of free options. It’s still a learning process and I chose EC2 because it was easy and familiar. This may change, but the fundamental idea of running the website via an external server will not.

That’s it for the AWS world! The rest is just code. It lives in a folder here https://github.com/jackkru/jackspoetic. GitHub, for those not familiar, is what’s referred to as a “version control” platform. Anyone that has worked in software is familiar with version control - it’s a simple, but incredibly useful system that allows programmers to store and update code. It’s especially convenient when collaborating with others. You may have seen a couple posts from Sam Holden on this website - he was able to contribute not by sending me articles, but by creating a branch off of my code, then merging that branch in.

The code itself is just Python and HTML. HTML is just a formatting language for telling a web browser how to display text, images, etc. I am not very familiar with HTML, but luckily, my AI assistant is. I primarily use an AI assistant called Cursor for coding help. I think the most useful analogy here is a traditional text editor. Imagine Word or Google Docs, a tool that you can open and use to write/edit text. Traditionally, programmers have used similar tools, but designed specifically to write/edit code. Cursor is an extension of a traditional tool called VSCode, with an AI assistant built in. Think Word, but with ChatGPT as a sidebar, and ChatGPT isn’t just responding to your questions, it’s actively able to read and edit what you are writing. I have found that in my data science work, in larger, more complex codebases, Cursor often disappoints. But in jackspoetic, a simple web development project, it’s been phenomenal. I tell it I don’t like the color, or there's an issue with the alignment, or I want to add a dark mode, and it does the rest.

These HTML templates, generated by AI, are then served in real time when you interact with this website by a Flask app. Flask is a popular web framework for developing apps using Python. I write a series of functions that determines behavior as you interact with this page. You click on “Blog,” and that triggers a function that decides how to respond and what to display. It may need to pull in an HTML template, a text file, or an image, depending on what action is taken, but everything is controlled by a single Python file that is constantly running in my EC2 instance.

That’s it! I’ve gone through a couple design changes to get something clean that I liked. I had a couple of early issues with my EC2 instance not having enough RAM (short-term memory), which led to crashes. I allocated some additional swap space (longer term memory that it can borrow when it’s low on short-term memory), and everything seems stable. I’ve added and refined a dark mode feature based on feedback from a friend.

I have a couple of ideas for improvements. I think an email subscription feature would be useful to update those that care about when a new post goes up. I think a comment section could be nice, to allow for friends and family to engage with posts. And with my friend Sam slowly posting bits of his book, I think the ability to link one post to another could be cool. If there are any other changes that you have in mind, feel free to let me know! A big point of this is learning new things, and as I add layers of complexity, I will be forced to learn new things.



1 stole this from ChatGPT. I try to use it as little as possible when writing, but this was a very useful explanation.

If you're reading this in dark mode, you're experiencing the feature I just built! The toggle button is in the navigation bar.