Hello
This is the first installment in a planned series of posts which open a window from the wider world into my experiments in thought, code, and other media. My goal is to document my own portfolio projects and experiments and figure out a way of leveraging LLMs which augments and multiplies my engineering abilities, keeping complexity debt to a minimum (i.e. only adding code which I have a clear mental model of and could explain, if asked), and growing my knowledge through back-and-forth discussion with the LLM and grounding in primary references as I go.
The plan is to clearly distinguish between the prose which I write and summarized transcripts of discussions with Claude, so that I get the benefit of exercising my voice in writing, while surfacing my thought process in a diary-like form for the benefit of the reader, as I enjoy reading old diaries, letters, and logs myself which capture these kinds of creative processes. As an example of what I mean, here's a Claude-generated summary of a back-and-forth from yesterday where I iteratively refined the architecture and concept for my current project (this blog), eventually arriving at the concept for the v0.1.0.
T = 0h: Started with an ambitious single-command deployment tool executed by running clar deploy. Quickly identified the tension between reusability and time-to-go-live.
The initial idea was a container image bundling a command which the user would execute to deploy their blog. This arose from my desire to start some kind of a public development journal, and place to publish my thoughts, where I own the whole thing, rather than handing my content, personal data, and usage telemetry over to $SOCIAL_MEDIA_PLATFORM in exchange for the privilege of publishing my thoughts. At the time of writing this post, the vague direction of my thinking is to expand this into a local tool which anyone can use to freely get their writing online, enhancing the privacy-preserving features over time. The root motivation for this is that I don't see a particularly good reason why we should be handing over our textual data to middlemen just to get it published online.
The ideal "logical extreme" end state for this tool is a negligible-cost integrated software & hardware product which communicates over tamper-resistant & decentralized networks, is robust to interference by any controlling authority, and simple and minimal enough to be auditable in full by members of the open-source community. Maybe in the course of this specific project, I'll find that there are specific points of failure in the fundamental architecture of the web which make the whole endeavour a pointless effort, but if that turns out to be the case, I will at least be able to say exactly how in the form of "I tried to implement a privacy and data sovereignty preserving text publishing tool - here's how doing that is fundamentally unviable on the public web" and have a better idea of what kind of a web we would need to have to make such a tool viable.
In general my sense is that there is a lot of "social alpha" currently going into the pockets of the various social media platforms in the form of our learned dependency on them for basic social functions of discussion, interaction, etc. and by providing a mechanism by which people can share their thoughts in text, in a way that is fully owned by them, and which eventually supports pseudonymity or total anonymity, I might be able to make some small contribution towards re-democratizing the exchange of ideas online, or disenclosing the digital commons. There's lots more detail to go into on this in later posts, which I'm greatly looking forward to.
Back to the design review!
T = 0h30m: Set initial scope for v0.1.0. Two-phase deployment model settled: Terraform for infrastructure, manual S3 synchronization for content publishing. Considered deploying both infra and content with Terraform and rejected due to unsuitability of Terraform for content deployment.
Self-explanatory: Terraform for the infra dependencies: S3, ACM, CloudFront, Route53. AWS CLI for content publishing.
T = 1h: Route53 Hosted zone creation deferred. Repo structure, semver convention, and commit message format established. Initial skeleton committed.
There was an interesting decision point here, deciding between handling the complexity of supporting the use case where the user hasn't got a domain of their own upfront, versus assuming the user has a domain. In the spirit of making the definition of done for v0.1.0 as minimal as possible, I decided to stick with the less complex version, where the user supplies a hosted zone in their Terraform variables.T = 1h30m: Iterating on static assets. Font, layout, and typographic hierarchy refined incrementally.
Not much to explain here, just tweaking and refining, getting the look & feel how I wanted it.T = 2h: Local frontend complete. Identified pending items for v0.1.0: Terraform implementation and initial deployment.
And that's the mission statement for this blog and Clar v0.1. More to follow!