I am not a dev. Which is why building this site takes so much time and effort for me. I have been working on and off for eight years each time a different iteration, a different take on what I want it to be. On each iteration, pondering if I am validated enough to share knowledge on the things I've learned across the entirety of my career, or if I've made this site good enough for others to learn from and coming back to yeah, nope, not yet. This time isn't any different, it may hold for a few months until I start reflecting on and later being discontent with the quality.
This page is dedicated as a self-referential analysis. A weblog that tries to record the iteration of this site. Originally using wordpress, but felt it as too template oriented, then experimented with grav for its simplicity, and once I started learning python I tried Django+MariaDB, and thought Flask was much more straight-forward, added neo4j as a database since I think graph database is the future and also I tried Docker, didn't like it and switched to Podman because it felt edgier -- no, honestly, I just hated the Docker daemon.
In a nutshell the site relies on two main components: Flask and neo4j, because its convenient. I needed a framework that integrates well with neo4j and python is an easy to adopt language. If I could use R for everything I would have. The connection is handled by Gunicorn and Nginx -- with certbot for SSL. Its pretty much set-up and forget. I've wanted to play with graph databases since forever so neo4j became the obvious choice; its accessible. Currently the site gets its data from a free neo4j Aura instance (which I think has some downsides, I'll explain below).
The website is containerized, because I felt like it. In all honesty, again I am not a dev I just like to play with new technology and finding out what the fuss is all about. In a word where everything is jargonized and buzz-wordified it helps to actually get to know the thing that annoys you. Containerization was one of those words. And, now that I'm getting to know it, I kind of liked the concept. The promised portability delivers. The eight years of keeping this domain meant moving around a lot, changing hosting from shared to VPS, changing vendor, etc. This particular container has moved back and forward between GCP and a local VPS without any configuration change. Once its set properly on one machine it probably will work anywhere. One thing about Podman though, the daemonless feature also means if you are running it through ss
The front end is mainly bootstrap tailwind + daisyUI which I think is pretty and simple and so popular that you can find almost any edge case if you find it hard enough in the many tech forums in existence. For the words page, I wanted each writing to be opened in a modal to reduce querying to neo4j. Because its very moody. It has a habit of being slow, which I think is probably because of the free tier. I could not confirm this but if you search "neo4j Aura free slow" it seems like it is the case. Being stupid I could not figure out the logic how to open each unique article on a single modal page, I always got the last item in the database; until I found a seven year old article giving a solution. What this basically does is creating a number of modals with unique ids equal to the numbers of articles and have it so it is unique for each article. Its obvious now, but after hours of doing everything and not figuring out, I think its genius. I also actually found out it created a new challenge; to track the read_article
event, the modal needs a listener and can only collect the attributes through the data layer once the site has loaded. This required me to create a custom javascript event.
The content is filler, which I know will score bad with SEO, but will be useful once I start using it as example data for the things I have planned for the site. For now, I see it as an archive of what I have written and/or published these past few years. So, because I'm lazy, there is no CMS online. If you recall -- or read this at all -- I mentioned grav which inspired me to create all the contents in a flat file. All this text is markdown, the images are base64, I'm trying so that all the content can fit inside a single database. Yes, single point of failure, but also convenience.
In respecting the simplicity, I made a CMS based on click which has a write, list, update, and delete (by id or title) feature. This means less dependency on accessing the website or the neo4j aura console, it also downloads and updates the content into a markdown file. There are still some bugs -- drafting is still non-existent and rewrites everything I've written to some point. I'm hoping it will grow into a usable framework that I can share someday, but reminding myself of my procrastination, probably not likely.