After a year and a half of my blog being a dynamic site I'm going back to a static site. My reasons are more practical than technical. For years my blog has been my passion project; it's how I've learned more complex authentication protocols, it's where I cut my teeth designing complex APIs, and it's also where I shaped my understanding of frontend technologies.
I've posted regularly about using agents to write code. In my earlier days of that I produced a number of features for my blog, I fixed bugs, and I even built a new frontend. I also embarked on three more projects. These were much more ambitious.
Agent workflows
I started to realize that certain prompts were more effective than others; if I started with a larger scope I could get the LLM to complete larger, more complex features. Certain language and prompts also enabled the LLM to work for longer periods of time uninterrupted. I put that to the test with my first project. That project, of course, crashed and burned - the code became unusable and I had to start over. I determined that I had been overfocusing on functions and not on the API design, interfaces, and the overall architecture of the project. This effectively left the LLM to its own devices.
My second project was more successful but ultimately fell below my personal standards. This time I incorporated a project system prompt that covered coding standards so that I didn't feel as much pressure to focus on that while prompts executed. This let me focus on the larger aspects of software engineering and programming: design, architecture, and testing strategies. Still, the project became a bit unweildy and I took it for the learning opportunity that it was.
My third project is where I hit my stride. This time I started with the same style of system prompt that reminded the LLM of standards, conventions, and code organization. I also incorporated workflow documentation and built in code generation. At the time this was kind of a bold step forward for me, but I've since learned that LLMs are exceedingly good at observing and following patterns. It took to this quite well and I was able to build out a lot of functionality very quickly.
That didn't always have its highs, frankly. There were times where it misinterpeted my instructions and implemented things that put the project at risk or in a bad state. This mostly happened as the project grew in size; frankly it's large for one person or even multiple people to maintain. I knew I was venturing into much more uncharted territory. When I'd faced challenges in the previous iterations I tried to fall back on the tools that I've used to develop and advance teams in the past. For instance, when changes become more risky I like to implement unit tests that affirm how certain code should be used, behave, and perform. I introduce mocks that ensure that as long as my data layer remains consistent that my business logic also remains consistent.
I had already incorporated regular mock testing into the LLM's workflow, so I figured at this point the primary challenge I was facing was a common one of team: scope complexity. Many different systems that all had their own contracts and own complexity were at play. They needed to mesh nicely to achieve the outcome I was looking for. I started giving the LLM system designs that charted out not only how the system might change and evolve but what exactly it needed to accomplish with this change. Anyone that's worked in a large enterprise environment or project will recognize this as a request for comments (RFC).
With my full toolkit I'm able to accomplish complex refactors, new features, and bug fixes. I'm able to take on work that often take several engineers to accomplish and with often more testing and certainty than I could guarantee in the past. With that HashPost has been born.
So, why the static site?
I'm a bit of a pragmatist. I've not been giving my blog the kind of attention that I'd like and I could better utilize the infrastructure that it runs on for HashPost. I've converted my blog over to this site with custom markdown rendering, which is ultimately a big reason I built my dynamic site in the first place. I've moved all of that to GitHub Pages and am now in the process of rebuilding my infrastructure to host HashPost.