<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Max's Newsletter]]></title><description><![CDATA[Posts, notes, and thoughts]]></description><link>https://substack.maxpetretta.com</link><image><url>https://substackcdn.com/image/fetch/$s_!gIbE!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f5155c-93c1-40f0-ab0e-69876f097a89_1024x1024.png</url><title>Max&apos;s Newsletter</title><link>https://substack.maxpetretta.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 25 May 2026 19:33:40 GMT</lastBuildDate><atom:link href="https://substack.maxpetretta.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Maximilian Petretta]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[maxpetretta@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[maxpetretta@substack.com]]></itunes:email><itunes:name><![CDATA[Max Petretta]]></itunes:name></itunes:owner><itunes:author><![CDATA[Max Petretta]]></itunes:author><googleplay:owner><![CDATA[maxpetretta@substack.com]]></googleplay:owner><googleplay:email><![CDATA[maxpetretta@substack.com]]></googleplay:email><googleplay:author><![CDATA[Max Petretta]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Claude Code Era]]></title><description><![CDATA[A eulogy for the old way of software engineering]]></description><link>https://substack.maxpetretta.com/p/the-claude-code-era</link><guid isPermaLink="false">https://substack.maxpetretta.com/p/the-claude-code-era</guid><dc:creator><![CDATA[Max Petretta]]></dc:creator><pubDate>Thu, 05 Mar 2026 20:29:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zhbE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I would be lying if I said I write 50% of the code that I ship into production, these days.</p><p>I would <em>still</em> be lying if I said I write 20% of that code.</p><p>No, I am handwriting less than 10% of what I deploy. This should end in disaster - a giant ball of spaghetti. But somehow, it&#8217;s working. And how fast I can ship is only <em>increasing</em>.</p><p>This is downstream of software engineering entering a new era, one defined by <a href="https://claude.ai/code">Claude Code</a> and <a href="https://developers.openai.com/codex">those</a> <a href="https://opencode.ai/">like</a> <a href="https://ampcode.com/">it</a>.</p><h2><strong>Year of Agents</strong></h2><p>When 2025 was proclaimed the &#8220;<a href="https://x.com/gdb/status/1879327050819104778">year of agents</a>&#8221;, I didn&#8217;t buy it. At the time, I was still writing the majority of my code by hand with <a href="https://cursor.com/">Cursor</a>.</p><p>Agent mode was <em>okay</em>, at best. Each line it produced had to be scrutinized. The LLM was most helpful as a quick documentation lookup, or as an intelligent &#8220;find-and-replace&#8221; for boilerplate.</p><p>The model of choice was Claude 3.5 Sonnet<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. It&#8217;s hard to explain, but you could tell that the model had &#8220;taste&#8221;, which I can&#8217;t remember any previous models having. After using 3.5 for awhile, you&#8217;d start to daydream about where this whole LLM thing was going.</p><p>Turns out Anthropic was thinking the exact same thing; they decided to pair the <a href="https://www.anthropic.com/news/claude-3-7-sonnet">Sonnet 3.7 release</a> with a new terminal interface for working with Claude, locally, on your filesystem.</p><h2><strong>Bad Vibes</strong></h2><p>Honestly, I was not a fan of Sonnet 3.7. It had some strange regressions compared to 3.5 that made me avoid it. Like frequently stopping mid-task to request more permission, or overengineering otherwise simple React components. The &#8220;taste&#8221; was missing. Since the model was a dud, I assumed the CLI was too.</p><p>Meanwhile, <a href="https://x.com/karpathy/status/1886192184808149383">vibecoding</a> was gaining momentum. I kept writing my code by hand. After all, for the first five years of my career there <em>was no other way</em>. The best method I had found to learn programming (or anything, really) was to take something apart piece-by-piece, and understand every word of syntax needed to make that product work.</p><p>When <a href="https://openai.com/index/gpt-4-research/">GPT-4 was released</a> in early 2023, I tried to leverage it as much as I could. Reflecting now, that was a mistake. Copy-and-pasting files of React and TypeScript back and forth was insanely inefficient, and the output quality was just not there. I would have been better served by ignoring LLMs for another year, and instead maximizing my time in the <code>$EDITOR</code>.</p><h2><strong>Shipping Is Believing</strong></h2><p>What drew my attention back to Claude Code was <a href="https://steipete.me/posts/2025/claude-code-is-my-computer">this post</a> by <a href="https://x.com/steipete">Peter Steinberger</a><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>. His descriptions of using Claude as a &#8220;natural language terminal&#8221; got me to take a second look. That, plus the release of <a href="https://www.anthropic.com/news/claude-4">Sonnet 4</a> in May, finally unlocked the workflow for me. And the difference was huge:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zhbE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zhbE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp 424w, https://substackcdn.com/image/fetch/$s_!zhbE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp 848w, https://substackcdn.com/image/fetch/$s_!zhbE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp 1272w, https://substackcdn.com/image/fetch/$s_!zhbE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zhbE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp" width="1456" height="1052" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1052,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;My Claude Code stats page&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="My Claude Code stats page" title="My Claude Code stats page" srcset="https://substackcdn.com/image/fetch/$s_!zhbE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp 424w, https://substackcdn.com/image/fetch/$s_!zhbE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp 848w, https://substackcdn.com/image/fetch/$s_!zhbE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp 1272w, https://substackcdn.com/image/fetch/$s_!zhbE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82ec906-cd26-4fa5-95ef-f681a0588de7_2580x1864.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Since June, <code>ccusage</code> shows my total usage at over <strong>7.5 billion tokens</strong> - at API cost just under $8000. I&#8217;ve been on the 20x Max plan the entire way, so the actual bill is thankfully much lower.</p><p>My rate of commits has roughly doubled, and we can prototype, test, and ship new features for Bracky<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> almost daily. The hardest part is no longer engineering, but actually deciding <em>what</em> to build.</p><h2><strong>Mourning What Was</strong></h2><p>Each new model reinforces this paradigm further. Opus 4.1, then Sonnet 4.5, then Opus 4.5. Each time Anthropic (or OpenAI with Codex, I&#8217;m told) unveils a new generation, more and more of the actual programming work is erased.</p><p>I started programming because I enjoyed the process of writing code. It was a way for me to be &#8220;logically creative&#8221;, since I&#8217;ve never been gifted artistically. But since Opus 4.5, I barely use my editor<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> anymore.</p><p>Nowadays, features start as a long voice prompt<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> in the terminal, iterated into a thorough <code>PLAN.md</code> spec, then implemented by Claude. Weeks of work collapse to hours. My primary job now is designing the overall system, crafting feature specs, and reviewing the generated code.</p><p>I will miss handwriting code. It was incredibly satisfying to nail the correct structure that accomplished the task while remaining clean and easy to understand. But I won&#8217;t pretend we can go back.</p><p>Think about GPS. We used to need to read maps, memorize a route, understand landmarks. Now you decide where to go, not how to get there. The old knowledge mattered. It was even fun, in its way. But nobody argues we should return to paper maps.</p><p>The primary challenge has always been knowing what to build. Claude Code frees us to focus on that.</p><h2><strong>Year of Agency</strong></h2><p>We are starting 2026 with (mostly) synchronous agents that we need to be present to control. I usually can manage 2-3 sessions at once, though others swear by orchestrating 10+ agents at a time; having them run for hours and hours without any supervision.</p><p>My one AI prediction for this year: by the end of 2026, I believe the frontier will move from synchronous to asynchronous agents by default. Steinberger&#8217;s <a href="https://clawdbot.com/">Clawdbot</a> is a first glimpse.</p><p>What matters now is knowing <strong>what</strong> to build, and having the <strong>agency</strong> to build it. These tools aren&#8217;t evenly distributed yet. Those who harness them effectively will have an edge - for the next few years, at least.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://substack.maxpetretta.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Max's Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>What a generational run by Anthropic. 3.5 was the default choice of ~everyone for almost a full year. I doubt that dynamic will ever repeat.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Peter is honestly a gem, and I&#8217;ve learned so much from his posts and blog. Definitely worth a follow on Twitter.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Our AI agent powered by prediction markets. Check it out <a href="https://bracky.app/home">here</a>!</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>I use <a href="https://zed.dev/">Zed</a>, btw.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p><a href="https://aquavoice.com/">Aqua</a> has been my goto for transcription, but local options appear to be <a href="https://x.com/BHolmesDev/status/2011513814093894128">getting very good</a>.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Website Redesign v3.0]]></title><description><![CDATA[New year, new personal website. We all know the rules.]]></description><link>https://substack.maxpetretta.com/p/website-redesign-v30</link><guid isPermaLink="false">https://substack.maxpetretta.com/p/website-redesign-v30</guid><dc:creator><![CDATA[Max Petretta]]></dc:creator><pubDate>Sun, 11 Jan 2026 00:05:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gIbE!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f5155c-93c1-40f0-ab0e-69876f097a89_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Initially published on <a href="https://maxpetretta.com">maxpetretta.com</a>. Check out the site there!</p></blockquote><h2><strong>Prologue</strong></h2><p>It has been four (!!!) years since I published the <a href="https://github.com/maxpetretta/maxpetretta.com">initial version</a> of this website. Since then, a lot has happened. We now have intelligence (almost) too cheap to meter, and software development has changed more in the last three months than in the ten years that I&#8217;ve been programming.</p><p>I still like having a home online, so I wanted to see what the latest in web tech had to offer. As it turns out, a lot of the things that took so much effort to configure in 2022, <em>just work</em> in 2026, even without the help of magic intelligence in the sky.</p><h2><strong>Astro</strong></h2><p><a href="https://astro.build/">Astro</a> is the magic that makes so much of this easy. With its built-in <a href="https://docs.astro.build/en/guides/markdown-content/">Markdown</a>, <a href="https://docs.astro.build/en/reference/modules/astro-transitions/">Routing</a>, and <a href="https://docs.astro.build/en/guides/syntax-highlighting/">Shiki</a> support, the toughest features in my old Next.js site are covered out-of-the-box.</p><p>Add in the <a href="https://docs.astro.build/en/guides/integrations-guide/mdx/">MDX</a>, <a href="https://docs.astro.build/en/recipes/rss/">RSS</a>, and <a href="https://docs.astro.build/en/guides/integrations-guide/sitemap/">sitemap</a> first-party integrations, and we wind up with a more fully featured site. With significantly less dependencies and lines of code to boot.</p><h2><strong>JavaScript Minimalism</strong></h2><p>My only goal for the v3 revision was to <em>simplify, simplify, simplify</em>. How many lines of code do I need for a landing page + blog, really?</p><ul><li><p>For v1, based on Next.js, the answer was roughly 2000 LoC</p></li><li><p>The unmentioned v2, based on SvelteKit, was 1300 LoC</p></li><li><p>This version, v3 Astro, is just barely over 1000 LoC</p></li></ul><p>Does this <em>actually</em> matter? No. Definitely no. But it makes me happy.</p><h2><strong>A Svelte Detour</strong></h2><p>In early 2024 there was a <a href="https://github.com/maxpetretta/maxpetretta.com/releases/tag/v2.0">v2 redesign</a> I worked on to play with early beta releases of <a href="https://svelte.dev/blog/svelte-5-is-alive">Svelte v5</a> / <a href="https://svelte.dev/blog/sveltekit-2">SvelteKit v2</a>. While Svelte was nice to work with, and a breath of fresh air after being stuck in React-land for so long, it still had it&#8217;s problems.</p><p>Namely, the amount of file juggling that had to be done: should it be a <code>.svelte</code> or <code>.svelte.ts</code>? What about <code>+page.svelte</code>, <code>+page.ts</code>, <code>+page.server.ts</code>, or <code>+layout.svelte</code>? And where do the <code>+error.ts</code> and <code>+server.ts</code> go!?</p><p>Sure, we won&#8217;t have to remember much of this soon. But while I had to build the filetree myself, it was annoying.</p><h2><strong>Design</strong></h2><p>My styles are very <a href="https://ui.shadcn.com/">shadcn</a> inspired, pulling some of it&#8217;s CSS directly since Astro has no native equivalent. I prefer warmer tones these days, which is why I chose stone as the base color and <strong>ultra orange</strong> for an accent.</p><p>I also love the simplification of <a href="https://tailwindcss.com/">Tailwind v4</a>, letting us drop not one, but <em>two</em> root-level configs.</p><p>Design inspiration taken from: <a href="https://leerob.com/">Lee Robinson</a>, <a href="https://paco.me/">Paco Coursey</a>, and <a href="https://emilkowal.ski/">Emil Kowalski</a>.</p><h2><strong>Epilogue</strong></h2><p>Now that the codebase is all in order, the only thing left to do is to write more. I&#8217;ve even created a Substack to send out updates (linked below, if you&#8217;re inclined).</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.maxpetretta.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.maxpetretta.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item></channel></rss>