<script data-pm-proxy="intercept"></script><?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[Bonnie Yu]]></title><description><![CDATA[Ex-Amazon, Microsoft, Smartsheet. Currently a Product Coach. I help PMs grow their careers and tackle life stuff e.g. navigating work as a busy parent, personal finances so you can design the life you want. Connect with me bonnieyu.coaching@gmail.com]]></description><link>https://bonnieyu.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!yZrT!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32c60dbf-254e-48ca-82b4-de437460d55c_747x747.png</url><title>Bonnie Yu</title><link>https://bonnieyu.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 04 Sep 2026 10:47:35 GMT</lastBuildDate><atom:link href="/__u/bonnieyu.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Bonnie Yu]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[bonnieyu@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[bonnieyu@substack.com]]></itunes:email><itunes:name><![CDATA[Bonnie Yu]]></itunes:name></itunes:owner><itunes:author><![CDATA[Bonnie Yu]]></itunes:author><googleplay:owner><![CDATA[bonnieyu@substack.com]]></googleplay:owner><googleplay:email><![CDATA[bonnieyu@substack.com]]></googleplay:email><googleplay:author><![CDATA[Bonnie Yu]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How Staff Engineers Use AI Coding Agents]]></title><description><![CDATA[A conversation with Eric from Dropbox and David from Microsoft on agents, prototypes, review work, and what still needs human judgment]]></description><link>https://bonnieyu.substack.com/p/how-staff-engineers-use-ai-coding</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/how-staff-engineers-use-ai-coding</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Mon, 03 Aug 2026 15:13:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1YAt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>How much has AI actually changed engineering work?</span></p><p><span>That&#8217;s the question I wanted to answer in this interview. I wanted to hear from people working on large production systems, where the agent is not just building a clean prototype from scratch. It has to deal with large codebases, scale, internal tools, on-call incidents, and years of product decisions already baked into the system.</span></p><p><span>For this conversation, I talked to Eric and David, two staff-level engineers with very different backgrounds.</span></p><p><strong><span>Eric Cunningham</span></strong><span> (</span><a href="https://www.linkedin.com/in/eric-cunningham-9a64b136/"><span>LinkedIn</span></a><span>) is a Staff Engineer at Dropbox, where he has spent the last eight and a half years working across desktop UI, platform teams, sharing and permissions, video streaming, content transformation, search connectors, and most recently knowledge graph infrastructure. Before Dropbox, his career has gone from electrical and embedded systems engineer, working on smart home systems, to leading the UI team at Lucid for auto infotainment software.</span></p><p><strong><span>David Kuo</span></strong><span> (</span><a href="https://www.linkedin.com/in/david-kuo/"><span>LinkedIn</span></a><span>) is a Principal Engineer at Microsoft Gaming, where he works on cloud infrastructure for games: telemetry, analytics, multiplayer services, billing, and high-performance networking. He&#8217;s gone from working on data pipelines to billing systems, frontend and backend systems, as both manager and IC roles.</span></p><p><span>We started with the practical setup:</span></p><ul><li><p><span>What coding agents they use?</span></p></li><li><p><span>Which models they trust?</span></p></li><li><p><span>How they decide when to use stronger or cheaper models?</span></p></li></ul><p><span>But the more interesting questions were about how the work itself is changing.</span></p><ul><li><p><span>What happens when AI reviews code before people do?</span></p></li><li><p><span>Are staff engineers actually using loops?</span></p></li><li><p><span>Have expectations changed for PMs? And do prototypes replace PRDs, or do engineers still need written specs?</span></p></li></ul><h1><span>To kick things off, what coding agents and models do you use right now?</span></h1><p><strong><span>Eric:</span></strong><span> I&#8217;m a Claude Code guy, I guess. The space moves super fast, but once I find a workflow that works, there&#8217;s a lot of inertia behind it. Changing is tough.</span></p><p><span>Lately I&#8217;ve been using Opus 4.7 for most things. I like the high-context-window version, the one-million-token version. I pretty much use that for almost everything. It seems like a good balance of cost and performance. I&#8217;m mostly using the command-line tool, and that&#8217;s basically it.</span></p><p><strong><span>David: </span></strong><span>I have personal experience with Claude Code, but at work we&#8217;re basically asked to use Copilot. I use both the GitHub Copilot CLI and the newer desktop app. I&#8217;ve been using them in parallel because they do slightly different things, or at least they feel like they have slightly different capabilities.</span></p><h1><span>How do you decide which model to use?</span></h1><p><strong><span>David: </span></strong><span>As far as models go, in the past month or so I&#8217;ve been using a larger range of models, because of Copilot Automode. Previously I was using almost exclusively Opus 4.6 or Opus 4.7, and occasionally experimenting with GPT models. Often I asked the agent to do the same thing across three different models in parallel so I could compare the outputs. That helped me see which model performed best at what type of task.</span></p><p><span>For system design, and tasks requiring more complex reasoning, I use Opus 4.7 (now 5 as of last week). I use Opus 4.6 for coding and reviewing. I also have started using GPT 5.3 Codex for well defined coding tasks and bug fixes. The mental tax of remembering to switch between models for different tasks has led me to use only a few models regularly.</span></p><p><span>We have access to Claude models, GPT models, and more recently Gemini. Our model selection is a bit more limited by category, but within those categories we have a pretty full breadth of options.</span></p><p><strong><span>Bonnie: So you basically created your own little benchmark. You&#8217;re giving the same task to different models and testing the outputs. What kind of tasks are you using for that?</span></strong></p><p><strong><span>David: </span></strong><span>For example, if I&#8217;m trying to design a new system, I&#8217;ll give it the requirements and parameters and say: spin off three different agents with these specific models, give me the solution each one provides, and do a comparative analysis across the three solutions.</span></p><p><span>What I often see is that two of the models agree on most things. The more interesting part is seeing what they don&#8217;t agree on. I don&#8217;t do that as much now because I feel like I&#8217;ve seen enough to wean away from that approach, although the models change frequently.</span></p><p><span>There&#8217;s an auto mode Copilot got for model selection. </span><a href="https://docs.github.com/en/copilot/concepts/models/auto-model-selection"><span>Copilot Automode</span></a><span> automatically selects the best model for a task. I&#8217;ve been using that more recently to see how good it is. It&#8217;s been fine. It works well enough for delivering things, and the cost has drastically dropped.</span></p><div class="pullquote"><p><strong><span>Bonnie: Do you have a sense of how much your token usage dropped? I believe you were already optimizing for cost yourself</span></strong></p><p><strong><span>David: Almost down to 15 percent of tokens from what I was using.</span></strong><span> What I noticed was that automode used mini a lot for things I had been using stronger models for. Auto mode decided that GPT 5.4 mini was good enough for most of the basic tasks I asked it to do such as searching for information or creating deliverables.</span></p></div><p><span>The cost of switching models is easy mechanically; you toggle it in the UI or pass a command-line switch. The hard part is remembering to switch back and forth. Having it automated makes it easier.</span></p><p><strong><span>Bonnie:</span></strong><span> Claude Code has a command /opusplan where it uses Opus for planning and Sonnet for execution. But I agree: the mental cost of switching models is challenging especially if you want to use Haiku or smaller models like mini. Nowadays with Anthropic and OpenAI, not only do you have to select the model, but also the reasoning effort, so there&#8217;s quite a bit of effort.</span></p><h1><span>How has the engineering workflow changed?</span></h1><p><strong><span>Bonnie:</span></strong><span> I was talking to an engineer at Uber recently, and he said the engineering paradigm has completely changed. His line was basically, &#8220;All I do is live in GitHub comments now.&#8221;</span></p><p><strong><span>It sounds like you both still use the terminal and aren&#8217;t quite in that mode. But I&#8217;m curious: what was your engineering workflow before AI, and what does it look like now? What do you still do by hand, and what do you hand off to AI?</span></strong></p><p><strong><span>Eric:</span></strong><span> I feel like the answer is going to be really different depending on your experience, seniority, and role. For junior and mid-level engineers, their workflow is totally different.</span></p><p><span>For senior engineers, the biggest change for me is that the feedback loops are much tighter now. Before AI, I actually wasn&#8217;t writing that much code. I was mostly architecting systems, working with PMs and leadership to figure out what to build, figuring out how to build it at a high level, and then delegating the execution piece.</span></p><p><span>A lot of that used to mean delegating investigations to different people or different teams. They would go off for a couple days or a week, come back with a proposal, and then we&#8217;d figure out where to go from there.</span></p><p><span>Now I&#8217;m still delegating, but I&#8217;m delegating more of that to AI instead of to a person. Claude can get back to me in a few minutes instead of a few hours or a few days.</span></p><p><span>A lot of what I do in a platform organization is trying to figure out how to surgically insert something into a legacy codebase that&#8217;s already running at scale. A lot of the time, that means reading code or investigating systems. Before, I might call a meeting with someone who built the system or knows a lot about it. Now I can tell Claude: go read this code, figure out where the skeletons are buried, and tell me what the story is.</span></p><p><span>That has reduced my human interaction, which is maybe a negative consequence in some ways. Things move faster, but you&#8217;re not talking to people as much, and sometimes that historical context is necessary.</span></p><p><strong><span>Bonnie&#8217;s note:</span></strong><span> One helpful thing Eric sent me after the interview was an example of the kind of prompt he gives Claude. It&#8217;s helpful to see how he prompts Claude to understand a codebase he hasn&#8217;t worked on before.</span></p><p><span>Sometimes it&#8217;s a simple prompt like:</span></p><div class="callout-block" data-callout="true"><p><span>Tell me how &lt;feature X&gt; works, the UI entry point is &lt;here&gt;.</span></p></div><p><span>But other times, he has a more specific objective in mind, in those cases more context helps him get a better 1-shot response. A concrete example he shared is looking into a pipeline of spark streaming jobs that they wanted to run faster/cheaper. His prompt would be</span></p><p><strong><span>Prompt Example</span></strong></p><div class="callout-block" data-callout="true"><p><span>We have a pipeline of connected spark streaming jobs that are very expensive. The entry point is &lt;file name&gt;, and at a high level it does &lt;short description&gt;.<br></span></p><p><span>Please traverse the pipeline, read the code for the jobs and produce a markdown table with the job name, short description of what it does, inputs/outputs, and some ideas for possible optimization.<br></span></p><p><span>Use &lt;mcp tool&gt; to investigate performance and cost metrics and outline this in the table too.<br></span></p><p><span>Finally, produce a mermaid diagram to help me visualize how all the jobs are connected.</span></p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1YAt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1YAt!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png 424w, /__u/substackcdn.com/image/fetch/$s_!1YAt!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png 848w, /__u/substackcdn.com/image/fetch/$s_!1YAt!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1YAt!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1YAt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png" width="933" height="607" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:607,&quot;width&quot;:933,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!1YAt!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png 424w, /__u/substackcdn.com/image/fetch/$s_!1YAt!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png 848w, /__u/substackcdn.com/image/fetch/$s_!1YAt!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1YAt!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7df13-0e35-49e6-8619-1d8454c56bac_933x607.png 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 aria-hidden="true" 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><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><span>The part I like is that Eric isn&#8217;t asking the agent to &#8220;go investigate&#8221; in a vague way. He gives it an entry point, explains what he&#8217;s trying to optimize, tells it which tools to use, and asks for outputs that are easy to scan.</span></p><p><span>I especially like the Mermaid diagram ask. I use a similar trick when I ask AI to create HTML artifacts from messy technical content. Tables and diagrams make the output much easier to understand than a long wall of text.</span></p><p><strong><span>Bonnie: So are you spending your time differently now?</span></strong></p><p><strong><span>Eric:</span></strong><span> I&#8217;m involved with a lot more execution now than I was before. And by execution, I mean actually producing the system, committing the code, doing the quote-unquote &#8220;real work.&#8221;</span></p><p><span>The other work hasn&#8217;t gone away. As staff and principal engineers, you&#8217;re usually working with multiple teams and multiple products. There&#8217;s still architecture work, writing, leadership, product overlap, and technical input into people&#8217;s decisions.</span></p><p><span>But the rest of the work has been compressed enough that there&#8217;s more room to work on the execution pieces.</span></p><p><strong><span>Bonnie: Are there parts of your workflow where you basically trust AI and don&#8217;t really need to look at it anymore?</span></strong></p><p><strong><span>Eric:</span></strong><span> Pretty much nothing falls into that category for me.</span></p><p><span>If it&#8217;s a very simple bug, like a null pointer exception in the exception logger, I can pretty much trust it to put up a PR to fix that. But for anything with a reasonable level of complexity, I don&#8217;t really trust it.</span></p><blockquote><p><span>In a sufficiently complex system, there are usually a lot of contributing factors. There&#8217;s rarely only one fix. Even as a human, your first instinct isn&#8217;t always right. So there&#8217;s not a lot that falls into the category of &#8220;I&#8217;m just going to let it do its thing and I don&#8217;t care about the output.&#8221;</span></p><p><strong><span>If you&#8217;re building a fairly standard app, like a frontend that reads and writes data to a single database, you can be much more hands-off.</span></strong><span> But when you&#8217;re working on distributed systems running at hundreds of thousands or millions of requests per second, there are a lot of things that can go wrong. There&#8217;s usually more than one way to solve something, and it&#8217;s not easy to be totally hands-off.</span></p><p><span>You wouldn&#8217;t even be hands-off with other engineers you trust. You still bounce ideas off each other. That collaboration is important, and I think the same thing applies to AI.</span></p></blockquote><p><strong><span>Bonnie:</span></strong><span> That makes sense. If you&#8217;re building a simple app for a few people, the stakes are totally different from something serving millions of users.</span></p><p><strong><span>Eric:</span></strong><span> Yeah. I have done straight vibe-coded things for personal projects. I have a friend who organizes vibe-coding parties. It&#8217;s basically a Zoom call where everyone declares what they want to build, then you hang out and build for an hour.</span></p><p><span>One thing I built was a meal-planning tool for my wife and me. Planning what we&#8217;re going to make for the week and going shopping is a pain point for us. I built something that knows our recipes and links to the websites we use for new recipes. I know a million of these things exist, but there were some very specific things I wanted.</span></p><p><span>I was able to vibe-code that in two hours, and we use it on my phone.</span></p><p><span>So that kind of stuff, when the stakes are low, I would trust it. But when the stakes are high, I don&#8217;t trust it.</span></p><div><hr></div><p><strong><span>FYI:</span></strong><span> </span><strong><span>In my AI Builder bootcamp for PMs I teach how to change your approach when building prototypes vs. internal apps vs. public facing apps. </span></strong></p><p><span>The goal of the bootcamp is to help PMs build useful things with AI while learning the fundamentals and understanding what&#8217;s low-risk, what needs review, and how to handle that with AI. Next cohort starts September 1st. </span></p><p><strong><span>Sign up here:</span></strong><span> </span><a href="https://maven.com/bonnie-yu/ai-builder-bootcamp-for-pms">https://maven.com/bonnie-yu/ai-builder-bootcamp-for-pms</a>. </p><p><mark data-color="#ffff00" style="background-color: rgb(255, 255, 0); color: rgb(0, 0, 0);"><span>Use code </span></mark><strong><mark data-color="#ffff00" style="background-color: rgb(255, 255, 0); color: rgb(0, 0, 0);"><span>SUBSTACK30</span></mark></strong><mark data-color="#ffff00" style="background-color: rgb(255, 255, 0); color: rgb(0, 0, 0);"><span> for 30% off.</span></mark></p><div><hr></div><p><strong><span>Bonnie: David, what about you? How do you feel like your engineering workflow has changed?</span></strong></p><p><strong><span>David: </span></strong><span>A lot of my experience is pretty similar to Eric&#8217;s. I definitely produce a lot more commits and changes to the system, whether that&#8217;s bug fixes, design changes, or new features.</span></p><p><span>One of the biggest areas is live-site response. AI has been really powerful for reducing time to mitigation, time to detection, and time to resolving incidents or outages.</span></p><p><span>For us, we use SRE agents. Sometimes by the time I log on to look at a ticket, the agent has already posted an analysis and a proposed solution. That&#8217;s definitely powerful.</span></p><p><span>But the engineer still has to look at the results and the data and make sure it actually makes sense. Did it hallucinate anything? Did it conclude something wrong? That&#8217;s still very important.</span></p><blockquote><p><span>I also think our processes are still immature in terms of making them optimal for AI. One specific example is alerting. We have alerts that fire and tickets that get created when a metric hits a certain threshold. In the human workflow, we adjusted monitors so the on-call engineer wouldn&#8217;t get flooded by incidents. If one widespread issue affected a lot of dimensions, we might increase a hit count instead of creating separate alerts for every dimension. That makes sense for a human. You don&#8217;t want to page someone a hundred times for the same incident.</span></p><p><span>But in the world of AI, that may need to change. The agent might look at one ticket and say, &#8220;I don&#8217;t see any other tickets, so this must be isolated to this one thing.&#8221; It made assumptions based on how we had set up the process.</span></p><p><span>So now we&#8217;re rethinking how alerting should work if AI is helping us. That kind of thinking is starting to carry through the software lifecycle.</span></p></blockquote><p><strong><span>Bonnie&#8217;s note:</span></strong><span> The pattern I&#8217;m hearing from both Eric and David is that AI changes where engineers spend their time. They spend less time doing the first pass of understanding and investigating the system and instead more down the stack, the actual execution. For better or worse, that also means fewer meetings and human interactions where engineers ask around to learn how a system works.</span></p><h1><span>What changes when AI reviews the code too?</span></h1><p><strong><span>Bonnie: Do you have AI review the code before a human looks at it? Or do you have some kind of agent review after a PR gets opened?</span></strong></p><p><strong><span>David: </span></strong><span>We actually had auto reviews for a really long time in our PRs. It wasn&#8217;t AI in today&#8217;s sense, but we always got some code suggestions from some kind of bot. What has changed now is that the newer agents can do reviews at much higher fidelity and quality. For a while, as the reviewer, I would have an agent review a PR before I even looked at it.</span></p><p><span>But now, at least in our organization, people are tired of getting agent comments in their PR. So the mentality has shifted. The person writing the code should run an agent review on their own PR before sending it out. Then, by the time another human is reviewing it, the obvious stuff has already been caught.</span></p><p><strong><span>Bonnie: So the AI review moved earlier in the process.</span></strong></p><p><strong><span>David: </span></strong><span>Yeah. The expectation is that some kind of pass has already been done before you send it out. It reduces the more pedantic issues, like misspellings or poorly named variables.</span></p><p><span>I still think there is value for the person producing the code. Whenever I produce a pull request, I&#8217;ll still toss in that extra review at the end to make sure it looks good at the surface level. But as the reviewer, I don&#8217;t find as much value in running the generic review again, because I expect the author already did that.</span></p><p><span>If five engineers all open the same PR and run the same slash-review command, they&#8217;re probably going to get similar results. So you might as well put that up front, and then the humans can spend their time on the parts of the review that actually matter.</span></p><p><strong><span>Bonnie: That makes sense. Generic review belongs earlier. But what about the more specific things you&#8217;re worried about as a reviewer?</span></strong></p><p><strong><span>Eric:</span></strong><span> I still use AI during code reviews for targeted questions. When I&#8217;m reviewing something, I usually have a few things in mind that I think are dangerous about the area being changed. I&#8217;ll prompt my agent with that context: I&#8217;m specifically worried about these things. Go look at it from this angle.</span></p><p><span>If you just tell Codex to review a PR, it won&#8217;t necessarily know what to look for. You get vastly different results when you give it context about what you&#8217;re worried about.</span></p><p><span>One recent example: someone put up a PR to add a new data source to one of our verifier systems. The specific thing I wanted to know was whether the PR introduced any new database reads, and if so, whether they were batched properly. That can really affect the performance of the verifier.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!R8Vt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!R8Vt!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png 424w, /__u/substackcdn.com/image/fetch/$s_!R8Vt!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png 848w, /__u/substackcdn.com/image/fetch/$s_!R8Vt!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png 1272w, /__u/substackcdn.com/image/fetch/$s_!R8Vt!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!R8Vt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png" width="1456" height="946" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:946,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!R8Vt!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png 424w, /__u/substackcdn.com/image/fetch/$s_!R8Vt!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png 848w, /__u/substackcdn.com/image/fetch/$s_!R8Vt!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png 1272w, /__u/substackcdn.com/image/fetch/$s_!R8Vt!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc361ff5d-7df2-4291-a016-f07fa4e5fcda_2048x1331.png 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 aria-hidden="true" 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><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><span>That&#8217;s the kind of thing I would love for a code review agent to figure out on its own. So the response is: go add this to the documentation. If you&#8217;re going to add a new read, make sure it&#8217;s batched. You can codify that in markdown in the codebase, and then the agent reviewing the code can find it next time.</span></p><p><strong><span>Bonnie: This is how an organization can optimize the workflow for AI. Developers notice what the agent missed, write it in shared markdown for the team, and then the agent can check for it next time, which will lead to better results for the organization.</span></strong></p><p><strong><span>Eric:</span></strong><span> Yeah. You&#8217;re getting increasing value the more you use these automations, because the better the documentation gets, the better the agent gets at finding things.</span></p><p><span>At Dropbox, we&#8217;ve seen substantial improvement in delivery time. But the thing I&#8217;d call out is that coding is only one component of the software development lifecycle.</span></p><p><strong><span>Bonnie:</span></strong><span> That&#8217;s the part I think people sometimes miss. Even if the coding part gets faster, that doesn&#8217;t mean the whole software delivery process becomes instant. What parts of the process still take time?</span></p><p><strong><span>Eric:</span></strong><span> Coding is only one component of the software development lifecycle. You still have QA cycles, safe rollouts, and watching features in production to make sure you&#8217;re not breaking something at scale.</span></p><p><span>The design cycle has compressed, but it&#8217;s not free. You still have design reviews, humans giving feedback, coming to agreement, and unknowns that require people to sit in a room and redesign part of the system.</span></p><p><span>The actual code writing isn&#8217;t free either. It&#8217;s faster, but it still isn&#8217;t free. You still do code reviews. Timelines have shortened, but software delivery isn&#8217;t free.</span></p><p><strong><span>David:</span></strong><span> We&#8217;re still a long way away from never having to look at anything. In fact, we&#8217;ve gone the other direction in some ways. PRs that have AI touch them now require two people to sign off instead of one.</span></p><p><span>Code is cheap now, so you get a lot more PRs. That means the review workflow has to work for you.</span></p><h1><span>Do staff engineers actually use loops?</span></h1><p><span>Boris Cherny, who leads Claude Code at Anthropic, has a quote that has been circulating: &#8220;I don&#8217;t prompt Claude anymore. I have loops that are running. They&#8217;re the ones that are prompting Claude and figuring out what to do. My job is to write loops.&#8221;</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!g-ce!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!g-ce!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png 424w, /__u/substackcdn.com/image/fetch/$s_!g-ce!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png 848w, /__u/substackcdn.com/image/fetch/$s_!g-ce!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png 1272w, /__u/substackcdn.com/image/fetch/$s_!g-ce!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!g-ce!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png" width="1456" height="486" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:486,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!g-ce!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png 424w, /__u/substackcdn.com/image/fetch/$s_!g-ce!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png 848w, /__u/substackcdn.com/image/fetch/$s_!g-ce!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png 1272w, /__u/substackcdn.com/image/fetch/$s_!g-ce!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F347ed23f-f017-42d0-8471-e894be90a88e_2048x683.png 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 aria-hidden="true" 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><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><span>The basic idea is that instead of prompting the agent step by step, you define the goal, the exit criteria, and the verification process. Then the agent keeps working until it reaches the goal.</span></p><p><strong><span>Bonnie: Do you use loops?</span></strong></p><p><strong><span>David:</span></strong><span> I don&#8217;t really use loops. I tried it out and experimented with it.</span></p><p><span>For work specifically, I think the problem is that I deal with a lot of legacy code. Loop engineering works great if you want to build something from scratch and you have a clear goal. You can give the agent more free rein to do the whole thing.</span></p><p><span>Where you get problems with legacy code is poor documentation or quirky behavior that came from tribal knowledge. Those are the parts that feel most dangerous to let the agent loop on by itself until the end.</span></p><p><span>Documentation alone also isn&#8217;t sufficient. If something is already implemented, the agent may not understand the downstream impact of changing it. Sometimes there&#8217;s a weird condition in the code because of one problem that happened years ago, and nobody remembers except the person who put it in.</span></p><p><span>Loop engineering means you trust the AI enough to keep going until it finishes. I don&#8217;t have that level of trust right now. I would still want to check in every so often, or at least every iteration.</span></p><h1><span>How do you deal with new AI trends like Loops?</span></h1><p><strong><span>Eric:</span></strong><span> I have a lot of AI fatigue when it comes to new features, new tools, new workflows, and new trends. That contributes to the inertia I mentioned earlier.</span></p><p><span>When subagents came out, there was this whole trend of telling your agent to spin off subagents and building workflows around how to use them. Then two weeks later, you didn&#8217;t need to do it manually anymore. It just became something the agents did on their own.</span></p><div class="pullquote"><p><span>So I think it&#8217;s good to be aware of the cutting edge and what people are finding useful. But you can also drive yourself crazy trying to stay at the absolute bleeding edge, when if you wait two weeks, it might just become the default behavior in your agent anyway.</span></p></div><h1><span>Have your expectations of PMs changed? Are PMs and engineers starting to cross over more?</span></h1><p><strong><span>Eric:</span></strong><span> I expected there to be a lot more crossover than I&#8217;ve actually seen. I thought PMs would be doing more engineering work and engineers would be doing more PM work.</span></p><p><span>But at least in my sphere, people are mostly sticking to their roles and using AI to automate their part of the work. PMs might use AI for customer research, feedback analysis, market research, or writing PRDs. They&#8217;re finding ways to automate their own job.</span></p><p><span>I haven&#8217;t seen as much PM-building type work as I expected.</span></p><p><strong><span>David:</span></strong><span> In our org, I feel like there is more crossover from engineering into PM work than PMs doing engineering work.</span></p><p><span>For example, I wrote a product spec two weeks ago because I needed one.</span></p><p><span>For the PMs, my expectation is that they focus on the core PM responsibilities. They don&#8217;t need to do extra stuff just because AI exists. But AI should make them more self-sufficient.</span></p><p><span>If they need information or data, they should be able to get more of that themselves without asking the engineering team, unless it&#8217;s a permissions issue.</span></p><p><strong><span>Bonnie:</span></strong><span> So basically: don&#8217;t ask engineering to pull a query for you if AI can help you do it.</span></p><p><strong><span>Eric:</span></strong><span> Yeah. If I&#8217;m writing a Hive query, I don&#8217;t write Hive queries anymore. I ask the Databricks query builder:</span></p><p><span>here&#8217;s what I want from this table, go get it for me.</span></p><p><strong><span>David:</span></strong><span> The same thing applies to documentation. On the billing side, there are a lot of nuanced business rules. Before, engineering would get asked because one other person and I had the historical context.</span></p><p><span>We baked that into documentation. Now I would expect someone in our product area to be able to ask: I want to bill for this feature. How would I do it?</span></p><p><span>Maybe we still do a final review at the end, but they should be much more self-sufficient.</span></p><h1><span>Do prototypes replace PRDs?</span></h1><p><strong><span>Bonnie:</span></strong><span> There&#8217;s a common idea in PM circles right now that PMs should stop writing PRDs and build prototypes instead. Maybe there&#8217;s a one-pager for context, but the prototype becomes the artifact. The requirements are baked into the interactions.</span></p><p><span>What do you think?</span></p><p><strong><span>David:</span></strong><span> What exactly are you handing me if you give me a prototype?</span></p><p><span>Are you handing me how the UI looks? Are you handing me all the interactions with the database too? Are the APIs properly constructed? Did we capture all the requirements?</span></p><blockquote><p><span>&#8220;An interactive prototype is cool. It can help communicate your point. But that&#8217;s usually not the part that&#8217;s unclear in a PRD. The things engineers spend time spinning on are the rough edges. What do people care about? How should it behave in different circumstances? I can visualize from a static image how something should look and feel. What I can&#8217;t always imagine is what matters for all customers and how it should behave in all cases.&#8221;</span></p></blockquote><p><strong><span>Eric:</span></strong><span> Part of the challenge is that real products have a lot of behavior that is hard to capture in a prototype. At Dropbox, for example, say we want to build a new feature that writes some new data to your Dropbox. What happens when that user has exceeded their quota? Does the behavior change? Do we upsell there? What does that look like?</span></p><p><span>That&#8217;s the stuff I need to see in the PRD. I don&#8217;t generally see all of that in a prototype.</span></p><p><strong><span>David:</span></strong><span> The main issue with prototypes is that when you hand over something interactive, I don&#8217;t know what is intentional and what is approximate. If there&#8217;s odd behavior in the prototype, is that by design or is it just not handled properly? Should the engineering team copy it, fix it, or get rid of it?</span></p><p><span>That&#8217;s the danger. It looks close to the product. It has the wow factor. But you can&#8217;t build off of it directly without anything else.</span></p><p><strong><span>Bonnie:</span></strong><span> So you still want some version of a PRD.</span></p><p><strong><span>David:</span></strong><span> I want some level of documentation. Maybe the format is different than a traditional PRD, and I don&#8217;t want it to be verbose.</span></p><p><span>With AI, some requirements docs have become huge. Then I have to summarize them with AI, which defeats the purpose.</span></p><p><span>I want things to be more succinct. Maybe prototypes augment the PRD, and the PRD can be much smaller. But I don&#8217;t want the documentation to go away completely.</span></p><p><strong><span>Bonnie</span></strong><span> That last point is probably the part PMs should pay the most attention to.</span></p><p><span>AI can help us write specs, build prototypes, pull data, and get unstuck faster. But the hard work of clarifying the product behavior does not go away</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!w0DY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!w0DY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png 424w, /__u/substackcdn.com/image/fetch/$s_!w0DY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png 848w, /__u/substackcdn.com/image/fetch/$s_!w0DY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png 1272w, /__u/substackcdn.com/image/fetch/$s_!w0DY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!w0DY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png" width="1456" height="946" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:946,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!w0DY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png 424w, /__u/substackcdn.com/image/fetch/$s_!w0DY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png 848w, /__u/substackcdn.com/image/fetch/$s_!w0DY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png 1272w, /__u/substackcdn.com/image/fetch/$s_!w0DY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29cc7d2d-9f2c-4641-98dd-9bd7b77a35f0_2048x1331.png 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 aria-hidden="true" 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><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><h2><span>Here are my biggest takeaways from the conversation</span></h2><p><strong><span>1. Prototypes alone should not replace PRDs.</span></strong></p><p><span>While PM circles are pushing hard on prototypes, engineers are more hesitant. What Eric and David found is that prototypes usually show the happy path, not what eats up engineers&#8217; time when looking at specs: the unhappy paths like errors, quota limits, billing rules, upsells, and permissions.</span></p><p><span>Engineers still want to see some form of documentation. Maybe it&#8217;s a PRD, maybe it&#8217;s not.</span></p><p><strong><span>2. PMs still need to do PM work, but AI should make them more self-sufficient.</span></strong></p><p><span>Eric and David both said the PM role has not changed as much as people might expect. PMs are still doing customer research, feedback analysis, market research, and PRDs. But now PMs should be more self-sufficient. If a PM needs a query, a data pull, or an explanation of documented business rules, PMs can use AI to handle that instead of asking engineering.</span></p><p><strong><span>3. AI changes where staff engineers spend their time.</span></strong></p><p><span>The first-pass investigation work is increasingly going to AI. Eric used to delegate investigations to people or teams and wait hours or days. Now he can ask Claude to read the code, find the weird parts, and come back in minutes. That is pulling staff engineers closer to execution. AI did not remove architecture work, writing, or leadership work. But it compressed enough of the surrounding work that staff engineers now have more room to build, commit code, and stay closer to the implementation.</span></p><p><strong><span>4. Organizations need to update workflows for AI.</span></strong></p><p><span>David&#8217;s alerting example is the one I keep coming back to. Their process collapsed duplicate alerts so on-call engineers would not get flooded. That made sense for the team. But the SRE agent saw one ticket, did not see the duplicate incidents, and assumed the problem was isolated. The workflow was hiding information the agent needed.</span></p><p><strong><span>5. Documentation compounds the value of the agent.</span></strong></p><p><span>When someone notices what the agent missed, they should write it down in a shared markdown so the next agent review has more context. That is how an organization can optimize the workflow for AI. But there is obviously a balance here.</span></p><p><span>The tricky part is getting enough rules written down so agents don&#8217;t miss critical system context. If every preference turns into a rule, the markdown file gets bloated, fills up the context window, and can box the model in too much. The critical system-specific rules that AI isn&#8217;t likely to know on its own should be written down so people do not have to rely on every reviewer remembering the same gotchas.</span></p><p><strong><span>6. AI review is moving earlier, but targeted review still matters.</span></strong></p><p><span>The generic AI review should happen before a PR gets sent out. That catches spelling, naming, and surface-level issues earlier, so reviewers can spend less time on the obvious stuff. But generic review is not the same as judgment. Eric&#8217;s example made this concrete: &#8220;Review this PR&#8221; is less useful than &#8220;I&#8217;m worried this change adds new database reads. Check whether they are batched properly.&#8221; The more specific the concern, the more useful the agent review.</span></p><p><strong><span>7. Code review is eating more of engineers&#8217; time.</span></strong></p><p><span>This is the counterpoint to the simple &#8220;AI makes engineering faster&#8221; story. Code is cheaper to produce, so there are more PRs. In David&#8217;s case, AI-touched PRs now require two human sign-offs instead of one. AI shifts time away from writing code and toward reviewing the code that gets produced.</span></p><p><strong><span>8. Copilot makes cheaper models easier to use, something Anthropic and OpenAI aren&#8217;t as incentivized to do</span></strong></p><p><span>Model routing already exists. The interesting question is who is incentivized to use it aggressively to bring costs down. David said Copilot auto mode brought his usage down to about 15 percent of what he was using, even though he was already trying to manage model cost himself. Frontier labs like Anthropic and OpenAI do this too to an extent. But they aren&#8217;t quite as incentivized. This is a place where products like Copilot can save money for customers by routing easier work to smaller models and remove the mental overhead of switching models manually.</span></p><p><span>A few API pricing examples as comparison:</span></p><ul><li><p><span>GPT-5.4 is $2.50 input / $15 output per 1M tokens. GPT-5.4 mini is $0.75 input / $4.50 output, </span><strong><span>about 3.3x cheaper on input</span></strong><span>.</span></p></li><li><p><span>Claude Sonnet 4.6 is $3 input/ $15 output. Claude Haiku 4.5 is $1 input / $5 output, about 3x cheaper on input.</span></p></li></ul><p><span>The provider routing point matters too. If Copilot can route between OpenAI, Anthropic, and its own smaller models, it has more room to pick the cheapest good-enough model for a task. GPT-5.4 mini is 25% cheaper than Haiku.</span></p><p><a href="https://developers.openai.com/api/docs/models/gpt-5.4"><span>OpenAI GPT-5.4 model pricing</span></a></p><p><a href="https://claude.com/pricing"><span>Anthropic Claude pricing</span></a></p><p><strong><span>9. Loops work better when the work is contained.</span></strong></p><p><span>Loops make sense when the goal is clear and the success criteria are easy to check. Build this app. Fix this small bug. Run the tests. Keep going until they pass. That is different from changing a large production system where the hard part is knowing what else might break.</span></p><p><strong><span>10. AI fatigue is real, even for staff engineers.</span></strong></p><p><span>I liked Eric&#8217;s point about AI fatigue. There are new features, new workflows, and new &#8220;best practices&#8221; every few weeks. Some of them are worth changing your workflow for. A major model upgrade might be one of those moments. But a lot of smaller workflow tricks may get absorbed into the product pretty quickly. So the work is partly figuring out what is worth learning now, and what you can wait on because the agent may just start doing it by default.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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><p></p>]]></content:encoded></item><item><title><![CDATA[AI Code Reviews for PMs: Ship Code You Can Trust]]></title><description><![CDATA[Set up automated PR reviews with Claude Code or Codex, from slash commands to GitHub Actions]]></description><link>https://bonnieyu.substack.com/p/how-to-add-code-reviews-to-your-ai</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/how-to-add-code-reviews-to-your-ai</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Mon, 13 Jul 2026 18:05:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3eIM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI coding agents have made it possible for anyone to build and ship their own apps. If you&#8217;re building a prototype, you can move fast with a lightweight workflow. When I build prototypes, I don&#8217;t care about code. But when you&#8217;re building something that will ship to real users, code reviews should be part of your workflow. You want the app to be reliable, secure, and easy to maintain.</p><p>The good news: AI tools have made code reviews surprisingly easy to set up. In this tutorial, I&#8217;ll walk through the two main ways to add them to your workflow, how to set up each one, and the trade-offs I&#8217;ve found as I&#8217;ve been building my own projects.</p><p>Along the way, we&#8217;ll:</p><p><span>&#8226; </span>Run instant reviews with slash commands (<span>/code-review</span> in Claude Code, <span>/review</span> in Codex)</p><p><span>&#8226; </span>Set up a GitHub Action so every pull request gets reviewed automatically</p><p><span>&#8226; </span>Talk about how much of this loop I automate</p><p><span>&#8226; </span>Have a different model review your code</p><p><span>&#8226; </span>Compare Slash Commands vs. Github Actions and which I prefer</p><p>I&#8217;ll cover both Claude Code and Codex. Each section labels the steps for each agent, so you can jump straight to the one you use.</p><p>BTW if terms like pull request or feature branch are new to you, start with <a href="/__u/bonnieyu.substack.com/p/prototype-challenge-building-on-chatgpt">my earlier tutorial</a>, where I explain those concepts. TLDR: the AI agent writes code in a separate place (&#8220;feature branch&#8221;), then ask for a code review (&#8220;pull request&#8221;) before merging it into the main codebase.</p><h2>Why code reviews?</h2><p>Code review is a standard practice on every professional engineering team, and the reasons apply just as much to AI-generated code:</p><p><span>&#8226; </span><strong>Catching bugs before users do.</strong> AI agents are good at making code that works in the happy path, and less good at edge cases, race conditions, and &#8220;what happens when the input is empty.&#8221;</p><p><span>&#8226; </span><strong>Security.</strong> Leaked API keys, unvalidated inputs, and permissions that are too broad are exactly the kinds of issues a reviewer catches and a demo doesn&#8217;t.</p><p><span>&#8226; </span><strong>Consistency.</strong> As your project grows, reviews keep new code following the patterns you&#8217;ve already established.</p><p>You don&#8217;t need to be able to write or review this code yourself. There are tools that will do the review for you, and it&#8217;s easy to make them part of your workflow.</p><h2>Your two main options</h2><p>There are two ways to get AI code reviews into your workflow:</p><p><span>1. </span><strong>Slash commands inside your coding agent.</strong> Claude Code has <a href="https://github.com/anthropics/claude-code/tree/main/plugins/code-review"><span>/code-review</span></a>, and Codex has a <a href="https://github.com/openai/codex"><span>/review</span></a> command. You run them in your session, and the review happens right there. The nice thing is it&#8217;s all built in! It used to be you&#8217;d have to install it yourself.</p><p><span>2. </span><strong>A GitHub Action.</strong> Both <a href="https://github.com/anthropics/claude-code-action">Anthropic</a> and <a href="https://github.com/openai/codex-action">OpenAI</a> provide official actions that automatically review every pull request and post comments directly on GitHub. It&#8217;s basically a YAML file you can add to your repository. You can use theirs or ask your agent to create one for you.</p><p>(If you&#8217;re on a Claude Team or Enterprise plan, Anthropic also launched a managed <a href="https://code.claude.com/docs/en/code-review">Code Review service</a>, a GitHub App you enable in admin settings with no YAML at all. Most solo builders won&#8217;t have access to this, so I&#8217;ll focus on the two options above.)</p><p>Let&#8217;s set up both, starting with the simpler one.</p><h2>Option 1: Slash commands</h2><h3>In Claude Code</h3><p>Type <span>/code-review</span> and Claude reviews the code changes you&#8217;ve been working on. You don&#8217;t need to have a pull request open. By default it looks at the changes on your current branch, but you can also point it at a specific pull request, branch, or file.</p><p>There are two options I find useful: <span>--comment</span> posts the findings onto your pull request so there&#8217;s a record of them, and <span>--fix</span> has Claude fix the issues it finds.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!evyJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!evyJ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png 424w, /__u/substackcdn.com/image/fetch/$s_!evyJ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png 848w, /__u/substackcdn.com/image/fetch/$s_!evyJ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png 1272w, /__u/substackcdn.com/image/fetch/$s_!evyJ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!evyJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png" width="780" height="105" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a08dc37e-a458-41fa-8110-39fd5b920904_780x105.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:105,&quot;width&quot;:780,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!evyJ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png 424w, /__u/substackcdn.com/image/fetch/$s_!evyJ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png 848w, /__u/substackcdn.com/image/fetch/$s_!evyJ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png 1272w, /__u/substackcdn.com/image/fetch/$s_!evyJ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08dc37e-a458-41fa-8110-39fd5b920904_780x105.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>In Codex</h3><p>Type <span>/review</span> and Codex gives you a menu of choices: review your changes against the main branch (this is the pull request style review), review changes you haven&#8217;t committed yet, review a specific commit, or write your own instructions like &#8220;focus on security vulnerabilities.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!DX0Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!DX0Q!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png 424w, /__u/substackcdn.com/image/fetch/$s_!DX0Q!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png 848w, /__u/substackcdn.com/image/fetch/$s_!DX0Q!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DX0Q!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!DX0Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png" width="780" height="225" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:225,&quot;width&quot;:780,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!DX0Q!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png 424w, /__u/substackcdn.com/image/fetch/$s_!DX0Q!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png 848w, /__u/substackcdn.com/image/fetch/$s_!DX0Q!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DX0Q!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F838d045e-5f6a-466f-a1c4-440b50f54d85_780x225.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Two things I like about the slash command approach:</strong></p><p><span>&#8226; </span><strong>It uses your subscription.</strong> The review costs subscription tokens like any other request, so you don&#8217;t need to set up an API key or separate billing.</p><p><span>&#8226; </span><strong>Your coding agent sees the results immediately.</strong> The findings land in the same chat session, so you can say &#8220;fix the first two issues&#8221; and keep moving.</p><blockquote><p><strong>Tip:</strong> You can learn a lot from reading how other people prompt their agents. Anthropic publishes the <a href="https://github.com/anthropics/claude-code/blob/main/plugins/code-review/commands/code-review.md">prompt behind /code-review</a> on GitHub. <br><br>Codex&#8217;s built-in /review prompt isn&#8217;t published as a standalone file, but OpenAI publishes a similar <a href="https://github.com/openai/codex-plugin-cc/blob/main/plugins/codex/commands/review.md">review command</a> in their codex-plugin-cc repo (a plugin that lets you run Codex reviews from inside Claude Code). Their <a href="https://github.com/openai/codex-plugin-cc/blob/main/plugins/codex/commands/adversarial-review.md">adversarial review version</a> is a fun read too: it challenges the implementation approach and design choices instead of just hunting for bugs.</p></blockquote><h3>Running the reviews automatically</h3><p>You can run these commands yourself whenever you want a review, or you can have your coding agent run them automatically after each pull request. There are two ways to set that up:</p><p><span>&#8226; </span><strong>Add a note to your CLAUDE.md or AGENTS.md</strong>, something like &#8220;after opening a pull request, run a code review.&#8221; This is the simplest option, but instructions like this rely on the agent remembering to follow them.</p><p><span>&#8226; </span><strong>Set up a hook.</strong> Both <a href="https://code.claude.com/docs/en/hooks">Claude Code</a> and <a href="https://developers.openai.com/codex/hooks">Codex</a> support hooks, which let you run your own logic at specific points in the agent&#8217;s workflow. A hook that fires whenever the agent runs <span>gh pr create</span> can trigger the review every time, deterministically.</p><h2>Option 2: A GitHub Action</h2><p>The second approach moves the review to GitHub itself.</p><p>GitHub Actions is a CI/CD system built into GitHub. You add a YAML file to <span>.github/workflows/</span> in your repo, and GitHub runs it automatically when events happen, like a PR being opened or updated. <br></p><p>For code review, the action reads your PR diff and posts comments directly on the PR.</p><blockquote><p><strong>Note:</strong> CI/CD (Continuous Integration / Continuous Deployment) is the automation engineering teams use to run checks like tests, builds, and reviews on every code change.</p><p>YAML is a language usually used for writing configuration files and exchanging data. You see it in a lot of places for example at the top of agent and skill files!</p></blockquote><h3>Claude Code: setting up the Code Review Action</h3><p>There are three setup steps. I&#8217;ll walk through them so you understand what&#8217;s being set up, but you can always ask your coding agent to do this part for you. I had Claude Code create the workflow file and walk me through the rest.</p><p><strong>Step 1: Add your API key as a GitHub secret (one-time, manual)</strong></p><p>The action needs an Anthropic API key, which means the reviews are billed separately from your Claude subscription (more on that trade-off later). Get a key from <a href="https://console.anthropic.com">console.anthropic.com</a>, then:</p><p><span>1. </span>Go to your repo on GitHub</p><p><span>2. </span>Settings &#8594; Secrets and variables &#8594; Actions &#8594; New repository secret</p><p><span>3. </span>Name: <span>ANTHROPIC_API_KEY</span>, Value: your key</p><p><span>4. </span>Click Add secret</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!3eIM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!3eIM!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png 424w, /__u/substackcdn.com/image/fetch/$s_!3eIM!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png 848w, /__u/substackcdn.com/image/fetch/$s_!3eIM!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3eIM!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!3eIM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png" width="781" height="446" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:446,&quot;width&quot;:781,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!3eIM!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png 424w, /__u/substackcdn.com/image/fetch/$s_!3eIM!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png 848w, /__u/substackcdn.com/image/fetch/$s_!3eIM!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3eIM!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea40a913-3ea5-4d2d-905f-505795c6ef6c_781x446.png 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 aria-hidden="true" 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><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><strong>Step 2: Add the workflow file</strong></p><p>Create <span>.github/workflows/claude-review.yml</span>. Here&#8217;s what mine ended up looking like:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;89e9861b-fa5e-4a70-8517-f60eb7de08b8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">name: Claude Code Review

on:
 pull_request:
 types: [opened, synchronize]
 issue_comment:
 types: [created]

jobs:
 claude-review:
 if: |
 github.event_name == &#8216;pull_request&#8217; ||
 (github.event_name == &#8216;issue_comment&#8217; &amp;&amp; contains(github.event.comment.body, &#8216;@claude&#8217;))
 runs-on: ubuntu-latest
 permissions:
 contents: read
 pull-requests: write
 id-token: write
 steps:
 - uses: actions/checkout@v4
 with:
 fetch-depth: 0
 - uses: anthropics/claude-code-action@v1
 with:
 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
 # track_progress makes the action create a tracking/summary PR comment up
 # front and grant the inline + summary comment tools automatically. Without
 # it the run auto-detects &#8220;agent&#8221; mode, Claude reviews but is DENIED
 # permission to post (permission_denials_count &gt; 0) and nothing appears.
 # (use_sticky_comment is a v0 input the v1 action ignores &#8212; do not rely on it.)
 track_progress: true
 # Do NOT set a custom --allowedTools here: it overrides the action&#8217;s
 # defaults and can strip the read/comment tools Claude needs. Let
 # track_progress provision them.
 prompt: |
 Review this pull request. Check for bugs, security issues, and TypeScript type errors.
 Post inline comments on specific lines where you find issues using the inline comment
 tool. When you are done, ALWAYS post a PR comment summarizing your review: what you
 checked, any issues found (with severity), and an overall verdict (approved / needs
 changes). If no issues were found, say so explicitly.
 claude_args: --model claude-sonnet-4-6</code></pre></div><p></p><p>The comments in that file came from my own trial and error. The big one: keep <span>track_progress: true</span>. Without it, Claude does the review but gets denied permission to post the comments, so nothing shows up on your PR.</p><p><strong>Step 3: Push the workflow file to your repo</strong></p><p>The workflow file needs to land on your main branch before the action starts working:</p><p><span>git add .github/workflows/claude-review.yml</span><br><span>git commit -m &#8220;Add Claude Code Review GitHub Action&#8221;</span><br><span>git push</span></p><p>If those git commands are unfamiliar, this is another spot where you can ask your coding agent to commit and push the file for you.</p><blockquote><p><strong>Gotcha: if you add the workflow file through a pull request, your first PR will show a &#8220;workflow validation&#8221; error. This is normal.</strong> When I first set this up, the action skipped with an error about workflow validation. The action will only run if the workflow file on your main branch matches the one in the PR. </p><p>This is a security rule that prevents someone from submitting a malicious PR that edits the workflow to steal your API key. Since you&#8217;re adding the workflow file <em>in</em> a PR, it doesn&#8217;t exist on main yet, so it skips. </p><p>Just merge the PR. Once the workflow file lands on main, every future PR triggers reviews normally.</p></blockquote><h3>Codex: setting up the Codex Action</h3><p>The Codex version is nearly identical: add an <span>OPENAI_API_KEY</span> secret (same steps as above), then create <span>.github/workflows/codex-review.yml</span>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;eee31e19-6c7f-47a1-80f5-fd3571c4d7d2&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">name: Codex PR Review
on:
 pull_request:
 types: [opened, synchronize]
jobs:
 codex-review:
 runs-on: ubuntu-latest
 permissions:
 pull-requests: write
 steps:
 - uses: openai/codex-action@v1
 with:
 openai_api_key: ${{ secrets.OPENAI_API_KEY }}
 prompt: &#8220;Review this PR for bugs, type issues, and style violations per AGENTS.md.&#8221;</code></pre></div><h2>What a review looks like</h2><p>Once the workflow file is on main, setup is done. Every new pull request triggers a review automatically. Here&#8217;s what that looks like with the Claude action on one of my projects. You&#8217;ll see a &#8220;Claude Code Review&#8221; check appear alongside your other checks:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!f6nD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!f6nD!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png 424w, /__u/substackcdn.com/image/fetch/$s_!f6nD!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png 848w, /__u/substackcdn.com/image/fetch/$s_!f6nD!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png 1272w, /__u/substackcdn.com/image/fetch/$s_!f6nD!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!f6nD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png" width="779" height="289" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:289,&quot;width&quot;:779,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!f6nD!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png 424w, /__u/substackcdn.com/image/fetch/$s_!f6nD!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png 848w, /__u/substackcdn.com/image/fetch/$s_!f6nD!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png 1272w, /__u/substackcdn.com/image/fetch/$s_!f6nD!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5395dba3-db92-4eea-8124-d4b3be04a479_779x289.png 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 aria-hidden="true" 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><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>A few minutes later, Claude posts its review: what it checked, what it found, and whether previous findings were resolved:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!WNGv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!WNGv!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png 424w, /__u/substackcdn.com/image/fetch/$s_!WNGv!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png 848w, /__u/substackcdn.com/image/fetch/$s_!WNGv!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png 1272w, /__u/substackcdn.com/image/fetch/$s_!WNGv!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!WNGv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png" width="779" height="475" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:475,&quot;width&quot;:779,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!WNGv!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png 424w, /__u/substackcdn.com/image/fetch/$s_!WNGv!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png 848w, /__u/substackcdn.com/image/fetch/$s_!WNGv!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png 1272w, /__u/substackcdn.com/image/fetch/$s_!WNGv!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1999ee76-2475-4e1a-a55b-f84736e0722b_779x475.png 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 aria-hidden="true" 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><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>At the end, I asked it to provide a summary of what to do:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lztu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lztu!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png 424w, /__u/substackcdn.com/image/fetch/$s_!lztu!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png 848w, /__u/substackcdn.com/image/fetch/$s_!lztu!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lztu!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lztu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png" width="780" height="190" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:190,&quot;width&quot;:780,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!lztu!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png 424w, /__u/substackcdn.com/image/fetch/$s_!lztu!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png 848w, /__u/substackcdn.com/image/fetch/$s_!lztu!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lztu!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27eb299c-975d-4841-8999-fbdb21a46a6c_780x190.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>You can also talk to the reviewer. Type &#8220;@claude fix the type errors here&#8221; in a PR comment and it will respond, and it can even push a fix commit if you give it write permissions. It reads your CLAUDE.md for project guidelines.</p><p>It&#8217;s also nice that I get email notifications with the summary, so I can see the review on my phone:</p><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BpdD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BpdD!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png 424w, /__u/substackcdn.com/image/fetch/$s_!BpdD!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png 848w, /__u/substackcdn.com/image/fetch/$s_!BpdD!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BpdD!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BpdD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png" width="779" height="344" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:344,&quot;width&quot;:779,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!BpdD!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png 424w, /__u/substackcdn.com/image/fetch/$s_!BpdD!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png 848w, /__u/substackcdn.com/image/fetch/$s_!BpdD!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BpdD!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91409aac-117f-4342-8b2a-d12afc10fcb2_779x344.png 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 aria-hidden="true" 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><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><blockquote><p><strong>FYI I'm running an AI Builder Bootcamp for PMs on Maven, built around the same idea as this post: the fastest way to learn AI is to build something real. We ship two apps and build agent workflows together. <a href="https://maven.com/bonnie-yu/ai-builder-bootcamp-for-pms?utm_source=substack&amp;utm_campaign=code-reviews-post">Join the waitlist</a> to hear when the next cohort opens.</strong></p></blockquote><h2>How much of the code review loop should you automate?</h2><p>The Action automates the review itself, but the results land on GitHub, and the coding agent on your machine (the one that wrote the code) doesn&#8217;t know the review exists. The next step is to get the code review results back to your agent. There are 3 ways to do so:</p><p><span>1. </span><strong>Ask your agent to check.</strong> After pushing, tell Claude Code: &#8220;check the review comments on my PR.&#8221; It runs <span>gh pr view --comments</span> and pulls the findings into your session, where it can start fixing them. You can add this to your CLAUDE.md so it happens as part of your normal flow.</p><p><span>2. </span><strong>Reply on the PR itself.</strong> Because the Claude action is interactive, you can comment &#8220;@claude fix the issues from this review&#8221; right on GitHub, and it will respond, and even push a fix commit if you&#8217;ve given it write permissions. You never leave the browser.</p><p><span>3. </span><strong>Automate it with a hook or script.</strong> This is the more advanced version of the first option. Instead of you asking, a hook in your coding agent (or a small script) can fetch the review results with the GitHub CLI after each push and hand them to your agent to act on.</p><p>#3 fully automates the code review loop. Every PR gets reviewed, your agent reads the findings and pushes fixes, and it repeats until the review comes back clean.</p><p>The question is: should you take yourself out of the loop entirely?</p><p>I keep myself in the loop. Part of the reason is tokens. If every PR automatically triggers a review, and every review automatically triggers fixes, you can burn a lot of tokens going back and forth on small nitpick findings or on tiny changes that didn&#8217;t need a review in the first place. The other part is I want to understand what didn&#8217;t work well. It helps me internalize how well each of the models work.</p><p>So my workflow is: the review runs automatically, and I decide what&#8217;s worth fixing. How closely I read the findings depends on how important the code is.</p><h2>Have a different model review the code</h2><p>So far, the same model that wrote the code has also been reviewing it. Claude reviewing Claude&#8217;s code can share the same blind spots. Using another model to critique another is one of my favorite AI workflows. I&#8217;ve used it for <a href="/__u/bonnieyu.substack.com/p/building-an-ai-pm-interview-site">reviewing architecture plans</a>, and it applies just as well to code reviews. A different model is closer to a real second opinion.</p><p>You can set this up with either option:</p><p><span>&#8226; </span><strong>With slash commands.</strong> If Claude Code is your primary agent, OpenAI publishes <a href="https://github.com/openai/codex-plugin-cc">codex-plugin-cc</a>, a plugin that adds a <span>/codex:review</span> command to Claude Code. Claude writes the code, and Codex reviews it, without you leaving your session. There&#8217;s also a simpler version that I&#8217;ve used: open Codex (or Gemini) in a second terminal and ask it to review your changes.</p><p><span>&#8226; </span><strong>With the GitHub Action.</strong> The actions don&#8217;t care which agent wrote the code. If you build with Claude Code, you can set up codex-action as your reviewer, or the other way around.</p><h2>Slash command vs. GitHub Action: pros and cons</h2><p><strong>Slash commands</strong></p><p><strong>Pros:</strong></p><p><span>&#8226; </span>The reviews use your subscription tokens like any other request, so you don&#8217;t need to set up an API key or separate billing</p><p><span>&#8226; </span>Your coding agent sees the review output immediately, so you can ask it to start fixing issues right away</p><p><span>&#8226; </span>You can review before you even push, including uncommitted changes, so you catch issues while you&#8217;re still working</p><p><strong>Cons:</strong></p><p><span>&#8226; </span>The review results only show up in the chat with your coding agent. If you&#8217;re working with someone else on the project, they won&#8217;t see any of the findings unless you post them to the pull request with <span>--comment</span></p><p><span>&#8226; </span>The review only runs when you remember to run it, or when you&#8217;ve set up a hook to run it for you</p><p><span>&#8226; </span>The review comes from the same model that wrote the code. To be fair, <span>/code-review</span> spins up fresh reviewer agents, so it&#8217;s not reviewing its own chat history. But Claude reviewing Claude&#8217;s code can still share the same blind spots, which is why I like having a different model do the review</p><p><strong>GitHub Action</strong></p><p><strong>Pros:</strong></p><p><span>&#8226; </span>Reviews run on every PR automatically, so nothing depends on you remembering</p><p><span>&#8226; </span>All the review comments and notes are on GitHub, attached to the PR. If you&#8217;re working with someone else on the project, they can see the same review comments and history you do</p><p><span>&#8226; </span>With the Claude action, you can reply to the review right on the PR with @claude</p><p><strong>Cons:</strong></p><p><span>&#8226; </span>You need an API key, which means you&#8217;re paying per token, separately, for every review. For a solo project with occasional PRs this is small, but it&#8217;s a cost that scales with how often you push</p><p><span>&#8226; </span>The review comes after you&#8217;ve already opened the PR. With a slash command, you can catch the same issues earlier, before the code ever leaves your machine</p><p><span>&#8226; </span>Your coding agent doesn&#8217;t know the review exists, so the findings don&#8217;t make it back to where the code gets written, unless you connect them back with one of the methods above</p><p><strong>Summary:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Ku0Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Ku0Z!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png 424w, /__u/substackcdn.com/image/fetch/$s_!Ku0Z!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png 848w, /__u/substackcdn.com/image/fetch/$s_!Ku0Z!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Ku0Z!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Ku0Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png" width="895" height="310" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:310,&quot;width&quot;:895,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40839,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/206888659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Ku0Z!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png 424w, /__u/substackcdn.com/image/fetch/$s_!Ku0Z!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png 848w, /__u/substackcdn.com/image/fetch/$s_!Ku0Z!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Ku0Z!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e126e0-4fc8-455e-ac6a-e2b44a4df831_895x310.png 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 aria-hidden="true" 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><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><strong>My take:</strong> I originally set up the GitHub Action because several people brought it up, and I expected it to be really useful. Honestly, after trying it out, it feels meh for a solo builder. The slash command gives me the same kind of findings sooner, it&#8217;s built in, and there&#8217;s no separate API bill. Where the Github Action becomes useful is when someone else is working on the project with you, since the reviews live on the PR where you can both see them.</p><blockquote><p><strong>Verdict:</strong> Start with the slash command. Add the GitHub Action when someone else joins the project, or when you want a record of every review.</p></blockquote><h2>Give it a try</h2><p>If you&#8217;re building something you plan to put in front of real users, add it to your workflow. The slash command doesn&#8217;t need any setup, and the GitHub Action takes about ten minutes. Code review is one of those engineering practices that sounds intimidating, but it&#8217;s easy to make it part of your workflow.</p><p>Have you added code reviews to your AI building workflow? I&#8217;d love to hear what your setup looks like, and whether you&#8217;ve let your agent respond to reviews automatically or kept yourself in the loop.</p><h2>Key Reference Links</h2><p><span>&#8226; </span><a href="https://github.com/anthropics/claude-code-action">claude-code-action</a>: the GitHub Action for Claude reviews</p><p><span>&#8226; </span><a href="https://github.com/openai/codex-action">codex-action</a>: the GitHub Action for Codex reviews</p><p><span>&#8226; </span><a href="https://github.com/anthropics/claude-code/blob/main/plugins/code-review/commands/code-review.md">Anthropic&#8217;s /code-review prompt</a>: worth reading to learn how Anthropic prompts its reviewer</p><p><span>&#8226; </span><a href="https://code.claude.com/docs/en/hooks">Claude Code hooks</a> and <a href="https://developers.openai.com/codex/hooks">Codex hooks</a>: for running reviews automatically</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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>]]></content:encoded></item><item><title><![CDATA[Building a Video Game with My 8 Year Old]]></title><description><![CDATA[A summer project on planning, prompting, and debugging for kids with a free question guide]]></description><link>https://bonnieyu.substack.com/p/building-a-video-game-with-my-8-year</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/building-a-video-game-with-my-8-year</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Fri, 19 Jun 2026 17:19:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7gQM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Summer is here, and my kids are out of school. I decided to spend this week building a game with my 8 year old son, Austin. He thinks video games are really cool, so this felt like an easy win as a mom and son activity. At the same time, I wanted him to actually learn something from it, not just watch a game appear.</span></p><p><span>When we build games in </span><a href="https://scratch.mit.edu/"><span>Scratch</span></a><span> together, he has to think through the logic, drag the blocks, test and fix it himself. This time we used Claude Code in the Desktop app instead. The risk with that approach is: if you let a kid describe a game idea in one sentence and hand it to an LLM, the AI fills in every decision for him. He ends up watching a game get built instead of designing one. So before building any code, we spent a few days working through the design on paper.</span></p><p><em><span>Claude Code in Desktop</span></em></p><p><em><span>I decided to use Claude Code in Desktop for my son instead of VS Code in terminal, my usual setup, since the UI is simpler for an 8 year old to navigate. It worked well overall, though Claude did struggle to load the game in Preview mode a few times, so we ended up testing it in the browser directly instead.</span></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!P_7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!P_7q!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png 424w, /__u/substackcdn.com/image/fetch/$s_!P_7q!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png 848w, /__u/substackcdn.com/image/fetch/$s_!P_7q!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png 1272w, /__u/substackcdn.com/image/fetch/$s_!P_7q!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!P_7q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png" width="1456" height="798" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:798,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!P_7q!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png 424w, /__u/substackcdn.com/image/fetch/$s_!P_7q!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png 848w, /__u/substackcdn.com/image/fetch/$s_!P_7q!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png 1272w, /__u/substackcdn.com/image/fetch/$s_!P_7q!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4051f691-29b7-4e98-9186-c38ec1471c3b_1507x826.png 1456w" sizes="100vw" fetchpriority="high"></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 aria-hidden="true" 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><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><h3><strong><span>My Game Design Question Guide</span></strong></h3><p><span>The tricky part of &#8220;vibe coding&#8221; with a kid is that the entire value of the exercise is in the thinking. So I built a question guide for Austin to work through first. I printed the pages so he could draw and fill it out with a pencil. Yes I&#8217;m still a big fan of pencil and paper for elementary school kids.</span></p><p><span>You can grab the Question Guide here:</span><a href="https://docs.google.com/document/d/1iVDdfpU3XIWRj9nMVBQFWrPRIRa7InxKxSY41emvvYg/edit?usp=sharing"><span> My Game Design Journal</span></a></p><p><span>It walks through:</span></p><p><strong><span>Games I Love.</span></strong><span> Watch a few trailers together and talk about what feeling each game gives you, not just what it looks like. We watched Mario, Asteroids, Pokemon, and a few others.</span></p><p><strong><span>My Game Idea.</span></strong><span> One sentence that describes the whole game.</span></p><p><strong><span>Winning and Losing.</span></strong><span> How do you win, how do you lose, is there a score.</span></p><p><strong><span>My Character and Controls.</span></strong><span> What the character can do, and what button does what.</span></p><p><strong><span>My Game&#8217;s Look and Sound.</span></strong><span> Picking free art and music.</span></p><p><strong><span>My Prompt Guide.</span></strong><span> Writing the game requirements for the AI.</span></p><p><strong><span>My Playtest Notes.</span></strong><span> After the game exists, what&#8217;s fun, what&#8217;s broken, what needs fixing.</span></p><p><em><span>Example Pages from Guide</span></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jcXS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jcXS!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png 424w, /__u/substackcdn.com/image/fetch/$s_!jcXS!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png 848w, /__u/substackcdn.com/image/fetch/$s_!jcXS!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jcXS!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jcXS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png" width="925" height="987" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:987,&quot;width&quot;:925,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!jcXS!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png 424w, /__u/substackcdn.com/image/fetch/$s_!jcXS!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png 848w, /__u/substackcdn.com/image/fetch/$s_!jcXS!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jcXS!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8720857-2d49-4191-8345-2ec6b9cc181b_925x987.png 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!CiJj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CiJj!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!CiJj!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!CiJj!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!CiJj!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CiJj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!CiJj!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!CiJj!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!CiJj!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!CiJj!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c4ef54b-9109-4ffe-a305-7920983d3cd4_1536x2048.jpeg 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 aria-hidden="true" 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><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><span>Austin landed on a creature battling game. You buy creatures, battle them, and clear a level by collecting every creature in it.</span></p><h3><strong><span>Writing a Prompt to Define the Game Requirements</span></strong></h3><p><span>This was the part I cared about most. There&#8217;s a gap between a kid&#8217;s one paragraph game idea and a prompt detailed enough for an AI to build something playable from. I didn&#8217;t want to close that gap myself by writing the detailed spec for him. Instead, I had him bring his rough idea into a live conversation with Claude and let Claude ask the follow up questions.</span></p><p><strong><span>Here&#8217;s the starter prompt we used:</span></strong></p><div class="callout-block" data-callout="true"><p><span>Help my 8 year old son design a video game to build. Ask my son questions one at a time so he can think through the design. Provide context and examples when relevant. Some questions can be multiple choice he clicks through, others should be open ended so he can answer in his own words and practice writing.</span></p><p></p><p><span>Here&#8217;s the high level game:<br> [insert your game idea here]</span></p><p><span><br>By the end of the conversation, we should have defined a clear set of requirements to build an MVP for the game.</span></p></div><p><strong><span>And here&#8217;s what Austin typed in for his game idea from doing the question guide:</span></strong></p><p><span>&#8220;This is a 2D battle game called Creature Battle Collector. In the game, you buy creatures, and use your creatures to battle each other. If you win a battle, you get money. If you lose, you lose money. There will be 3 levels. To beat a level, you need to collect all the creatures, and to win the game you need to beat all the levels.&#8221;</span></p><p><strong><span>Claude and my son worked together to define the rest of the requirements</span></strong></p><p><span>Claude asked him things like how much creatures should cost, how many lives the player gets, and what happens when you run out of money. Some questions he answered by picking from a few options, others he just typed out himself. By the end of the conversation we had an actual MVP spec, written by an 8 year old, with the AI doing the interviewing.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PWJr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PWJr!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png 424w, /__u/substackcdn.com/image/fetch/$s_!PWJr!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png 848w, /__u/substackcdn.com/image/fetch/$s_!PWJr!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PWJr!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PWJr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png" width="786" height="966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&quot;width&quot;:786,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!PWJr!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png 424w, /__u/substackcdn.com/image/fetch/$s_!PWJr!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png 848w, /__u/substackcdn.com/image/fetch/$s_!PWJr!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PWJr!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77dfb33-284c-46c2-91ff-0a2b99ac9117_786x966.png 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 aria-hidden="true" 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><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><h3><strong><span>Free Assets</span></strong></h3><p><span>Kids get really excited by visuals and music, so my son and I picked some assets from these free asset websites.</span></p><p><strong><span data-color="rgb(74, 144, 217)" style="color: rgb(74, 144, 217);">FREE IMAGE SITES (SPRITES AND BACKGROUNDS)</span></strong></p><p><a href="https://kenney.nl/assets"><span>Kenney.nl</span></a><span> &#8212; over 40,000 free images, sprites, characters, tiles. No sign-up needed, the best place to start.</span></p><p><strong><span data-color="rgb(74, 144, 217)" style="color: rgb(74, 144, 217);">FREE MUSIC AND SOUND EFFECT SITES</span></strong></p><p><a href="https://mixkit.co/free-sound-effects/game/"><span>Mixkit.co</span></a><span> &#8212; free game sound effects, no sign-up. Jump sounds, explosions, win chimes.</span></p><p><a href="https://pixabay.com/sound-effects/search/game/"><span>Pixabay.com</span></a><span> &#8212; free music tracks and sound effects, no attribution required.</span></p><p><a href="https://incompetech.com/music/royalty-free/music.html"><span>Incompetech.com</span></a><span> &#8212; hundreds of free music tracks by Kevin MacLeod, just credit him in your game.</span></p><h3><strong><span>Learning to Debug</span></strong></h3><p><span>Austin had learned to describe basic bugs to Claude and ask it to fix them, which worked great initially, but then he encountered situations where Claude failed and ended up on a loop itself. The game froze at one point. Austin tried describing what happened in his own words, and Claude said it fixed the issue, but when we tested the game it still froze. He tried a few more times, and Claude still couldn&#8217;t solve it.</span></p><p><span>I showed Austin the developer console, and to look for the small red circle with an X of where the actual errors show up. We copied the error text out of the console and pasted it directly into the chat with Claude. Claude read the error and fixed the issue right away.</span></p><p><span>Honestly, I was happy to see Claude fail, because it showed him some of the challenges when working with AI to build.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!W1aV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!W1aV!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png 424w, /__u/substackcdn.com/image/fetch/$s_!W1aV!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png 848w, /__u/substackcdn.com/image/fetch/$s_!W1aV!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png 1272w, /__u/substackcdn.com/image/fetch/$s_!W1aV!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!W1aV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png" width="687" height="575" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2629f884-0b92-472e-afd4-f46e643bf115_687x575.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:575,&quot;width&quot;:687,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!W1aV!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png 424w, /__u/substackcdn.com/image/fetch/$s_!W1aV!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png 848w, /__u/substackcdn.com/image/fetch/$s_!W1aV!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png 1272w, /__u/substackcdn.com/image/fetch/$s_!W1aV!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2629f884-0b92-472e-afd4-f46e643bf115_687x575.png 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 aria-hidden="true" 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><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><h3><strong><span>What He Ended Up With</span></strong></h3><p><span>By the end of the week, Austin (with Claude&#8217;s help) designed and built the game from start to finish! He named and defined monsters and their abilities, the controls, wrote the prompt, and he learned to use the developer console. Austin was responsible for iterating through the game: adding save profiles, making UI updates so the menus were easier to navigate, etc.</span></p><p><span>I hosted the final game on Render so he can send it to people instead of something that only runs on my laptop. You can play it here: </span></p><p>https://creaturecollector.onrender.com/</p><p><span>FYI It&#8217;s on the free tier so you&#8217;ll probably need to wait for the server to restart</span></p><p><strong><span>A quick Interview with my son</span></strong></p><p><span>What do you want to tell people about your game?</span></p><p><em><span>Come play my game! It&#8217;s very fun. You can collect cool creatures like Colossus.</span></em></p><p><span>What did you learn?</span></p><p><em><span>I learned how much time it takes and how to fix bugs. It also has a lot of typing and writing to make a game. You have to know what you want. You can add sound effect you want to make it interesting to play, and you don&#8217;t want the game to be too easy.</span></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7gQM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7gQM!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png 424w, /__u/substackcdn.com/image/fetch/$s_!7gQM!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png 848w, /__u/substackcdn.com/image/fetch/$s_!7gQM!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7gQM!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7gQM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png" width="1267" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1267,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!7gQM!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png 424w, /__u/substackcdn.com/image/fetch/$s_!7gQM!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png 848w, /__u/substackcdn.com/image/fetch/$s_!7gQM!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7gQM!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693a31ec-9b28-4e49-b721-09292208af7e_1267x880.png 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pQB0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pQB0!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png 424w, /__u/substackcdn.com/image/fetch/$s_!pQB0!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png 848w, /__u/substackcdn.com/image/fetch/$s_!pQB0!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pQB0!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pQB0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png" width="1081" height="745" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:745,&quot;width&quot;:1081,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!pQB0!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png 424w, /__u/substackcdn.com/image/fetch/$s_!pQB0!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png 848w, /__u/substackcdn.com/image/fetch/$s_!pQB0!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pQB0!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283a7b80-dae4-4c23-b2a2-925d01948108_1081x745.png 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 aria-hidden="true" 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><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><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;3cd9e139-2638-4c58-ac61-2b3332ba1c7f&quot;,&quot;duration&quot;:null}"></div><p><em>Game demo. Unfortunately, the recording didn&#8217;t capture the music and sound effects.</em></p><p><span>We playtested it with the family and he got to watch other people actually play something he built! If you&#8217;re looking for a summer project with your own kid, give the question guide a shot.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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><p></p>]]></content:encoded></item><item><title><![CDATA[Getting Started with Local LLMs and Building your own Personal Eval Suite]]></title><description><![CDATA[How to run Gemma 4, Qwen locally, and evaluating whether they're good enough for your real-world workflows to stop paying for frontier models]]></description><link>https://bonnieyu.substack.com/p/getting-started-with-local-llms-and</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/getting-started-with-local-llms-and</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Wed, 27 May 2026 16:53:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bAUv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Right now, frontier AI usage is relatively cheap, a $20 subscription buys what feels like limitless chat and some coding assistance. OpenAI, Anthropic, and Google have all been competing aggressively for market share, leading to the low consumer subscriptions prices, but it won&#8217;t last especially as OpenAI and Anthropic nears IPO. The cost of tokens we enjoy today isn&#8217;t sustainable, and there are strong signals that today&#8217;s pricing will be changing in the near future.</p><p>Two forces are driving this:</p><ol><li><p>Token usage is growing fast. Users are moving from short chat sessions to running agentic systems, which are significantly more expensive. Agentic systems require more tool calls, autonomous task execution, etc all. You can see this yourself by building a multi-agent workflow and measuring the usage. This <a href="https://arxiv.org/abs/2604.22750">paper</a> published in April 2026 found &#8220;agentic tasks are uniquely expensive, consuming 1000x more tokens than code reasoning and code chat,&#8221; and Microsoft reportedly spent their annual claude code budget in a few months.</p></li><li><p>Infrastructure constraints are becoming more problematic. There is limited compute and memory currently available. New data centers require enormous amounts of land, electricity, memory, etc, and people are pushing back. According to this Politico <a href="https://www.politico.com/news/2026/05/16/texas-county-data-center-construction-ban-00922493">article</a>, Hill County in Texas announced a 1 year moratorium on building new data centers. Meanwhile, Anthropic was forced to make a deal with SpaceX to get more compute access to keep up with demand, rumoured to be paying a premium of $15B/year. See <a href="https://www.anthropic.com/news/higher-limits-spacex">announcement</a>. If you&#8217;re a Claude Code user, you&#8217;ve probably noticed the problems: service disruptions, reduced usage limits, and bans on OpenClaw workflows on their subscription plans.</p></li></ol><p>This is why now is a good time to start experimenting with local LLMs. As local models improve, there will be tasks you can offload to your own hardware so you don&#8217;t have to spend hundreds of dollars on frontier models every month.</p><p>The key question is - which tasks actually require frontier intelligence, and which can you offload to a local model? Summarization? Coding Assistance? Writing?</p><p>This tutorial will walk you through setting up local LLMs, your own personal evaluation suite, and integrating them into your workflows.</p><h2>First, the Setup. Looking at your Hardware</h2><p>The first place that feels like a barrier for people getting started with local LLMs is hardware.</p><p>If you believe what you see on LinkedIn or social media, you need to buy the newest Mac mini with 32GB of RAM before you can run any local LLM. But that&#8217;s not necessarily the case.</p><p><strong>Running Local LLMs on a 4 year old Laptop</strong></p><p>My laptop is over 4 years old: a Lenovo Legion Slim 7 laptop with</p><ul><li><p>AMD Ryzen 7 5800H CPU</p></li><li><p>16GB RAM</p></li><li><p>Nvidia GeForce RTX 3060 with 6GB vRAM</p></li></ul><p>Even though this is an older laptop, I was able to run several modern open source models locally: Qwen, Gemma, Mistral etc. Not every model runs well, but it&#8217;s enough to start experimenting and learning.</p><p><strong>When you&#8217;re running local models there&#8217;s 2 pieces to understand:</strong></p><ul><li><p>Your hardware specs relative to</p></li><li><p>The model specs</p></li></ul><p>When you don&#8217;t have the best hardware specs, you need to be more cognizant of what models you run. Let&#8217;s start with the hardware specs.</p><p>The two specs that really matter are vRAM and the system RAM.</p><ul><li><p>The vRAM is how much memory is directly attached to the graphics card. This is the fast memory used for AI inference.</p></li><li><p>The system RAM is what the computer uses for general multitasking.</p></li></ul><p>TLDR: The vRAM is the good stuff for AI. If the model fits mostly into your vRAM then the responses from the AI will feel fast. Once the model no longer fits, then the model starts running on the system ram. Also called CPU offloading / RAM offloading. The model still runs, but responses are much slower.</p><p>I only have 6 GB of VRAM so not the most ideal. I can&#8217;t run the largest models, but I can still run some smaller models. That&#8217;s because of quantization.</p><p><strong>Model Parameters and Quantization?</strong></p><p>Models contain billions of parameters; these are the weights that the model learns during training. A model is in actuality A LOT of numbers. When you select a local model, one of the first decisions you need to make is the number of parameters you want. Do you want Qwen 3.5 4Billion, 9Billion, 27Billion, or 35Billion parameters? The more parameters, the more capable and bigger the model is, and thus the more memory it requires. A frontier model like Anthropic&#8217;s Opus 4.7 or OpenAI&#8217;s GPT 5.5 is so large it requires far more memory and compute than a consumer laptop can provide, which is why these models run across large GPU clusters in data centers.</p><p>Quantization makes local models practical. Quantization compresses the information in the model into something smaller. It&#8217;s like zipping a file, originally a file might be 200MB, but after zipping it, the file becomes 10MB. Quantization basically zips the model to something smaller so you can run a model with less memory. The compressed version isn&#8217;t identical to the original, you&#8217;re trading off the performance of the model in exchange for the ability to run the model with less memory. For example, a 9B model may require roughly 18 GB of memory in its original form, but if you compress it to a 4bit GGUF format then it only requires 5-6GB. <br><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pSZr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pSZr!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png 424w, /__u/substackcdn.com/image/fetch/$s_!pSZr!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png 848w, /__u/substackcdn.com/image/fetch/$s_!pSZr!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pSZr!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pSZr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png" width="1456" height="1029" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1029,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!pSZr!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png 424w, /__u/substackcdn.com/image/fetch/$s_!pSZr!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png 848w, /__u/substackcdn.com/image/fetch/$s_!pSZr!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pSZr!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F663c7521-12b2-4760-a82f-adb1e76a17ec_1472x1040.png 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 aria-hidden="true" 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><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><strong>How to Read Model Descriptions</strong></p><p>Models can be quantized to different levels. When you select a model, you&#8217;ll see different &#8220;quantization&#8221; options usually, for example,</p><p>Q4</p><p>Q6</p><p>Q8</p><p>This is how much you are compressing the model. Q4 compresses the model to 4 bits, whereas Q8 compresses the model to 8 bits.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!bAUv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!bAUv!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png 424w, /__u/substackcdn.com/image/fetch/$s_!bAUv!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png 848w, /__u/substackcdn.com/image/fetch/$s_!bAUv!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bAUv!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!bAUv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png" width="1456" height="864" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:864,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!bAUv!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png 424w, /__u/substackcdn.com/image/fetch/$s_!bAUv!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png 848w, /__u/substackcdn.com/image/fetch/$s_!bAUv!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bAUv!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1978db33-f362-4bcd-ad6d-77d8cc958515_1477x876.png 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 aria-hidden="true" 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><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>If you look at this model search result, here are the important bits to look at:</p><ul><li><p><strong>Download size of 6.55GB</strong> is a good proxy for how much memory you&#8217;ll need for loading</p></li><li><p><strong>Partial GPU Offload Possible</strong> means this likely won&#8217;t be able to run only on my GPU. Makes sense I only have 6GB of vRAM on my GPU</p></li><li><p><strong>Qwen 9B Parameters </strong>9B (B for billion) is the size of the model, the effective number of parameters before the quantization</p></li></ul><p>Ok, now that we&#8217;ve got a rough sense of what hardware matters and how to pick models, it&#8217;s time to actually run it!</p><h2>Next How to Run your local LLM - Ollama vs. LM Studio</h2><p>There are two popular ways to run local LLMs on your machine: Ollama, and LM Studio.</p><p><strong>LM Studio</strong> is a GUI first app that allows users to quickly download and explore local LLMs in a chat interface.</p><p><em>LM Studio Screenshot</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ZBzC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZBzC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZBzC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZBzC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZBzC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZBzC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png" width="1456" height="920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:920,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!ZBzC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZBzC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZBzC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZBzC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16acaea-1d62-4f78-85ef-fc617dd6a83a_1496x945.png 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 aria-hidden="true" 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><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><strong>Ollama</strong> is a terminal first tool that runs local LLMs. It downloads, quantizes and serves the models locally. Download Ollama <a href="https://ollama.com/download">here</a>, and you can see the models available to download <a href="https://ollama.com/library">here</a>. You can use Ollama to integrate local LLMs into your coding workflow.</p><p><strong>If you&#8217;re starting out with LLMs and exploring, then I&#8217;d recommend going with LM Studio first to explore basic capabilities for the local models.</strong> Then moving on to Ollama to test models for coding and agentic tasks. In the next article, I&#8217;ll touch more deeply on Ollama.</p><p><strong>For now, here&#8217;s a step by step for setting up a model on LM Studio</strong></p><ul><li><p>Download and install LM Studio <a href="https://lmstudio.ai/">here</a></p></li><li><p>Go to Model Search and download your first model</p></li><li><p>You can ask ChatGPT/Claude to recommend a local LLM model to start with based on your machine specs</p></li><li><p>Download the model</p></li><li><p>Load the model, and start chatting!</p></li></ul><p><strong>Prompt Example</strong></p><div class="callout-block" data-callout="true"><p>Here are the specs for my machine:</p><p>&lt;insert your hardware specs&gt;<br></p><p>Here are tasks I commonly use ChatGPT and Claude for:</p><p>&lt;insert common tasks you do with ChatGPT / Claude&gt;<br></p><p>Which models should I test first?<br></p><p>For each recommendation:</p><ul><li><p>Explain why you selected it</p></li><li><p>Estimate memory requirements</p></li><li><p>Explain what tasks you think it will likely perform well or poorly on</p></li></ul></div><p></p><p><em>Screenshot of Model Search Icon</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!WwwB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!WwwB!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png 424w, /__u/substackcdn.com/image/fetch/$s_!WwwB!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png 848w, /__u/substackcdn.com/image/fetch/$s_!WwwB!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png 1272w, /__u/substackcdn.com/image/fetch/$s_!WwwB!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!WwwB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png" width="1125" height="667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:667,&quot;width&quot;:1125,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!WwwB!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png 424w, /__u/substackcdn.com/image/fetch/$s_!WwwB!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png 848w, /__u/substackcdn.com/image/fetch/$s_!WwwB!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png 1272w, /__u/substackcdn.com/image/fetch/$s_!WwwB!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5d896-dfad-47dc-880e-99073adae8b2_1125x667.png 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 aria-hidden="true" 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><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><h2>Building Your Personal Eval Suite</h2><p>When you&#8217;re only testing Claude and ChatGPT, it&#8217;s ok to play around with those two, and over time get a sense of which performs better on which tasks. However, as you&#8217;re testing more models, it&#8217;s harder to keep clear which models are best for which tasks I do.</p><p><strong>This is why I recommend building your own personal evaluation suite, so you can systematically evaluate each of the models.</strong></p><p>An evaluation suite is simply a collection of prompts you use to compare models. For a personal eval suite, I pick real prompts and tasks from my own life: Editing articles, Financial Planning, etc. After all, these models are for me.</p><p>The easiest way to build your first evaluation suite is to ask ChatGPT or Claude to help.</p><p><strong>Prompt Example:</strong></p><div class="callout-block" data-callout="true"><p>I am building a personal evaluation suite to evaluate local LLMs. Review our conversation history.<br></p><p>Identify 10 tasks I ask for repeatedly, and 5 tasks that are critical tasks.<br></p><p>For each task,</p><ul><li><p>Create a reusable evaluation prompt. Use the EXACT context from our previous conversation</p></li><li><p>Categorize the task</p></li></ul></div><p><strong>Keep It Small</strong></p><p>Evaluations take time. Since this is a personal model, I recommend keeping it simple so you can complete the evaluation in 15-20 minutes. For example, what I do is select 10 prompts to evaluate against, and 2 models to compare.</p><p>Ultimately the goal is building intuition.</p><p><strong>Track Results in a Spreadsheet</strong></p><p>Again to keep it simple, my evaluation is done in a spreadsheet. For each prompt I track: task category, the prompt itself, what I&#8217;m looking for, common failure modes, model ratings, and notes.</p><p><em>Screenshot of my personal evaluations</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jSR7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jSR7!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png 424w, /__u/substackcdn.com/image/fetch/$s_!jSR7!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png 848w, /__u/substackcdn.com/image/fetch/$s_!jSR7!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jSR7!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jSR7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png" width="1456" height="464" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:464,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!jSR7!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png 424w, /__u/substackcdn.com/image/fetch/$s_!jSR7!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png 848w, /__u/substackcdn.com/image/fetch/$s_!jSR7!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jSR7!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc024f7c-e9e9-447b-bea6-6e4f8a1272a3_2048x653.png 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 aria-hidden="true" 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><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><h2>My First Impressions on Gemma 4 4B and Qwen3 4B Thinking</h2><p>For my first round of testing, I chose Gemma 4 4B from Google and Qwen3 4B from Alibaba. They&#8217;ve gotten generally positive reception online, and ChatGPT recommended it for my machine and my common tasks.</p><p>I evaluated them against 3 categories of tasks based on how I actually use ChatGPT and Claude today:</p><ul><li><p>Editing and restructuring articles and social media posts</p></li><li><p>Technical reasoning</p></li><li><p>Financial planning</p></li></ul><p><strong>What Surprised Me</strong></p><p>Before settling on Qwen3, I tested Qwen3.5 9B. It took 4-5 minutes to generate a response for simple editing tasks, but I was actually surprised that the writing was actually similar to my writing style. Given how slow it ran though, I wouldn&#8217;t be able to use it as a daily driver. But I&#8217;d say I was pleasantly surprised.</p><p><strong>What Worked Well</strong></p><p>Both Gemma 4 4B and Qwen3 4B did well for the high level technical reasoning task I gave it. I asked them to propose an architecture for a simple chatgpt clone. Both came up with high level proposals that&#8217;s comparable to plans I&#8217;ve produced with Opus and Sonnet, and identified some basic security issues e.g.</p><ul><li><p>Using a backend rather than calling an LLM provider directly from the frontend to protect my API Keys.</p></li><li><p>Being mindful of SQL injection risks</p></li></ul><p>What I found interesting is that these models provided practical guidance despite being dramatically smaller than frontier models. In fact, I&#8217;ve asked Opus and Sonnet to propose an architecture plan for this simple chat app several times, and once Sonnet suggested an architecture that had the front end call OpenAI&#8217;s API which would of course expose my API key - that&#8217;s a security no no.</p><p>That doesn&#8217;t mean the local models are better. It does suggest that if I&#8217;m building a simple/basic app, a small local model might be good enough for the high level planning.</p><p><strong>What Worked OK</strong></p><p>Writing assistance landing somewhere in the middle.</p><p>I wasn&#8217;t expecting either model to sound like me. Claude and ChatGPT only became better writing partners after months of interactions and a large amount of context about my style.</p><p>Without that personalization, both Gemma and Qwen rewrote my posts in a generic and obviously AI-generated way. That said, I found some value in tasks that involved restructuring my article content. Sometimes as I write it goes in a bit of stream of consciousness mode, so I use ChatGPT to add more structure. I found that Gemma/Qwen proposed some organizational approaches that I&#8217;d consider using.</p><p><strong>What Worked Poorly</strong></p><p>Financial planning was the weakest category by far.</p><p>Qwen3 4B did awful when it came up with recommendations for my retirement planning prompt. The responses had both factual mistakes and incorrect math. For example, it said my husband had to set up a spousal IRA for me, which is not true. Spousal IRAs would be set up by me and I&#8217;m simply borrowing my husband&#8217;s income.</p><p>Gemma 4B performed somewhat better. Its overall recommendation was reasonable, but it wasn&#8217;t clear on some aspects of the financial planning. I appreciate it recommended talking to a CPA instead of hallucinating wrong answers. Regardless, I wouldn&#8217;t use either for financial planning discussions.</p><p><strong>My Final Thoughts</strong></p><p>After my initial testing, I came away thinking that for low risk tasks like brainstorming, restructuring articles, summarizing, or basic discussions, they&#8217;re actually more useful than I expected. It&#8217;s worth testing and personalizing them more to see if they&#8217;ll become on par with ChatGPT and Claude for me.</p><p>Of course, for high risk decisions/categories of work, they&#8217;re not something I&#8217;d rely on.</p><h2>Wrap Up</h2><p>Next, I plan to test local models on more practical workflows like building prototypes, coding apps, and agent based tasks. Those are the areas where frontier models provide the most value for me, so I&#8217;m curious to see how much of that work can realistically be offloaded to local models.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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><p></p>]]></content:encoded></item><item><title><![CDATA[Why AI Conversations Get Expensive: A Practical Deep Dive into Model APIs, Context, and Side Chats]]></title><description><![CDATA[A step-by-step guide to model APIs, 3-tier app architecture, context and memory design, tokenization, and why side chats can be cheaper than linear chat]]></description><link>https://bonnieyu.substack.com/p/how-model-apis-actually-work-and</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/how-model-apis-actually-work-and</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Thu, 09 Apr 2026 17:59:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GalX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In <a href="/__u/bonnieyu.substack.com/p/prototyping-new-features-on-chatgpt">Part 2</a> of this tutorial series, I focused on model choice: what capabilities I needed, which model supported them, and why that mattered for the folder-based workflows. But once you move beyond a simple chat and start building richer agent experiences, picking the model is only part of the problem. The next challenge is deciding what context gets sent to the model, when, and how often.</p><p>To make this concrete, I&#8217;m going to build a feature I keep wishing ChatGPT, Claude, and Gemini had: Google Docs style comment threads for side conversations with your agent. The product reason is simple. Linear chat gets messy fast when you&#8217;re researching or writing because a side question about one paragraph pollutes the whole thread. But this feature is also a useful teaching example to make the underlying tradeoffs visible. Once you split one chat into multiple subconversations, you have to make explicit decisions about memory and context: what each thread should know, what history it should keep, and what exactly gets passed to the model APIs on every call.</p><p>In today&#8217;s tutorial, we are going to do a deep dive into how model APIs work. We&#8217;ll look at OpenAI&#8217;s <a href="https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create">chat completions</a> and <a href="https://developers.openai.com/api/reference/resources/responses/methods/create">responses APIs</a>, and Anthropic&#8217;s <a href="https://platform.claude.com/docs/en/build-with-claude/working-with-messages">messages API</a>, so you can see what actually happens every time you send a message i.e. how requests are constructed, how context is passed to the model, and how conversations are recreated on every API call. Once you see how this works, a few things also start to make more sense:</p><ul><li><p>why long conversations get slower and more expensive</p></li><li><p>why tools recommend clearing context or starting new chats</p></li><li><p>why building AI features often comes down to deciding what context to include</p></li></ul><h2>The UX Problem: Product Design and Decisions</h2><p>I write and research a lot with ChatGPT, Claude, and Gemini.</p><p>Let&#8217;s say I&#8217;m writing an article on local LLMs and I ask: &#8220;What are good local LLMs I can run on AWS?&#8221; Claude gives me a 10 paragraph answer. As I&#8217;m reading, I want to go deeper on Meta Llama 3.3 70B and how quantization works.</p><p>But when I do that, Claude responds about Llama and quantization into the same thread.</p><p>Now I have one conversation that mixes:</p><ul><li><p>the main topic about running LLMs on AWS</p></li><li><p>a deeper dive into Llama and quantization</p></li></ul><p>This gets messy quickly. The conversation becomes harder to follow, different lines of thought get mixed together, and small edits to one section affect everything else. There&#8217;s no way to branch off.</p><p><em>Screenshot of current Claude Chat conversations</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!GalX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!GalX!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png 424w, /__u/substackcdn.com/image/fetch/$s_!GalX!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png 848w, /__u/substackcdn.com/image/fetch/$s_!GalX!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png 1272w, /__u/substackcdn.com/image/fetch/$s_!GalX!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!GalX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png" width="1092" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:795,&quot;width&quot;:1092,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!GalX!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png 424w, /__u/substackcdn.com/image/fetch/$s_!GalX!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png 848w, /__u/substackcdn.com/image/fetch/$s_!GalX!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png 1272w, /__u/substackcdn.com/image/fetch/$s_!GalX!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd911e4a1-133f-41a2-a60e-854b4ca2bbd3_1092x795.png 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 aria-hidden="true" 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><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>This project is going to change that. Instead of treating the entire response as a single conversation, we are going to break it into smaller units. I can have multiple sub conversations about different aspects of local llms without polluting the main thread.</p><p><em>Screenshot of Chatbot with Subconversations that I built</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jFTb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jFTb!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png 424w, /__u/substackcdn.com/image/fetch/$s_!jFTb!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png 848w, /__u/substackcdn.com/image/fetch/$s_!jFTb!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jFTb!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jFTb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png" width="1195" height="837" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:837,&quot;width&quot;:1195,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!jFTb!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png 424w, /__u/substackcdn.com/image/fetch/$s_!jFTb!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png 848w, /__u/substackcdn.com/image/fetch/$s_!jFTb!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jFTb!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F738e3549-8144-4db7-aef0-3c756a5d75cd_1195x837.png 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 aria-hidden="true" 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><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>In building this, the main questions are going to be</p><ul><li><p>How much of the main conversation should we pass to the subagent?</p></li><li><p>If the main conversation changes, should that update the subagents?</p></li><li><p>Does the subagent only need to keep track of its own conversation history?</p></li></ul><p>For our MVP, we are going to have multiple comment threads, each thread will have a snapshot of the main conversation at time of creation, and maintain its own context. This keeps the system simpler and prevents token usage from exploding.</p><p>In the future, you can imagine a more advanced setup using something like RAG where all threads are indexed and the model can selectively pull relevant context from each conversation. We aren&#8217;t building that here.</p><p>For now, we are going to go under the hood and look at how this actually works. We&#8217;ll walk through a simple agent architecture and then look closely at how model APIs calls are constructed for each interaction.</p><h2>How an Agent App Works: A Primer on Basic App Architecture</h2><p>Before we look at the model API itself, it helps to understand how this fits into a broader web app architecture.</p><p>Even though this is an AI app, the structure is actually very standard. Most web apps follow a simple three layer set up (often called a 3-tier architecture):</p><ul><li><p>the frontend (your app UI)</p></li><li><p>your backend (your own API and logic)</p></li><li><p>external services (databases, third-party APIs, etc)</p></li></ul><p>In our case, the model API (OpenAI, Anthropic etc) is just another external service.</p><p>When a user interacts with the app, the frontend does not call the model API directly. Instead, it sends a request to your backend.</p><p>There are a couple of practical reasons for this:</p><ul><li><p>you don&#8217;t want to expose your API key in the browser</p></li><li><p>you want a place to shape and control the request</p></li><li><p>you want to handle things like streaming responses</p></li></ul><p><em>Diagram of App Architecture</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!x3u4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!x3u4!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png 424w, /__u/substackcdn.com/image/fetch/$s_!x3u4!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png 848w, /__u/substackcdn.com/image/fetch/$s_!x3u4!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png 1272w, /__u/substackcdn.com/image/fetch/$s_!x3u4!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!x3u4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png" width="1456" height="552" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:552,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!x3u4!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png 424w, /__u/substackcdn.com/image/fetch/$s_!x3u4!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png 848w, /__u/substackcdn.com/image/fetch/$s_!x3u4!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png 1272w, /__u/substackcdn.com/image/fetch/$s_!x3u4!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51cf6c63-4f28-4cb4-83e7-9959de1b57f2_1706x647.png 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 aria-hidden="true" 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><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>The flow will look like this:</p><ol><li><p>The user interacts with the UI</p></li><li><p>The frontend gathers the relevant context</p></li><li><p>The frontend sends that data to your backend</p></li><li><p>The backend constructs the request in the format the model expects</p></li><li><p>The backend calls the model API</p></li><li><p>The response is streamed back to the frontend and rendered</p></li></ol><div><hr></div><p><strong>FYI If you&#8217;ve been reading my articles but haven&#8217;t jumped into Claude Code  yourself, I&#8217;m hosting an AI Builder Bootcamp where we do the hands-on work together. More details here <a href="https://maven.com/bonnie-yu/ai-builder-bootcamp-for-pms">here</a>. Use BSUBSTACK25 for a 25% discount!</strong></p><div><hr></div><h2>What&#8217;s Actually Sent: How Model APIs Work</h2><p>Now let&#8217;s look at what actually happens when you send a message.</p><p>For this project, every time a user sends a message in a comment, the backend constructs a messages array and sends it to the model. </p><p>Note: a message array is basically a list of messages.</p><p>In my current implementation, that call uses OpenAI&#8217;s Chat Completions API. OpenAI defines Chat Completions around a messages array representing the conversation so far. Their newer Responses API uses a different input shape, but the same core idea still applies: you are packaging up the context and sending it with every request. Anthropic&#8217;s Messages API is conceptually very similar too.</p><p>Here&#8217;s code from the project:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;16e583e6-895f-495d-af8c-5790e20af88f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">//Build the system prompt that gives the model our full document history and specific paragraph
const systemPrompt = `You are a helpful assistant with context about a specific part of a document.

The full document:

${threadContext.messageSnapshot}

The paragraph the user is asking about:

&#8220;${threadContext.paragraphSnapshot}&#8221;

Answer the user&#8217;s question directly.`

//Build the messages array that will be sent to the model API
const messages = [
{ role: &#8216;system&#8217;, content: systemPrompt },
...threadContext.threadHistory,
{ role: &#8216;user&#8217;, content: userMessage }
]

//Send the request to OpenAI using the Chat Completions API
openai.chat.completions.create({
model: &#8216;gpt-5-mini&#8217;,
messages: messages,
stream: true
})</code></pre></div><h3>A Concrete Example: How the Messages Grow With Each Call</h3><p>Let&#8217;s go back to the local LLM example from the previous section.</p><p>Say I ask the main chat: What are good local LLMs I can run on AWS?</p><p>And the model gives me a long answer covering Llama 2, Llama 3, Mistral, Falcon, hardware sizing, and setup guidance. One paragraph talks about Llama 3 and quantization. I click into that paragraph and open a thread.</p><p>My first message is: What does quantization mean?</p><p>At that point, OpenAI receives a request like this:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;b4babdf0-8a32-459f-a106-ec12a3c7a512&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">[{

role: &#8216;system&#8217;,
content: `You are a helpful assistant with context about a specific part of a document.

The full document:

Short answer

- If you want the best practical balance of quality, speed and cost for running locally on EC2: Llama 2 / Mistral 7B / Mistral Mixtral / Falcon 7B...

- Use huggingface transformers + bitsandbytes / accelerate or vLLM for GPU inference...

1) Good local LLMs and when to pick them

- Llama 2 (Meta)

- Pros: strong quality, widely used...

- Llama 3

- Pros: improved quality over Llama 2...

- Mistral 7B / Mixtral

- Pros: state-of-the-art quality-per-parameter...

2) Hardware (EC2) sizing guidance

- CPU-only (no GPU)

- Small/cheap GPU (single T4, 16GB) &#8212; g4dn family

...

The paragraph the user is asking about:

&#8220;Llama 3

- Pros: improved quality over Llama 2 (chat, reasoning) depending on size/version.

- Cons: similar VRAM footprint; check license and availability.

- Best for: higher quality chat-like applications when available.&#8221;

Answer the user&#8217;s question directly.`

},

{
role: &#8216;user&#8217;,
content: &#8216;What does quantization mean&#8217;
}]</code></pre></div><p>If I then reply, &#8220;how much RAM do I need to run the models?&#8221;</p><p>The next request we send to OpenAI gets longer! We need to send the same system prompt, the main conversation history, the input and output from the What does quantization mean? question <strong>again</strong>, PLUS my new message!</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;e78f2c53-083e-4980-95aa-5b7954b0160f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">[
{ role: &#8216;system&#8217;, content: &#8216;...(same system prompt with document + paragraph)...&#8217; },
{ role: &#8216;user&#8217;, content: &#8216;What does quantization mean&#8217; },
{ role: &#8216;assistant&#8217;, content: &#8216;Heavy quantization= aggressively reducing the bit&#8209;width used to store model weights&#8217; },
{ role: &#8216;user&#8217;, content: &#8216;How much does RAM do I need to run the models?&#8217; }
]</code></pre></div><p>This happens every time you send a message in a conversation to the Model APIs. The list of messages just keeps growing. The amount of tokens you are using isn&#8217;t simply the tokens from the last question &#8220;How much does RAM do I need to run the models?&#8221; it includes everything before that. So instead of costing 11-13 tokens, that RAM question could cost thousands of tokens!</p><p>This is why one of the best practices for minimizing token usage when you are building with coding agents like Claude Code is to /clear the conversation after you finish a feature, instead of having long running conversations. Every time you talk to Claude it sends your <a href="http://claude.md">Claude.MD</a> and all your previous messages.</p><h3><strong>Why This Gets Expensive (And How Side Chats Helps)</strong></h3><p>The reason we have to send everything back again is because models don&#8217;t have memory. They are &#8220;stateless.&#8221; The &#8220;conversation&#8221; is something the app has to send over and over by replaying the relevant history.</p><p>**Note: Some APIs support prompt caching, which can reduce the cost of repeated context like system prompts or document snapshots. But from a system design perspective, you should still assume that you are sending the full context on every request.</p><p>This brings us back to the feature I&#8217;ve been building. Instead of keeping one giant conversation that grows and grows, we break it into smaller scoped threads. That has a UX benefit, but it can also help control token usage because unrelated follow-ups stop inflating the main chat.</p><p>To make this more concrete, I researched the local llm question with current ChatGPT/Claude chatbot experiences, and then again with my side comment threads. In the linear version, I ask about local LLMs, then ask follow-up questions in the same chat about quantization, Llama, and local setup. In the side chat version, I keep the main thread focused on the broader local LLM discussion, then branch off into separate scoped threads for quantization, Llama, and setup.</p><p>Here&#8217;s what the linear version looked like in approximate input tokens sent to the model:</p><p><strong>Current Chatbot Main Thread</strong></p><ul><li><p>Turn 1: ask for good local LLMs to run locally &#8594; <strong>40 tokens</strong></p></li><li><p>Turn 2: ask for a comparison of Llama, Mistral, Gemma, and Qwen &#8594; <strong>193 tokens</strong></p></li><li><p>Turn 3: Quantization follow-up in main thread &#8594; <strong>358 tokens</strong></p></li><li><p>Turn 4: Llama follow-up in main thread &#8594; <strong>493 tokens</strong></p></li><li><p>Turn 5: Setup follow-up in main thread &#8594; <strong>643 tokens</strong></p></li></ul><p>Total input tokens sent: <strong>~1,727</strong></p><p><strong>NEW</strong> <strong>Side Chat Version</strong> of the same research:</p><p>Main thread</p><ul><li><p>Turn 1: ask for good local LLMs to run locally &#8594; 50 tokens</p></li><li><p>Turn 2: ask for a comparison of Llama, Mistral, Gemma, and Qwen &#8594; 213 tokens</p></li></ul><p>Side chats</p><ul><li><p>Quantization side chat &#8594; <strong>146 tokens</strong></p></li><li><p>Llama side chat &#8594; <strong>136 tokens</strong></p></li><li><p>Setup side chat &#8594; <strong>171 tokens</strong></p></li></ul><p>Total input tokens sent: <strong>~816</strong></p><p>That&#8217;s a meaningful difference. The side chat version used about <strong>53% fewer input tokens</strong> than keeping everything in one linear conversation.</p><p>You can see that just by comparing the Quantization follow ups.</p><ul><li><p>In the main linear thread &#8594; 358 tokens</p></li><li><p>In a scoped side chat &#8594; 140 tokens</p></li></ul><p>The reason is that the side chat only needs a smaller snapshot of the relevant context plus its own local history. It does not need to carry along every other unrelated turn about Llama comparisons or setup choices.</p><p>There is nuance here. Apps like ChatGPT and Claude Code likely use prompt caching to reduce the cost of repeated context. At a high level prompt caching works by recognizing when you send the same text again (for example, your systemp prompt). Instead of fully reprocessing those tokens, the system can reuse a cached representation internally and charge less for them. </p><p>In a long linear conversation, this can help because much of the earliest history is identical across requests. That means the actual cost may be lower than what raw token counts suggest.</p><h2>Where Things Start to Break</h2><p>So far, this setup works pretty well. We have:</p><ul><li><p>a main conversation</p></li><li><p>multiple comment threads</p></li><li><p>each thread with its own scoped context</p></li></ul><p>This keeps things cleaner than a single long chat and helps control token usage. But there&#8217;s a few unsolved problems that still needs work</p><ul><li><p><strong>No shared memory across comment threads.</strong> If I figure out something in one thread, the other threads don&#8217;t know about it</p></li><li><p><strong>Threads can go out of sync.</strong> Right now, each thread uses a snapshot of the document at the time it was created, which means older threads will reference outdated context.</p></li></ul><p>This is where if I want to push this further, I&#8217;d explore using techniques like RAG to index all the conversations so we can fetch what&#8217;s relevant, or use a single &#8220;main conversation&#8221; snapshot for all the comment threads.</p><h2>Wrap Up</h2><p>In Part 2, we focused on models and how to choose between them.</p><p>In this post, we went a level deeper and looked at what actually happens when you call a model API. We walked through how requests are constructed, what the messages array looks like, and why conversations get slower and more expensive over time. From there, we built a subconversation feature to better match how we actually research and write, and used that to explore how context is passed, scoped, and recreated on every call.</p><p>And now I can do research the way I want to! I also added a fun feature so I can replace paragraphs for when I write &#128578;</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;08c23b7a-26f3-4c4c-bd8f-03b97bf0e372&quot;,&quot;duration&quot;:null}"></div><p></p><p>If you need more personalized help, feel free to reach out at <a href="mailto:bonnieyu.coaching@gmail.com">bonnieyu.coaching@gmail.com</a> for coaching sessions.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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><p></p>]]></content:encoded></item><item><title><![CDATA[AI Fluency in 2 Weeks and the new AI Interview Screen]]></title><description><![CDATA[Practical guide to answering AI fluency interview questions by understanding the AI tool landscape, and concepts behind them]]></description><link>https://bonnieyu.substack.com/p/ai-fluency-in-2-weeks</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/ai-fluency-in-2-weeks</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Tue, 10 Mar 2026 17:32:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZdIm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We&#8217;re going to take a short break from the prototyping series to discuss AI Fluency.</p><p>Recently, I&#8217;ve noticed more posts of people saying they feel overwhelmed by all the AI tools, concepts, and frankly, jargon. I hate seeing people stressed out by this, and feeling like they don&#8217;t even know where to start.</p><p>At the same time, as I prepare my clients for job hunting, I&#8217;ve also noticed an increasing amount of &#8220;AI Fluency&#8221; questions showing up in interviews. More companies are now expecting a base level of AI knowledge even if the role isn&#8217;t focused on building AI products.</p><p>So today&#8217;s article is about how to go from a complete beginner to being AI fluent for an AI Fluency PM Interview.</p><p>I&#8217;ve put a simple plan together around a dedicated 2 week sprint to get you there. In my experience, it&#8217;s hard to make progress on something like this if you spread it out across months. Compressing it into two weeks makes it easier to commit and actually get it done.</p><p>The time investment is about 9 hours per week:</p><ul><li><p>~1 hour on weekdays</p></li><li><p>~4 hours on the weekend</p></li></ul><p>For all you parents out there, you&#8217;ll probably need help from your spouse or partner. Ask them to help cover Saturday or Sunday mornings for 2 weekends. Thankfully, it&#8217;s only 2 weekends so the time commitment is more manageable.</p><p>One important note: this is not prep for an &#8220;AI PM&#8221; role where you build an agent or work on improving the models directly. This is for a &#8220;regular&#8221; PM role (e.g. onboarding, billing, productivity, platform) where companies are now expecting a base level of AI knowledge, and how it fits into your work.</p><h3>The AI Fluency Questions</h3><p>I compiled a list of questions based on my clients interviews, and contributions from the <a href="https://womenpm.org/">Women in Product Community</a>. They fall into four buckets:</p><p>Work Related AI</p><ul><li><p>How have you incorporated AI into your workflow?</p></li><li><p>If you use AI in your workflows, what are common mistakes you&#8217;ve seen come up?</p></li><li><p>How do you reduce hallucinations and develop trust on your agent/workflow</p></li><li><p>How do you evaluate or choose between tools and models?</p></li></ul><p>AI Curiosity</p><ul><li><p>Have you used AI for any side projects or experiments?</p></li><li><p>Which AI tools/models do you use regularly, and for what?</p></li><li><p>Which new AI feature, model, or product release in the last 6 months has impressed you the most, and why?</p></li></ul><p>AI Vocabulary</p><ul><li><p>How does a LLM work?</p></li><li><p>What are challenges with a LLM&#8217;s context window?</p></li><li><p>For more technical roles - What is MCP and RAG? When would you use it? What are the downsides of using them?</p></li></ul><p>Live Building (rare but may become more common)</p><ul><li><p>Given a product problem, vibe code a prototype on the spot</p></li><li><p>Build a multi agent system for X workflow. Check this <a href="https://www.reddit.com/r/ProductManagement/comments/1rlrq5r/the_pm_interview_has_changed/">reddit thread</a> for more examples</p></li></ul><h3>The Action Plan. Your 2 Week Sprint</h3><p><strong>Week 1: Build Something Fun (9 hours)</strong></p><ul><li><p>Get access to a few tools</p></li><li><p>Learn the AI tool landscape</p></li><li><p>Dive into a few AI concepts</p></li><li><p>Build your first project</p></li></ul><p><strong>Week 2: Build your hero stories (9 hours)</strong></p><ul><li><p>Set up a coding agent</p></li><li><p>Build one AI workflow at work</p></li><li><p>Build a 2nd project with a coding agent</p></li><li><p>Turn your logs into interview stories</p></li></ul><p><strong>Note: Throughout both weeks start using AI at work</strong></p><p>If you haven&#8217;t already, start incorporating AI into your daily PM work. Pick simple, low-risk tasks where you can experiment:</p><ul><li><p>Drafting meeting agendas or notes</p></li><li><p>Brainstorming feature ideas</p></li><li><p>Summarizing user feedback</p></li><li><p>Writing your PRDs</p></li></ul><p>The goal here is to get comfortable with the basic pattern:</p><p>Prompt -&gt; review output -&gt; validate -&gt; iterate</p><p>You don&#8217;t need to log everything or turn this into a formal story yet. Just build the habit.</p><h3>Week 1: Build Something Fun</h3><p>The fastest way to learn AI is by building something. By the end of this week, you should have a working prototype of an idea.</p><p>Before we jump into the project, it helps to have a rough map of the AI tool landscape. Read through this so you know what&#8217;s out there, but you&#8217;ll get a better sense of all this after you&#8217;ve built something</p><h3 style="text-align: center;"><strong>Overview of AI Tool Landscape</strong></h3><p><strong>General Assistants &amp; LLMs</strong></p><p>ChatGPT, Claude.AI, Gemini</p><p>What everyone is already using! General purpose chatbot for tasks like content generation, research, brainstorming, summarization, and strategic review.</p><p><strong>Fast Prototyping</strong></p><p>Lovable, Bolt, V0</p><p>Tools where all you need is a prompt (e.g. a set of requirements) to get started. I use them to rapidly &#8220;vibe-code&#8221; a prototype in a short time (e.g., 20&#8211;30 minutes), test a specific UX idea, or build a simple side project quickly to validate an idea.</p><p>Pros </p><ul><li><p>Fast and easy to get started</p></li><li><p>Hosting, authentication, and simple analytics out of the box </p></li></ul><p>Cons</p><ul><li><p>Cost. Token costs can get expensive quickly </p></li><li><p>Agents struggle if you have complex logic or integrations</p></li><li><p>Less flexible if you want more control over technology</p></li></ul><p><strong>AI-Enhanced Development Environments </strong></p><p>Cursor, Replit, VSCode</p><p>These are coding environments with built in AI assistance. Compared to fast prototyping tools, they provide more control over the codebases, but more set up </p><p>Pros</p><ul><li><p>Ability to choose your coding agents</p></li><li><p>Developer tools like code diffs</p></li><li><p>Greater control over what you&#8217;re building</p></li></ul><p>Cons</p><ul><li><p>Higher learning curve than prototyping tools</p></li><li><p>Cursor and VScode does not provide hosting / authentication out of the box (**Replit on the otherhand does provide hosting and authentication)</p></li></ul><p><strong>Coding Agents</strong></p><p>Claude Code, Gemini CLI, Codex</p><p>Coding agents can write, modify, and reason about code across a project. Many people feel overwhelmed by the coding agents because they initially lived in the terminal. BUT they&#8217;re more accessible now. For example, you can use Claude Code in Claude Desktop. I prefer using the coding agents natively because they are cheaper and more flexible.</p><p>Pros</p><ul><li><p>Cheaper than Lovable/Bolt etc. you&#8217;ll be able to build a lot more for the same amount of $$.</p></li><li><p>You can build with whatever technology and integrations you want</p></li><li><p>Coding agents are better at complex tasks.</p></li></ul><p>Cons</p><ul><li><p>Can feel intimidating at first</p></li><li><p>Requires more set up</p></li><li><p>Does not come with authentication, hosting etc out of the box </p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ZdIm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZdIm!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZdIm!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZdIm!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZdIm!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZdIm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2158184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/190467309?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ZdIm!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZdIm!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZdIm!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZdIm!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2060e23f-915a-4dd7-9f29-d65d46fae7c6_1024x1536.png 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 aria-hidden="true" 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><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><div><hr></div><p>FYI If you want to use Claude Code, I have a beginners guide for building with <a href="/__u/bonnieyu.substack.com/p/building-an-ai-pm-interview-site">Claude Code</a>.</p><div><hr></div><h4><strong>Get your tools (30 minutes)</strong></h4><p>For this sprint, you&#8217;ll only need two tools! My recommendation:</p><p><strong>One Fast Prototyping Tool</strong></p><p><a href="https://lovable.dev/">Lovable</a> or<a href="https://bolt.new/"> Bolt</a> are good starting points. Both are around $50/month</p><p><strong>One general LLM (because it comes with a coding agent!)</strong></p><p><a href="https://claude.com/pricing">Claude</a>, <a href="https://chatgpt.com/pricing/">ChatGPT</a>, or <a href="https://gemini.google/subscriptions/">Gemini</a>.</p><p>Buy the $20/month plan from one of the frontier models. Each of the general assistants come with a coding assistant e.g. Claude comes with Claude Code.</p><p>You&#8217;ll spend about $70 for this 2-week sprint.</p><p>Afterwards, you can decide if you want to keep the subscriptions. We&#8217;re paying here because you don&#8217;t want to get blocked by rate limits while you&#8217;re working on a project.</p><p>Alternative: If you want access to a bunch of tools at once,<a href="https://www.lennysnewsletter.com/p/productpass"> Lenny&#8217;s newsletter</a> has a deal where you subscribe for $350/year and get access to a large number of AI tools. This is overkill for a 2-week sprint, but worth considering if you&#8217;re planning to use these tools long-term.</p><h4><strong>Build one project with either Lovable or Bolt (3-4 hours)</strong></h4><p>This is the fun part. You&#8217;re going to build something this week, and it&#8217;s going to work. I suggest using a bigger block of time for this.</p><p>The workflow is straightforward</p><ul><li><p>Come up with a problem you want to solve</p></li><li><p>List out a simple set of requirements</p></li><li><p>Plug it into Lovable or Bolt, and work with their agent to plan and build your first app!</p></li></ul><p>A few ideas on problem spaces to consider: Family activity planning, Financial analysis, Movie picker. If you want a more guided path, you can also use a tutorial as a base, then modify it so it&#8217;s clearly your own. Peter Yang has a <a href="https://creatoreconomy.so/p/full-tutorial-build-10-beautiful-websites-in-12-min-replit-gemini">tutorial</a> where he provides you with prompts for different web apps and games like a poker game.</p><p>To make the project more complex, add something like authentication to the app. Have friends and family test it out, and make some feature updates.</p><p><strong>As you build, keep a running log:</strong></p><ul><li><p>What you&#8217;re building and why</p></li><li><p>Key decisions and tradeoffs</p></li><li><p>How you&#8217;re using AI (code generation, refactors, UX, etc.)</p></li><li><p>Make sure you have a scoped feature you can explain end-to-end.</p></li><li><p>Then turn that log into an interview story</p></li></ul><p>Tip: You can use AI to help with logging the work! Just talk to a chatbot as you&#8217;re doing it</p><p>Screenshot of a Lovable project</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!X7dH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!X7dH!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png 424w, /__u/substackcdn.com/image/fetch/$s_!X7dH!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png 848w, /__u/substackcdn.com/image/fetch/$s_!X7dH!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png 1272w, /__u/substackcdn.com/image/fetch/$s_!X7dH!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!X7dH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198418,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/190467309?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!X7dH!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png 424w, /__u/substackcdn.com/image/fetch/$s_!X7dH!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png 848w, /__u/substackcdn.com/image/fetch/$s_!X7dH!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png 1272w, /__u/substackcdn.com/image/fetch/$s_!X7dH!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdec919c0-0417-4f48-b0f6-4962f6b9e8aa_1486x812.png 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 aria-hidden="true" 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><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><h4><strong>Understand vocabulary and concepts (2-3 hours)</strong></h4><p>Now that you&#8217;ve built something, the vocabulary will make more sense. If you want a general overview of generative AI, Andrew Ng teaches a <a href="https://www.deeplearning.ai/courses/generative-ai-for-everyone/">Generative AI for Everyone</a> course on <a href="http://deeplearning.ai">DeepLearning.AI</a>. Watch <strong>week 1</strong> videos (about 30 minutes)</p><p>It&#8217;ll touch on hallucinations (you&#8217;ve probably encountered some already), how context windows work, etc.</p><p>For more technical roles, they might ask you about MCP or RAG.</p><ul><li><p>MCP (Model Context Protocol) is a standard way for LLMs to connect and communicate with data sources and external apps. Example, you can use a LLM to access all your Granola transcripts and ask questions about your meetings with the Granola MCP</p></li><li><p>RAG (Retrieval Augmented Generation) is an architecture where you store data in a separate database (usually a vector db) where the LLM can access more up to date or private information (e.g. your company&#8217;s information!)</p></li></ul><p>If you want to learn more about these, <a href="http://deeplearning.ai">DeepLearning.AI</a> also provides videos on other topics such as <a href="https://www.deeplearning.ai/courses/retrieval-augmented-generation-rag/">RAG</a>, but this is optional.</p><h4><strong>Oh, and all that AI Jargon&#8230;</strong></h4><p>There&#8217;s a lot of jargon in the AI space, and it feels like new words keep appearing everyday. Earlier, I mentioned the question &#8220;Build a multi agent system for X workflow.&#8221; Don&#8217;t let the words scare you. Decode this step by step.</p><p>In this context, it just means using multiple AI assistants together to accomplish a workflow. For example, one AI agent reads your e-mails and summarizes action items, another agent drafts responses, and a third schedules follow up meetings. They are connected together in a sequence to accomplish a task. Underneath each of these AI assistants are simply prompts that give them specific instructions. If you get asked this in an interview, they want to see if you can break down a workflow into steps and think about where AI can help at each step.</p><p>BTW if you need help with vocabulary, you can also ask your LLM.</p><h4><strong>Quick Note about Prompting</strong></h4><p>There&#8217;s whole courses about prompting, but with how advanced the current models are, there&#8217;s really only 2-3 things to know</p><ol><li><p><strong>Context.</strong> Explain the situation</p><ul><li><p>I&#8217;m building a chatbot for kids to help them learn vocbulary. It needs to work on mobile and web</p></li></ul></li><li><p><strong>Guardrails.</strong> Define constraints</p><ul><li><p>The chatbot should NEVER discuss anything violent or graphic</p></li></ul></li><li><p><strong>Structured outputs.</strong> Specify the format you want</p><ul><li><p>Generate vocabulary words and definitions and output it as a JSON file</p></li></ul></li></ol><p>Sounds easy, but the tricky part is giving context, guardrails, or structured outputs in a domain you&#8217;re not an expert in. For example, you need to build a production grade app, but you&#8217;re not a developer. You may not realize you need to have the agent check the code for extensibility, scalability, and security, and you run into trouble. That&#8217;s when you need to talk to a general LLM about the problem space first to expand your knowledge.</p><p><strong>End of Week 1</strong></p><p>By the end of this week, you should have:</p><ul><li><p>experimented with a prototyping tool</p></li><li><p>built a working prototyping</p></li><li><p>start forming opinions about where AI works well and where it breaks down</p></li></ul><p>You should have some idea about the AI landscape, and general prompting techniques.</p><div><hr></div><p><strong>FYI I&#8217;m an AI and Product Coach. If you have questions or you&#8217;re looking for a personalized coaching plan to improve your AI fluency, you can find me at bonnieyu.coaching@gmail.com</strong></p><div><hr></div><h3>Week 2: Build your Hero Stories</h3><h4><strong>Set Up a Coding Agent (30 minutes)</strong></h4><p>While they are called coding agents, Claude Code / Codex / Gemini etc are being used for many product management tasks and workflows. Remember that question around building a multi agent system for X workflow? You&#8217;ll be able to easily set up a multi agent workflow with one of these coding agents.</p><p>I use Claude Code as my main driver, but I do use the other agents too from time to time. I&#8217;d suggest either using Claude Code or whatever your company has approved for work.</p><p>FYI The first part of my <a href="/__u/bonnieyu.substack.com/p/building-an-ai-pm-interview-site">Claude Code tutorial</a> walks people through the installation, set up, and some Claude Code basics.</p><h4><strong>Create a &#8220;Hero&#8221; Story from Work (3 hours)</strong></h4><p>By now you should have some experience using AI in your day to day work. Pick one core PM workflow (e.g., spec writing, customer feedback synthesis, data analysis), and use a coding agent to solve it. If you need more ideas, Sachin Rekhi demos how he uses Claude Code for different product management tasks in this Youtube <a href="https://youtu.be/zsAAaY8a63Q?si=co8WGDoWeKCz-fiN">video</a>.</p><p>Aim to build a concrete story like:</p><ul><li><p>What you were trying to do</p></li><li><p>How you integrated AI into the process</p></li><li><p>How you validated/corrected its output</p></li><li><p>Did AI make any mistakes that you caught</p></li></ul><p>If you want to build the workflow with multiple agents, you can learn about creating custom agents <a href="https://code.claude.com/docs/en/sub-agents">here</a>, or you can test Claude Code&#8217;s new agent team feature <a href="https://code.claude.com/docs/en/agent-teams">here</a>. As an example, you can also read Anthropic&#8217;s <a href="https://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-review/commands/code-review.md">code review plugin</a> which uses 4 agents in parallel.</p><p>Goal: have one strong, specific example you can reuse in AI fluency screens</p><h4><strong>Build a 2nd Project with a Coding Agent (5 hours)</strong></h4><p>I suggest building a second app with a coding agent. This gives you more to talk about in interviews and helps you understand trade offs between different tools. <br></p><p>If you&#8217;re able to use a coding agent at work, I suggest building a prototype for your next feature and share it with your designers and engineers. More and more companies are looking for PMs who can write short specs and prototype their features.<br><br>Keep the same logging approach as Week 1.</p><h4><strong>Optional: Practice Interview &#8220;vibe-coding&#8221; (30 minutes)</strong></h4><ul><li><p>Have AI or a friend give you a product problem</p></li><li><p>Identify a user problem quickly</p></li><li><p>Define a small scope that you can build in 20&#8211;30 minutes.</p></li><li><p>Use one tool you know well to actually build something functional</p><ul><li><p>I suggest using Lovable/Bolt here</p></li></ul></li><li><p>Focus on clear problem framing, sensible scoping, and moving fast with AI.</p></li></ul><h4><strong>That&#8217;s It</strong></h4><p>Two weeks. The hardest part is getting started. This should get you to a good baseline for common AI fluency interview screens. From here, continue to be curious and experiment, and you&#8217;ll grow from there.</p><p>If you need help, feel free to reach out at bonnieyu.coaching@gmail.com.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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>]]></content:encoded></item><item><title><![CDATA[Prototyping New Features on ChatGPT with Claude Code (Part 2)]]></title><description><![CDATA[Hands On Tutorial Covering Model Selection, Context7, and Rapid UX Prototyping with AI]]></description><link>https://bonnieyu.substack.com/p/prototyping-new-features-on-chatgpt</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/prototyping-new-features-on-chatgpt</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Wed, 11 Feb 2026 18:26:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!42NW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is Part 2 of the Prototype Challenge series, where we build on the simple ChatGPT clone from <a href="/__u/bonnieyu.substack.com/p/prototype-challenge-building-on-chatgpt">Part 1: Building a Simple ChatGPT Clone</a>. As a Product Manager, I&#8217;m a big believer in learning by doing. This time, we&#8217;re using the clone to prototype a folder attachment feature to solve a key user pain point in file management. It&#8217;s a hands-on example of how we can test new UX ideas to eliminate friction and unlock new use cases for AI-powered agents.</p><p><strong>What this tutorial will cover</strong></p><ul><li><p>How to choose an OpenAI model for this use case</p></li><li><p>Using the Context7 MCP so Claude can reference up to date information</p></li><li><p>Workflow to prototype 3 design experiences</p></li><li><p>Using Anthropic&#8217;s Frontend Design Skill</p></li></ul><h3>The Problem: Single File Uploads</h3><p>One quality of life issue in ChatGPT today is file upload. It&#8217;s fine when you have one or two files, but it gets tedious quickly when you have more.</p><p>Here&#8217;s a pain point I personally experienced. I had 5 health records that I wanted ChatGPT to help me analyze. In ChatGPT, I had to:</p><ol><li><p>Click &#8220;Add file.&#8221;</p></li><li><p>Select file 1.</p></li><li><p>Wait for the upload.</p></li><li><p><strong>Repeat X more times.</strong></p></li></ol><p>This created unnecessary friction, but also limits what ChatGPT can do for you.</p><p>New Use Cases Unlocked</p><p>The folder attachment feature is a simple idea: instead of attaching individual files, you attach a folder as a container. Our folder attachment feature will also allow the AI agent to read, write, and organize multiple files within that container. This isn&#8217;t just a standard of quality improvement. It will unlock new productive ways to work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JPmY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JPmY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png 424w, /__u/substackcdn.com/image/fetch/$s_!JPmY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png 848w, /__u/substackcdn.com/image/fetch/$s_!JPmY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JPmY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JPmY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png" width="742" height="263" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:263,&quot;width&quot;:742,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34358,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/187593911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!JPmY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png 424w, /__u/substackcdn.com/image/fetch/$s_!JPmY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png 848w, /__u/substackcdn.com/image/fetch/$s_!JPmY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JPmY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3338e02f-d3cd-48bc-ba0a-78d723ab3cf9_742x263.png 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 aria-hidden="true" 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><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></p><h3>Recap of My Claude Code Workflow</h3><p>If you&#8217;re new to Claude Code and dev workflows, check out my previous post <a href="/__u/bonnieyu.substack.com/p/building-an-ai-pm-interview-site">Building an AI PM Interview Site with Claude Code</a> to walk through installation, setting up project memory, and basic dev workflows. </p><p>Here&#8217;s the high-level flow that I went through in my previous blog posts:</p><ol><li><p>Plan the spec with Claude Code and save it to a markdown file</p></li><li><p>Ask Claude to propose an architecture, then have a second model (e.g., Gemini) review it. Save the plan to a technical-spec</p></li><li><p>Have another LLM such as Gemini review the architecture plan</p></li><li><p>Create a phase by phase plan markdown file to keep track of where you are at</p></li><li><p>Build incrementally with Claude (one phase at a time), testing as you go</p></li><li><p>Commit early and often to GitHub</p></li><li><p>For more robust work: open a pull request and use AI code review (Claude&#8217;s code-review plugin + another model for a second opinion)</p></li><li><p>Log bugs and ideas as GitHub Issues instead of context-switching mid-build</p></li><li><p>If you run into any bugs, copy and paste Claude Code errors you see in the console/server</p></li></ol><p>That&#8217;s also the workflow I used for this project.</p><h3>Choosing the OpenAI Model</h3><p>Before diving deeper into implementation, we need to change our OpenAI model. I&#8217;m going to take a closer look at a few OpenAI models and, more importantly, how to read their documentation and understand what they actually offer.</p><p>This decision matters because it directly impacts:</p><ul><li><p>Cost</p></li><li><p>Capabilities</p></li><li><p>Which features are even possible to build</p></li></ul><p>When choosing a model, I recommend starting with three questions:</p><ul><li><p>Do the model&#8217;s capabilities support the features I want to build?</p></li><li><p>Does the cost make sense for my project or product?</p></li><li><p>Is the speed acceptable for my users?</p></li></ul><p><strong>Feature Support</strong></p><p>If you look at the OpenAI 3.5 Turbo documentation page, you&#8217;ll notice the model doesn&#8217;t support many features:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!TByx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!TByx!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png 424w, /__u/substackcdn.com/image/fetch/$s_!TByx!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png 848w, /__u/substackcdn.com/image/fetch/$s_!TByx!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TByx!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!TByx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png" width="1010" height="185" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:185,&quot;width&quot;:1010,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!TByx!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png 424w, /__u/substackcdn.com/image/fetch/$s_!TByx!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png 848w, /__u/substackcdn.com/image/fetch/$s_!TByx!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TByx!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d4b6135-8c0a-49f8-8e6b-d35d92bfd5cc_1010x185.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>For my folder-based use cases, I need additional capabilities that GPT-3.5 Turbo doesn&#8217;t reliably support.</p><p><strong>Structured Outputs</strong></p><p>Guarantees the AI&#8217;s response matches a JSON schema (a strict format that makes AI outputs predictable) you define. This prevents the model from hallucinating keys or returning malformed data that can break your app logic. See <a href="https://platform.openai.com/docs/guides/structured-outputs?utm_source=chatgpt.com&amp;api-mode=chat">here</a> for details. The structured outputs allows you to use function calling reliability, and also help reduce error handling cases</p><p><strong>Function Calling (aka Tool Calling)</strong></p><p>This allows our ChatGPT agent to &#8220;call&#8221; a specific function. For our project, this will allow the model to tell our app &#8220;I need to read this specific file&#8221; which will trigger our code to read it. See <a href="https://platform.openai.com/docs/guides/function-calling?api-mode=chat">here</a> for details.</p><p>This is how our ChatGPT agent can:</p><ul><li><p>Read files</p></li><li><p>Update files</p></li><li><p>Write new files</p></li><li><p>Delete files when appropriate</p></li></ul><p>The model doesn&#8217;t access files directly. The agent will tells your app what it wants, and your code decides how to fulfill that request.</p><p><strong>Web Search</strong></p><p>You&#8217;ll notice on the model pages there are cut off dates for the model data (e.g. ChatGPT 3.5 is only up to date as of 2021). Web search allows the model to retrieve up-to-date external information. In my case, this is required to find and download earnings reports that aren&#8217;t part of the local folder. It&#8217;s not actually required for adding a folder, but it fulfills one of my use cases.</p><p>If a model doesn&#8217;t support a capability, the request will simply fail. For example, when I asked GPT-3.5 Turbo to perform a web search, it wasn&#8217;t able to complete the task.</p><p>GPT 3.5 Turbo&#8217;s response</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!VlYX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!VlYX!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png 424w, /__u/substackcdn.com/image/fetch/$s_!VlYX!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png 848w, /__u/substackcdn.com/image/fetch/$s_!VlYX!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png 1272w, /__u/substackcdn.com/image/fetch/$s_!VlYX!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!VlYX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png" width="805" height="251" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:251,&quot;width&quot;:805,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!VlYX!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png 424w, /__u/substackcdn.com/image/fetch/$s_!VlYX!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png 848w, /__u/substackcdn.com/image/fetch/$s_!VlYX!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png 1272w, /__u/substackcdn.com/image/fetch/$s_!VlYX!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04a0396-cdba-4484-9dbd-01a57e6318f4_805x251.png 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 aria-hidden="true" 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><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>Tip: You can test the OpenAI model capabilities here </p><p>https://platform.openai.com/chat</p><p>. This lets you switch models and enable or disable capabilities to see how they behave.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rj5T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rj5T!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png 424w, /__u/substackcdn.com/image/fetch/$s_!rj5T!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png 848w, /__u/substackcdn.com/image/fetch/$s_!rj5T!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rj5T!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rj5T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png" width="850" height="416" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:416,&quot;width&quot;:850,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!rj5T!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png 424w, /__u/substackcdn.com/image/fetch/$s_!rj5T!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png 848w, /__u/substackcdn.com/image/fetch/$s_!rj5T!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rj5T!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7125ef-e303-447c-a1ae-886b76efac44_850x416.png 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 aria-hidden="true" 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><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><strong>Cost</strong></p><p>If you&#8217;re building a product intended for production, I recommend testing at least two models at different price points.</p><p>A simple approach:</p><ol><li><p>Start with the highest-capability model that supports everything you need. This gives you the best possible experience.</p></li><li><p>Then test a lower-cost model that also supports your required features.</p></li><li><p>Compare the quality, speed, and reliability differences against the cost savings.</p></li><li><p>Decide which tradeoff makes sense for your product.</p></li></ol><p>In my case, I chose GPT-5 Mini because it hits a sweet spot:</p><ul><li><p>Supports all required capabilities</p></li><li><p>Fast enough for a good user experience</p></li><li><p>Significantly cheaper than the flagship GPT-5 model</p></li></ul><p>Tip: OpenAI has a page where you can compare the capabilities of different models <a href="https://platform.openai.com/docs/models/compare">https://platform.openai.com/docs/models/compare</a></p><p><strong>Example Model Comparison</strong></p><p>Below is a simplified comparison to show how different models stack up</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Kfp6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Kfp6!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png 424w, /__u/substackcdn.com/image/fetch/$s_!Kfp6!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png 848w, /__u/substackcdn.com/image/fetch/$s_!Kfp6!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Kfp6!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Kfp6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png" width="747" height="373" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1870877-84fc-4a89-b345-68d325b6761d_747x373.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:373,&quot;width&quot;:747,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!Kfp6!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png 424w, /__u/substackcdn.com/image/fetch/$s_!Kfp6!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png 848w, /__u/substackcdn.com/image/fetch/$s_!Kfp6!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Kfp6!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1870877-84fc-4a89-b345-68d325b6761d_747x373.png 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 aria-hidden="true" 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><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><h3>The Prompt</h3><p>I want to create a new spec and plan for the folder enhancement. The folder enhancement is a quality of life improvement, but also opens up new use cases.</p><p>Example pain point: I have a number of health record files I wanted ChatGPT to analyze for me. Today, I have to add each file one at a time. If I can add the folder, then ChatGPT can read all the files at once.</p><p>New use cases:</p><ul><li><p>ChatGPT can organize my files inside a folder</p></li><li><p>ChatGPT can download earnings reports from XYZ companies and then write a summary for me. This will allow me to read the earnings reports myself.</p></li></ul><p>Here&#8217;s the user experience</p><p><strong>I want to explore a few different UX/UI options for attaching a folder. Make the &#8220;...&#8221; on the right corner of the chat header a dropdown where I can test 3 different UX/UI ideas</strong></p><ul><li><p>Idea1: Add &#8220;Add Folder&#8221; under the Add files menu in the plus menu</p></li><li><p>Idea 2: Move Add Files and Add Folder as two icons next to the Share icon menu</p></li><li><p>Idea 3: Use the frontend dev design plugin to come up with your own idea on how the UX/UI will work</p></li></ul><p>Core Functionality</p><ul><li><p>User clicks on a Folder icon and the app opens an explorer like window on the right for users to select a folder</p></li><li><p>The agent can read or write to the folder</p></li><li><p>If the agent wants to delete any file, it must ask the user for permission</p></li></ul><p>Model Problem:</p><ul><li><p>We are using ChatGPT 3.5 Turbo right now. In order to fulfill the use cases, I had in mind, we will need a different version of the ChatGPT API. The ChatGPT 5 mini model could be a good fit.</p></li><li><p><strong>Use the context7 MCP to understand the capabilities and constraints of GPT-5-mini and evaluate whether it&#8217;s a better fit for these use cases.</strong></p></li></ul><p>Do not write any code. Let&#8217;s have a conversation to define the spec. Once the spec is finalized, output it as <a href="http://product-spec-folder.md">product-spec-folder.md</a>. Spin up a subagent to research the different OpenAI models to identify which is the best to resolve my use cases.</p><p>Do you have any questions for me?</p><h3>Introducing Context7 MCP for Up to Date Model Information</h3><p>You may have noticed that in the prompt above I asked Claude to use <a href="https://context7.com/">Context7</a>.</p><p>If you&#8217;ve been conversing with Claude Code on the OpenAI models, you&#8217;ll notice it makes a number of mistakes about model capabilities. For example, Claude Code by default thinks that GPT5-mini does not have support for web search, and that we&#8217;d have to use Tavily to handle it! That&#8217;s a big miss.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4Piy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4Piy!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png 424w, /__u/substackcdn.com/image/fetch/$s_!4Piy!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png 848w, /__u/substackcdn.com/image/fetch/$s_!4Piy!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4Piy!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4Piy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png" width="588" height="96" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:96,&quot;width&quot;:588,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!4Piy!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png 424w, /__u/substackcdn.com/image/fetch/$s_!4Piy!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png 848w, /__u/substackcdn.com/image/fetch/$s_!4Piy!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4Piy!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8018c06-feb8-49af-bd75-a7753afcdebb_588x96.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The issue is that Claude Code&#8217;s knowledge is only up to date as of January 2025 so it doesn&#8217;t have knowledge of the newest model.</p><p>Here I&#8217;ll introduce the Context7 MCP. Context7 makes it easy for Claude Code to look up the newest documentation for LLMs and various libraries. Instead of relying on stale training data, Claude can reference the latest official docs when reasoning about capabilities and constraints. </p><p>This will save you pain when you integrate with other libraries or services. Without Context7, Claude may implement an outdated or deprecated endpoint. You&#8217;ll see errors, but it won&#8217;t always be obvious that the issue is stale documentation.</p><p>Once I added the Context7 MCP, Claude Code correctly identified that GPT5-mini does support web search, and how to enable it appropriately.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!AC6m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!AC6m!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png 424w, /__u/substackcdn.com/image/fetch/$s_!AC6m!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png 848w, /__u/substackcdn.com/image/fetch/$s_!AC6m!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AC6m!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!AC6m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png" width="600" height="247" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a2c56bd-2334-4117-833a-335550ff4865_600x247.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:247,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!AC6m!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png 424w, /__u/substackcdn.com/image/fetch/$s_!AC6m!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png 848w, /__u/substackcdn.com/image/fetch/$s_!AC6m!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AC6m!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a2c56bd-2334-4117-833a-335550ff4865_600x247.png 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 aria-hidden="true" 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><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><strong>Installing Context7 MCP</strong></p><p>If you want to install the Context7 MCP in Claude Code, run this</p><pre><code>claude mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY</code></pre><p>Additional installation notes and usage tips can be found <a href="https://github.com/upstash/context7#installation">here</a>.</p><p>You&#8217;ll want an API key to increase your rate limits, which you can get on their website. If you run into trouble, ask Claude Code to help you add the MCP.</p><p>Type /mcp to see what MCP servers you are connected to</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HgW8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HgW8!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png 424w, /__u/substackcdn.com/image/fetch/$s_!HgW8!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png 848w, /__u/substackcdn.com/image/fetch/$s_!HgW8!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HgW8!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HgW8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png" width="617" height="326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:326,&quot;width&quot;:617,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!HgW8!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png 424w, /__u/substackcdn.com/image/fetch/$s_!HgW8!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png 848w, /__u/substackcdn.com/image/fetch/$s_!HgW8!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HgW8!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55c217f-cf30-470f-b2b9-5f926f29bac5_617x326.png 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 aria-hidden="true" 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><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><blockquote><p>Note: MCP allows LLMs to talk to external apps and tools in a standard, reusable way.</p></blockquote><p>If you&#8217;re worried about the MCP using too much tokens, a common issue with MCPs, here&#8217;s the token usage for the Context7 after I queried about the search capability</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Dva6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Dva6!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png 424w, /__u/substackcdn.com/image/fetch/$s_!Dva6!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png 848w, /__u/substackcdn.com/image/fetch/$s_!Dva6!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Dva6!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Dva6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png" width="597" height="291" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:291,&quot;width&quot;:597,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!Dva6!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png 424w, /__u/substackcdn.com/image/fetch/$s_!Dva6!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png 848w, /__u/substackcdn.com/image/fetch/$s_!Dva6!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Dva6!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e1cb830-19e6-48db-8ab6-32fbdcfc969f_597x291.png 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 aria-hidden="true" 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><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><blockquote><p>FYI: I&#8217;m offering a free lightning lesson to help new PMs (and non PMs) build up their UX and Design muscle in March. Sign up <a href="https://maven.com/p/ac869b/ux-design-for-p-ms-in-an-ai-first-world">here</a>. If you want more personalized coaching and practice, hit me up at bonnieyu.coaching@gmail.com.</p></blockquote><h3>Prototyping 3 UX Experiences</h3><p>PMs are increasingly expected to prototype features,not just write specs. And when you prototype, it&#8217;s not enough to build one version and call it done. You want to test variations.</p><p>For this folder feature, I explicitly asked Claude to generate multiple UX approaches so I could compare them side by side.</p><p>In my original prompt, I wrote:</p><p>I want to explore a few different UX/UI options for attaching a folder. Make the &#8220;...&#8221; on the right corner of the chat header a dropdown where I can test 3 different UX/UI ideas</p><p>Then I gave it three directions:</p><ul><li><p>Add &#8220;Add Folder&#8221; under the Add files menu in the plus menu</p></li><li><p>Move Add Files and Add Folder as two icons next to the Share icon menu</p></li><li><p>Use the frontend dev design plugin to propose an alternative UX/UI</p></li></ul><p>This is a simple but effective pattern. Instead of debating where something should live, you generate options and test them.</p><p>Claude produced three working variations that I could click through and compare. </p><p><strong>Floating Button Design</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!AR0_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!AR0_!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png 424w, /__u/substackcdn.com/image/fetch/$s_!AR0_!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png 848w, /__u/substackcdn.com/image/fetch/$s_!AR0_!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AR0_!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!AR0_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png" width="1456" height="751" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:751,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:371637,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/187593911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!AR0_!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png 424w, /__u/substackcdn.com/image/fetch/$s_!AR0_!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png 848w, /__u/substackcdn.com/image/fetch/$s_!AR0_!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AR0_!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8776db-28f3-46d1-b8c9-c4f93287afc3_1573x811.png 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 aria-hidden="true" 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><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><strong>Demo of All 3 Designs</strong></p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;49cc71a3-f297-46fb-bb57-9782ef30540a&quot;,&quot;duration&quot;:null}"></div><p>After playing with the 3 options, I came up with a new idea. I realized that the &#8220;+&#8221; menu was overloaded with items, and decided to redesign the menu entirely. I asked Claude to move group the &#8220;+&#8221; menu items into 3 groups: Attachments, Actions, and Apps to represent all of ChatGPT&#8217;s menu items. Create 3 new icons and move it to the chat header.</p><p><strong>Dropdown with All Design Variations</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XWPp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XWPp!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png 424w, /__u/substackcdn.com/image/fetch/$s_!XWPp!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png 848w, /__u/substackcdn.com/image/fetch/$s_!XWPp!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XWPp!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XWPp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png" width="1397" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1397,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:107745,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/187593911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!XWPp!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png 424w, /__u/substackcdn.com/image/fetch/$s_!XWPp!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png 848w, /__u/substackcdn.com/image/fetch/$s_!XWPp!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XWPp!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d68a5f-ead1-440f-88a9-163f6db13696_1397x722.png 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 aria-hidden="true" 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><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><strong>New ChatGPT Menu Design</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!42NW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!42NW!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png 424w, /__u/substackcdn.com/image/fetch/$s_!42NW!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png 848w, /__u/substackcdn.com/image/fetch/$s_!42NW!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png 1272w, /__u/substackcdn.com/image/fetch/$s_!42NW!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!42NW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png" width="1397" height="721" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:721,&quot;width&quot;:1397,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:92845,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/187593911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!42NW!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png 424w, /__u/substackcdn.com/image/fetch/$s_!42NW!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png 848w, /__u/substackcdn.com/image/fetch/$s_!42NW!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png 1272w, /__u/substackcdn.com/image/fetch/$s_!42NW!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e54219c-450c-4f65-9e4f-f38bddc00fad_1397x721.png 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KO1j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KO1j!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png 424w, /__u/substackcdn.com/image/fetch/$s_!KO1j!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png 848w, /__u/substackcdn.com/image/fetch/$s_!KO1j!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KO1j!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KO1j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png" width="1396" height="713" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:713,&quot;width&quot;:1396,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98712,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/187593911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!KO1j!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png 424w, /__u/substackcdn.com/image/fetch/$s_!KO1j!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png 848w, /__u/substackcdn.com/image/fetch/$s_!KO1j!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KO1j!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516fffb6-ae4f-4809-9191-96f41b6de123_1396x713.png 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 aria-hidden="true" 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><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></p><p></p><p>That&#8217;s the value of prototyping multiple paths early: it prevents you from anchoring too quickly on your first idea.</p><p><strong>Using Anthropic&#8217;s Frontend-Design Skill</strong></p><p>For one of the variations, I asked Claude to use Anthropic&#8217;s frontend-design skill.</p><p>The frontend design skill is a curated prompt that Anthropic wrote to avoid common AI slop issues like generic layouts or color palettes. You can view the skill definition <a href="https://github.com/anthropics/claude-code/blob/main/plugins/frontend-design/skills/frontend-design/SKILL.md">here</a></p><p>This is kind of the &#8220;surprise&#8221; me option.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!kjGu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!kjGu!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png 424w, /__u/substackcdn.com/image/fetch/$s_!kjGu!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png 848w, /__u/substackcdn.com/image/fetch/$s_!kjGu!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kjGu!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!kjGu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png" width="820" height="337" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:337,&quot;width&quot;:820,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!kjGu!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png 424w, /__u/substackcdn.com/image/fetch/$s_!kjGu!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png 848w, /__u/substackcdn.com/image/fetch/$s_!kjGu!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kjGu!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F884b2f4f-9cd6-46ae-bd0d-b70fd798378b_820x337.png 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 aria-hidden="true" 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><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><h3>Wrapping Up</h3><p>In Part 1, we built the foundation: a working ChatGPT clone (repo <a href="https://github.com/yuqiaoyan/ChatGPTChallenge2026">here</a> if you want to prototype a new feature too).</p><p>In this post, we walked through:</p><ul><li><p>The product pain point</p></li><li><p>Model tradeoffs</p></li><li><p>Updated documentation via Context7</p></li><li><p>Prototyping multiple UX variations</p></li></ul><p>The folder feature is intentionally scoped. It solves a real friction point, but it also opens a whole new set of use cases that the agent can do once it has access to your local drive.</p><p>In Part 3, we&#8217;ll push this further. Instead of a quality-of-life improvement, we&#8217;ll prototype a more complex feature that depends on the same foundation, and we&#8217;ll look at what breaks when the system gets more ambitious.</p><p>If you&#8217;re participating in the prototype challenge and building a new feature yourself, I&#8217;d love to see and share it. DM me your repo at <a href="https://www.linkedin.com/in/bonnieyu1/">https://www.linkedin.com/in/bonnieyu1/</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Prototype Challenge: Building on ChatGPT Part 1]]></title><description><![CDATA[Building a ChatGPT clone with Claude Code, from API keys to code review workflows]]></description><link>https://bonnieyu.substack.com/p/prototype-challenge-building-on-chatgpt</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/prototype-challenge-building-on-chatgpt</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Thu, 05 Feb 2026 21:39:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gRm8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In December 2025, Sam Altman wrote an <a href="https://www.forbes.com/sites/siladityaray/2025/12/02/altman-code-red-memo-urges-chatgpt-improvements-amid-growing-threat-from-google-reports-say/">internal memo</a> declaring a &#8220;Code Red&#8221; for improving ChatGPT. And now I keep seeing LinkedIn Posts of people cancelling their subscriptions. As a daily user of ChatGPT, I agree there&#8217;s work to be done in ChatGPT. The great thing about this AI era is that you don&#8217;t need to work at OpenAI to experiment with better ideas. Anyone can prototype new ideas. So instead of just critiquing ChatGPT from the sidelines, let&#8217;s try something more hands on.</p><p>Let&#8217;s build it.</p><h3>What this tutorial is about</h3><p>The tutorial will build a simple ChatGPT clone from scratch. Nothing fancy. Something basic for us to build more features on top of to show what the experience might look like.</p><p>Along the way, we&#8217;ll:</p><ul><li><p>Use advanced dev workflows and Claude Code features (e.g. the code review plugin)</p></li><li><p>Implement a basic chat architecture</p></li><li><p>Explore message streaming and context management</p></li></ul><p>If you&#8217;re new to Claude Code, start with <a href="/__u/bonnieyu.substack.com/p/building-an-ai-pm-interview-site">Building an AI PM Interview Site with Claude Code</a> where I walk through setup, Project Memory, using console to send errors, and other basic workflows. I will not be covering those flows here.</p><h3>Prototype Challenge!</h3><p>This project is intentionally designed to be forked and extended. I&#8217;m providing a very simple ChatGPT clone on Github (<a href="https://github.com/yuqiaoyan/ChatGPTChallenge2026/tree/main">ChatGPTChallenge 2026 Repository</a>), so you can build your own creative features.</p><p>Think of it as a prototype challenge:</p><ul><li><p>Add a feature you&#8217;ve always wished ChatGPT had</p></li><li><p>Explore a different way of managing context or memory</p></li><li><p>Experiment with new interaction patterns or workflows</p></li></ul><p>This is a great learning exercise (and maybe a nudge to OpenAI to implement your idea!).</p><p>PMs today are increasingly expected to prototype new ideas, not just write specs. I&#8217;m a big believer in learning by doing. You can imagine yourself as a PM working in OpenAI, tasked with prototyping a new idea. In this project, you&#8217;ll build off an existing product, test different UX ideas, and figure out what prototyping workflow is best for you.</p><p>As a bonus, if you haven&#8217;t built an AI agent yet, this project will push you to learn about context management, message streaming, etc. Once you&#8217;ve gone through this process, you&#8217;ll be able to start answering some common AI PM interview questions.</p><p>Here&#8217;s a few AI PM Interview Questions to kickstart some prototyping ideas:</p><ul><li><p>Design a collaborative workspace for teams within ChatGPT</p></li><li><p>As an OpenAI PM, build a new product feature for enterprise users</p></li></ul><p>If you want to start prototyping, start by cloning the repo: <a href="https://github.com/yuqiaoyan/ChatGPTChallenge2026/tree/main">https://github.com/yuqiaoyan/ChatGPTChallenge2026/tree/main</a></p><p>The tutorial will walk through building the ChatGPT clone and some more advanced development workflows.</p><p><strong>**Disclaimer:**</strong> This project is not affiliated with or sponsored by OpenAI.</p><h3>Planning the App</h3><p><strong>Writing the Spec</strong></p><p>Here&#8217;s the prompt to get started:</p><div><hr></div><p>I am building a simple ChatGPT clone. It will be a web app with a small set of features. Create a product spec with me, and output it as a markdown file (product-spec.md).</p><p>Here are some basic requirements:</p><ul><li><p>Responsive web app (desktop and mobile)</p></li><li><p>Create New Chat</p></li><li><p>Send messages and receive responses like ChatGPT</p></li><li><p>A list of recent Chats in sidebar</p></li><li><p>UI that matches ChatGPT&#8217;s design (include icons even though they serve no functionality) - see attachments</p></li></ul><p>This will serve as a foundation for prototyping advanced features later. As an example of a future feature, add the ability to attach a folder to a ChatGPT chat, so users can pull all content from that folder (local folder on your machine) and create new content to be put into that folder.</p><p>Ask me any clarifying questions</p><div><hr></div><p>** I screenshotted the ChatGPT app and gave that to Claude. You can also copy some of the CSS from the ChatGPT web app so it matches the UI better</p><p><strong>Choosing the Model</strong></p><p>Because this is a ChatGPT clone, I decided to use the OpenAI API.</p><p>I didn&#8217;t overthink model selection for the base clone. Claude recommended gpt-3.5-turbo by default, and it&#8217;s fast and inexpensive, which made it a good starting point.</p><p>For a simple chat clone, the quality is good enough, and the low cost makes testing cheaper. I&#8217;ll do a deeper dive into model selection in my follow up post where I&#8217;ll need additional functionality for the features I&#8217;m prototyping. At this stage, the goal was to get something working end to end, not optimize for model quality.</p><p><strong>Architecting the Code</strong></p><p>As usual, I asked Claude to propose an architecture for the ChatGPT clone app. Then I followed up with a critical part of my workflow - I asked Gemini to review the plan for extensibility, scalability, and security. See <a href="/__u/bonnieyu.substack.com/p/building-an-ai-pm-interview-site">my previous post</a> for more details on the workflow.</p><p>As usual, Gemini made some good notes</p><ol><li><p>Local folder access is constrained by the browser. The File System Access API works, but mostly in Chrome/Edge</p></li><li><p>Flat message lists won&#8217;t support future branching. If I wanted multi-threaded conversations later (one of my planned enhancements), we&#8217;ll need to build with a tree data structure in mind</p></li></ol><p>Based on the feedback, Claude updated the message data structure to include a parent-child relationship so we don&#8217;t need migration later.</p><p>Two key takeaways here:</p><ol><li><p>Using another model to critique another is one of my favorite AI workflows</p></li><li><p>If you have future feature ideas in mind, include them early so your system can be architected to support them otherwise future migrations can be painful.</p></li></ol><p><strong>Key Architectural Decisions</strong></p><ul><li><p><strong>Context Management</strong> - One of the most important design decisions is how we handle conversation context. For our base clone, I chose the simplest approach to get started quickly: Every time the user sends a message, the app sends the entire conversation history to the model. The downside is as the conversation grows, the token usage increases and you eventually hit context limits. These are product decisions you need to consider when you are building your own agent. <br><br>Note: Different models have different max context windows. ChatGPT 3.5 turbo has 16k tokens as the context window. See <a href="https://platform.openai.com/docs/models/gpt-5-mini">here</a> for details<br></p></li><li><p><strong>Streaming vs Not Streaming Responses</strong> - We&#8217;ll be using ChatGPT&#8217;s Completion APIs with <strong>streaming enabled</strong>. ChatGPT feels fast because it streams tokens as they&#8217;re generated. Without streaming, the app would wait until the entire response is finished before displaying anything, which usually means staring at a spinner for several seconds. Even when total latency is similar, streaming dramatically improves perceived performance. This isn&#8217;t just a technical choice; it&#8217;s a UX decision.</p></li></ul><h3>Getting an OpenAI API key</h3><p><strong>What&#8217;s an API key?</strong></p><p>An API key lets your app send requests to OpenAI&#8217;s models. It&#8217;s also how OpenAI tracks usage and billing. You should <strong>never</strong> put this key in frontend code or commit it to GitHub.</p><p><strong>How to get one</strong></p><ol><li><p>Create an account with OpenAI at https://platform.openai.com/</p></li><li><p>Go to<a href="https://platform.openai.com/api-keys"> https://platform.openai.com/api-keys</a></p></li><li><p>Click <strong>Create new secret key</strong></p></li><li><p>Copy it somewhere safe</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Bzv0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Bzv0!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png 424w, /__u/substackcdn.com/image/fetch/$s_!Bzv0!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png 848w, /__u/substackcdn.com/image/fetch/$s_!Bzv0!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Bzv0!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Bzv0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png" width="1456" height="653" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:653,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!Bzv0!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png 424w, /__u/substackcdn.com/image/fetch/$s_!Bzv0!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png 848w, /__u/substackcdn.com/image/fetch/$s_!Bzv0!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Bzv0!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f55bb6-5eda-4c30-b81c-39115453fa25_1600x718.png 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 aria-hidden="true" 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><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><blockquote><p>Tip: For API Keys, I usually store it as Password in my password manager so I can easily retrieve it if I need to</p></blockquote><p>You will also be able to check here <a href="https://platform.openai.com/usage">https://platform.openai.com/usage</a> for data on how much the API calls are costing you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yqZ4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yqZ4!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png 424w, /__u/substackcdn.com/image/fetch/$s_!yqZ4!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png 848w, /__u/substackcdn.com/image/fetch/$s_!yqZ4!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yqZ4!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yqZ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png" width="1456" height="501" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:501,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!yqZ4!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png 424w, /__u/substackcdn.com/image/fetch/$s_!yqZ4!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png 848w, /__u/substackcdn.com/image/fetch/$s_!yqZ4!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yqZ4!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99319f6f-8691-4d79-9221-e182f30dc579_1600x551.png 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 aria-hidden="true" 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><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><strong>Where it lives</strong></p><p>In this project, the key will go in a .env file:</p><p>OPENAI_API_KEY=sk-xxxxxxxxxxxx</p><p>That file should be ignored by Git (.gitignore) and never exposed to the browser. This might sound like a small detail, but one leaked key can rack up thousands of dollars in usage. Claude Code (or your favorite coding agent) can walk you through this if you&#8217;re not familiar with the process.</p><h3>Building the App</h3><p>Once you have the plan in place and a step by step phase, it&#8217;s time to start building the app incrementally. I&#8217;m approaching this a little differently than a throwaway prototype. Since I&#8217;m sharing this code with others, I want to add more robustness to our codebase.</p><p>To support that, I&#8217;ll be introducing a code review workflow I use when working with more complex projects.</p><p><strong>Building the UI</strong></p><p>For the frontend, I broke the work into incremental stages instead of trying to build everything at once.</p><p>The goal is simple:</p><ul><li><p>Build a small slice</p></li><li><p>Test it manually</p></li><li><p>Get feedback</p></li><li><p>Move on to the next slice</p></li></ul><p>This reduces risk and makes debugging much easier. If something breaks, I know exactly which change caused it.</p><p>Example Screenshot of Building Core UI Components</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!nWuy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!nWuy!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png 424w, /__u/substackcdn.com/image/fetch/$s_!nWuy!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png 848w, /__u/substackcdn.com/image/fetch/$s_!nWuy!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nWuy!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!nWuy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png" width="1361" height="766" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:766,&quot;width&quot;:1361,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!nWuy!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png 424w, /__u/substackcdn.com/image/fetch/$s_!nWuy!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png 848w, /__u/substackcdn.com/image/fetch/$s_!nWuy!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nWuy!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f3a4d1-2357-4384-9e95-b690857d0aaa_1361x766.png 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 aria-hidden="true" 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><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><h3>Using AI Agents and Pull Requests to Build More Robust Code</h3><p>Since this is a more complex project, we are going to introduce a lightweight code review process built around feature branches and pull requests.</p><p>When we first pushed to GitHub, everything lived on the <strong>main</strong> branch. From here on, all new work happens in a separate <strong>feature branch</strong> and a <strong>pull request</strong> is how that work gets reviewed and proposed for merging back into main.</p><p>If this sounds like a lot of engineering jargon, here&#8217;s the simple version:</p><p>We let Claude write code in a separate place (&#8220;feature branch&#8221;), then ask for a code review (&#8220;pull request&#8221;) before we put it into our main codebase.</p><p>Instead of pushing changes directly to main with no review, I open a pull request from my new feature branch. And then I use an AI agent to review the code. Pull requests give LLMs a clean, focused piece of work that can be compared against the main code base. It makes it easier for the LLM to compare what changed against what already existed that will improve the quality of the code review feedback.</p><p>In other words: the pull request workflow will make AI code reviews better.</p><p><strong>The Simple Workflow (You Can Ask Claude to Walk You Through This)</strong></p><p>For non-technical PMs, this is the mental model I use:</p><ol><li><p><strong>Create a feature branch - </strong>This is where all new code lives while you&#8217;re experimenting.</p></li><li><p><strong>Build and commit changes in that branch -</strong> You&#8217;re free to iterate without worrying about breaking anything.</p></li><li><p><strong>Open a pull request back to main - </strong>This shows exactly what changed compared to the existing code.</p></li><li><p><strong>Ask AI agents to review the pull request - </strong>Give them the PR diff and a specific goal (clarity, architecture, edge cases).</p></li><li><p><strong>Decide what to merge -</strong> Apply feedback, then merge when it looks good.</p></li></ol><p>You don&#8217;t need to memorize Git commands to do this. You can literally ask Claude:</p><blockquote><p>&#8220;Create a feature branch, commit my changes, open a pull request, and walk me through each step.&#8221;</p></blockquote><p><strong>Reviewing Code with AI Agents</strong></p><p>Once the pull request exists, I bring in AI agents as reviewers. There&#8217;s two main ways I do this:</p><ol><li><p>Use Anthropic&#8217;s <a href="https://github.com/anthropics/claude-code/tree/main/plugins/code-review">Code Review Plugin</a>. This plugin spins up multiple agents to review the code for bugs, Claude.md compliance, and context based issues</p></li><li><p>Ask <a href="https://geminicli.com/docs/get-started/installation/">Gemini CLI</a> or <a href="https://developers.openai.com/codex/cli/">Codex CLI</a> to code review for architecture, scalability, and edge cases in mind. Simply open a new terminal and ask the agent to review the PR.</p></li></ol><p>Screenshot of the Code Review Plugins output</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!8dVx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!8dVx!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png 424w, /__u/substackcdn.com/image/fetch/$s_!8dVx!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png 848w, /__u/substackcdn.com/image/fetch/$s_!8dVx!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png 1272w, /__u/substackcdn.com/image/fetch/$s_!8dVx!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!8dVx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png" width="1247" height="427" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:427,&quot;width&quot;:1247,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!8dVx!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png 424w, /__u/substackcdn.com/image/fetch/$s_!8dVx!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png 848w, /__u/substackcdn.com/image/fetch/$s_!8dVx!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png 1272w, /__u/substackcdn.com/image/fetch/$s_!8dVx!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf965fd2-27b5-47e1-8c31-b2ba3143aaa8_1247x427.png 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 aria-hidden="true" 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><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>Screenshot of Gemini Code Review Output</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!D1kQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!D1kQ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png 424w, /__u/substackcdn.com/image/fetch/$s_!D1kQ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png 848w, /__u/substackcdn.com/image/fetch/$s_!D1kQ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png 1272w, /__u/substackcdn.com/image/fetch/$s_!D1kQ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!D1kQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png" width="1047" height="547" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:547,&quot;width&quot;:1047,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!D1kQ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png 424w, /__u/substackcdn.com/image/fetch/$s_!D1kQ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png 848w, /__u/substackcdn.com/image/fetch/$s_!D1kQ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png 1272w, /__u/substackcdn.com/image/fetch/$s_!D1kQ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F558fe06c-adb4-4b26-8306-4ad7dccbe085_1047x547.png 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 aria-hidden="true" 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><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>Note: You can use Claude and Gemini Side by Side to run multiple tasks at once by adjusting the layout</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Q1lK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Q1lK!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png 424w, /__u/substackcdn.com/image/fetch/$s_!Q1lK!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png 848w, /__u/substackcdn.com/image/fetch/$s_!Q1lK!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Q1lK!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Q1lK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png" width="1456" height="797" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:797,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!Q1lK!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png 424w, /__u/substackcdn.com/image/fetch/$s_!Q1lK!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png 848w, /__u/substackcdn.com/image/fetch/$s_!Q1lK!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Q1lK!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb9dd03-a103-4b6e-8a6d-b87bbf27155d_1600x876.png 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 aria-hidden="true" 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><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><strong>A Quit Note on Plugins</strong></p><p><a href="https://code.claude.com/docs/en/plugins">Plugins</a> extend Claude Code&#8217;s capabilities with skills, agents, hooks and MCP servers.</p><p>To install, type /plugin. Anthropic provides a number of first party first party Anthropic plugins such as code-review. Another way to think about it is Plugins is a delivery mechanism to package different Claude Code skills/agents etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hEHF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hEHF!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png 424w, /__u/substackcdn.com/image/fetch/$s_!hEHF!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png 848w, /__u/substackcdn.com/image/fetch/$s_!hEHF!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hEHF!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hEHF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png" width="376" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/511f3657-dad5-4b27-918d-760fb3376be6_376x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!hEHF!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png 424w, /__u/substackcdn.com/image/fetch/$s_!hEHF!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png 848w, /__u/substackcdn.com/image/fetch/$s_!hEHF!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hEHF!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F511f3657-dad5-4b27-918d-760fb3376be6_376x800.png 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 aria-hidden="true" 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><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>Once Anthropic&#8217;s Code Review Plugin is installed, you can type /code-review to start the code review for the pull request:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pndG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pndG!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png 424w, /__u/substackcdn.com/image/fetch/$s_!pndG!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png 848w, /__u/substackcdn.com/image/fetch/$s_!pndG!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pndG!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pndG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png" width="1262" height="342" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a436059-74b4-4a69-a112-4ed988364940_1262x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:342,&quot;width&quot;:1262,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!pndG!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png 424w, /__u/substackcdn.com/image/fetch/$s_!pndG!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png 848w, /__u/substackcdn.com/image/fetch/$s_!pndG!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pndG!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a436059-74b4-4a69-a112-4ed988364940_1262x342.png 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 aria-hidden="true" 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><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><h3>Building New Chat</h3><p>Now that we&#8217;ve got our workflows in place, it&#8217;s about working through the phases of implementation and building out the rest of the capabilities: API integration, State management, Chat functionality, etc.</p><p>Screenshot of the prototype in progress</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!gRm8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!gRm8!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png 424w, /__u/substackcdn.com/image/fetch/$s_!gRm8!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png 848w, /__u/substackcdn.com/image/fetch/$s_!gRm8!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gRm8!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!gRm8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png" width="1368" height="846" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:846,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!gRm8!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png 424w, /__u/substackcdn.com/image/fetch/$s_!gRm8!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png 848w, /__u/substackcdn.com/image/fetch/$s_!gRm8!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gRm8!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00d0deb-054a-4759-8833-6894ecbe5f6b_1368x846.png 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 aria-hidden="true" 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><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><h3>Using Github Issues to Track Bugs and New Ideas</h3><p>As you are working, you might hit bugs or ideas that you want to address later.</p><p>For example, once I had basic back-and-forth messaging working between the user and the agent, I noticed that the text was streaming much faster than ChatGPT&#8217;s behavior. It didn&#8217;t feel right, but I also didn&#8217;t want to stop and tune streaming behavior while I was still wiring up core functionality.</p><p>So instead of context switching, I simply asked Claude to create a Github Issue.</p><p><a href="https://docs.github.com/en/issues/tracking-your-work-with-issues/learning-about-issues/about-issues">Github Issues</a> is a project management tool built within Github itself to track ideas, feedback, and bugs. You can also use tools like Linear or Jira, but for small projects especially when I&#8217;m working solo I prefer to keep things simple. I already have the GitHub CLI installed, so creating and managing issues is quick. Other tools require additional setup or integrations, which adds overhead.</p><p>Screenshot of Github Issues UI</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zjl2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zjl2!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png 424w, /__u/substackcdn.com/image/fetch/$s_!zjl2!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png 848w, /__u/substackcdn.com/image/fetch/$s_!zjl2!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zjl2!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zjl2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png" width="1456" height="543" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:543,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!zjl2!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png 424w, /__u/substackcdn.com/image/fetch/$s_!zjl2!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png 848w, /__u/substackcdn.com/image/fetch/$s_!zjl2!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zjl2!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe51c6f-49fa-4513-b77e-40b0634d7c19_1600x597.png 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!70uv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!70uv!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png 424w, /__u/substackcdn.com/image/fetch/$s_!70uv!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png 848w, /__u/substackcdn.com/image/fetch/$s_!70uv!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png 1272w, /__u/substackcdn.com/image/fetch/$s_!70uv!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!70uv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png" width="1456" height="632" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/12adb64c-6162-451a-847d-11967c7e855c_1600x694.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:632,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!70uv!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png 424w, /__u/substackcdn.com/image/fetch/$s_!70uv!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png 848w, /__u/substackcdn.com/image/fetch/$s_!70uv!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png 1272w, /__u/substackcdn.com/image/fetch/$s_!70uv!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12adb64c-6162-451a-847d-11967c7e855c_1600x694.png 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 aria-hidden="true" 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><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><h3>Wrapping Up (and What&#8217;s Next)</h3><p>At this point, we have a working base ChatGPT clone!</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;e5a4d763-6960-4551-8940-5ab8bde6a4a5&quot;,&quot;duration&quot;:null}"></div><p></p><p>In the next article, I&#8217;ll build on this base by prototyping a concrete enhancement: attaching a folder to a ChatGPT chat so users can create, edit, and reorganize content directly inside that folder. I&#8217;ll walk through how to think about model selection, product design, how to prototype interactions quickly with AI, and what tradeoffs show up once real files are involved.</p><p>This is part of a 3 part series. So I&#8217;ll end with a final article that pushes the prototype further. I&#8217;ll build a more complex feature on top of the same base clone - one I keep wishing ChatGPT or Claude would add!</p><p><strong>FYI: </strong>I&#8217;m offering a free lightning lesson through Maven to help newer PMs build up their UX and Design muscle in March. Sign up <a href="https://maven.com/p/ac869b/ux-design-for-p-ms-in-an-ai-first-world">here</a>. If you want more personalized coaching and practice, hit me up at bonnieyu.coaching@gmail.com.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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><p></p>]]></content:encoded></item><item><title><![CDATA[Building an AI PM Interview Site with Claude Code]]></title><description><![CDATA[Getting Started with Claude Code and Development Workflows for Product Managers]]></description><link>https://bonnieyu.substack.com/p/building-an-ai-pm-interview-site</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/building-an-ai-pm-interview-site</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Tue, 20 Jan 2026 18:10:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Oci8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This tutorial will help you get you going with Claude Code (+ VS Code) and some basic development workflows and best practices. If you&#8217;re a non-technical Product Manager, Claude Code can feel intimidating at first with the terminal and all the surrounding &#8220;developer stuff.&#8221;</p><p>The goal of this guide is to lower that barrier.</p><p>The project we are building will be an AI PM Interview prep website. It will include a small collection of real AI PM interview questions that people have reported, plus some curated resources for learning key AI topics. The project itself is intentionally simple; the point isn&#8217;t to build something fancy, it&#8217;s to get comfortable working in a real codebase with Claude Code (CC).</p><h3>Claude Code vs. Lovable/Replit/Bolt/etc</h3><p>Before jumping in, let&#8217;s talk about why Claude Code, and when to use CC.</p><p>If you are building a simple app, a weekend project where you&#8217;re going to throw away the code, Lovable/Replit/Bolt etc are great for the job. They&#8217;re extremely easy to get started with, and they handle a lot of things for you automatically, like hosting and setup.</p><p>But if you&#8217;re building something more complex, or something you plan to keep working on over time, Claude Code is worth considering. It gives you more control, and it scales much better as your project grows.</p><p>Here&#8217;s the 3 reasons why I choose CC:</p><ul><li><p><strong>Cost</strong> - Claude Code is part of Anthropic&#8217;s pro plan which I already pay for, so instead of paying for another tool I can simply use CC. OpenAI similarly gives you Codex CLI for their Pro plan</p></li><li><p><strong>Better at Coding</strong> - CC is generally agreed on as a better coding agent than Lovable or Bolt&#8217;s. So if you have a more complexity in the app, then I&#8217;d pick CC otherwise you&#8217;ll find yourself fighting more bugs</p></li><li><p><strong>Control and Technology Choice</strong> - Lovable uses Javascript, Replit uses Typescript. It locks you into a specific tech stack. If you want to build a native iOS app (which is written in Swift or Objective C), then that&#8217;s a problem. With CC, you can use any language or framework you want. You have more freedom</p></li></ul><h3>Installing and Setting Up</h3><p>Claude Code can be used in all sorts of places. You can use it purely in terminal only, use it in Cursor, in Replit, in <a href="https://code.claude.com/docs/en/desktop">Claude Desktop</a> or <a href="https://code.claude.com/docs/en/claude-code-on-the-web">Claude Code Web</a>.</p><p>In this guide, I&#8217;m going to use Claude Code inside VS Code. If you don&#8217;t know, VS Code is a very popular code editor (IDE), in fact Cursor and Windsurf are forks of it! You&#8217;ll be able to easily compare code diffs, integrate with your versioning system, etc. The best part is it&#8217;s FREE.</p><p><strong>Install <a href="https://code.claude.com/docs/en/setup">Claude Code</a></strong></p><ul><li><p>Go to your terminal and type in: <br>macOS, Linux, WSL</p></li></ul><pre><code>curl -fsSL https://claude.ai/install.sh | bash</code></pre><p>       Windows CMD</p><pre><code>curl -fsSL https://claude.ai/install.cmd -o install.cmd &amp;&amp; install.cmd &amp;&amp; del install.cmd        </code></pre><p><strong>Install VS Code</strong></p><ul><li><p>Download for your system here: https://code.visualstudio.com/docs/setup/setup-overview</p></li></ul><p><strong>Install Claude Code Extension in VS Code</strong></p><p>In VS Code, go to Extensions panel and download and install the Claude Code Extension. This gives you tighter integration and a nicer UI for working with Claude Code. Click on the icon in the left sidebar to open the Extensions panel</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ql3I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ql3I!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png 424w, /__u/substackcdn.com/image/fetch/$s_!ql3I!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png 848w, /__u/substackcdn.com/image/fetch/$s_!ql3I!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ql3I!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ql3I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png" width="41" height="37" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d52721a8-00bd-4136-90ab-30620398af37_41x37.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:37,&quot;width&quot;:41,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&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="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!ql3I!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png 424w, /__u/substackcdn.com/image/fetch/$s_!ql3I!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png 848w, /__u/substackcdn.com/image/fetch/$s_!ql3I!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ql3I!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd52721a8-00bd-4136-90ab-30620398af37_41x37.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Getting Oriented with Claude Code and VS Code</h3><p><strong>Understanding the VS Code Layout</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lNli!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lNli!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png 424w, /__u/substackcdn.com/image/fetch/$s_!lNli!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png 848w, /__u/substackcdn.com/image/fetch/$s_!lNli!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lNli!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lNli!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png" width="1456" height="981" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:981,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!lNli!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png 424w, /__u/substackcdn.com/image/fetch/$s_!lNli!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png 848w, /__u/substackcdn.com/image/fetch/$s_!lNli!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lNli!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc9527d-1c07-41b7-87d1-c8ac571ac330_1505x1014.png 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 aria-hidden="true" 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><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>Before we start building anything, it&#8217;s worth getting oriented in the UI.</p><p><strong>Explorer</strong>  - This is where you can see all your folders and files for your project</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jIZB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jIZB!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png 424w, /__u/substackcdn.com/image/fetch/$s_!jIZB!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png 848w, /__u/substackcdn.com/image/fetch/$s_!jIZB!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jIZB!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jIZB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png" width="33" height="37" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:37,&quot;width&quot;:33,&quot;resizeWidth&quot;:33,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!jIZB!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png 424w, /__u/substackcdn.com/image/fetch/$s_!jIZB!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png 848w, /__u/substackcdn.com/image/fetch/$s_!jIZB!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jIZB!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca7d4dd5-af1f-4afd-b9b2-122c0fa4c3ec_33x37.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Claude Code Icon</strong>  - Once the extension is installed, you can access Claude Code in the Sidebar</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ou6f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ou6f!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png 424w, /__u/substackcdn.com/image/fetch/$s_!ou6f!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png 848w, /__u/substackcdn.com/image/fetch/$s_!ou6f!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ou6f!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ou6f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png" width="92" height="36" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:36,&quot;width&quot;:92,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!ou6f!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png 424w, /__u/substackcdn.com/image/fetch/$s_!ou6f!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png 848w, /__u/substackcdn.com/image/fetch/$s_!ou6f!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ou6f!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f1365-dd48-4c13-b8e7-d8f505b71489_92x36.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Using Claude Code</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!qbFC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!qbFC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png 424w, /__u/substackcdn.com/image/fetch/$s_!qbFC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png 848w, /__u/substackcdn.com/image/fetch/$s_!qbFC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qbFC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!qbFC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png" width="1456" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!qbFC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png 424w, /__u/substackcdn.com/image/fetch/$s_!qbFC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png 848w, /__u/substackcdn.com/image/fetch/$s_!qbFC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qbFC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89404f37-1733-4dee-b202-a4bc4bf9420c_1600x937.png 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 aria-hidden="true" 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><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>The sidebar version of Claude Code has a nicer UI and is generally more user-friendly.</p><p>Note: on Windows, the Claude Code sidebar can be a bit buggy, so in many places I&#8217;ll show screenshots using the terminal version instead.</p><p>If you also want to use terminal,</p><ul><li><p>Go to <strong>Terminal</strong> in the top navigation</p></li><li><p>Click <strong>New Terminal</strong></p></li><li><p>Type Claude in the directory you want to work in</p></li></ul><p>The directory you open Claude in is where CC will have access to update your files.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OdYN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OdYN!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png 424w, /__u/substackcdn.com/image/fetch/$s_!OdYN!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png 848w, /__u/substackcdn.com/image/fetch/$s_!OdYN!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OdYN!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OdYN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png" width="1456" height="943" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:943,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!OdYN!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png 424w, /__u/substackcdn.com/image/fetch/$s_!OdYN!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png 848w, /__u/substackcdn.com/image/fetch/$s_!OdYN!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OdYN!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7680d87-4fa7-4514-9169-68eb6a78c126_1523x986.png 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 aria-hidden="true" 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><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><h3>Connect Claude Code to Your Anthropic Account</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!G2P8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!G2P8!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png 424w, /__u/substackcdn.com/image/fetch/$s_!G2P8!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png 848w, /__u/substackcdn.com/image/fetch/$s_!G2P8!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png 1272w, /__u/substackcdn.com/image/fetch/$s_!G2P8!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!G2P8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png" width="230" height="421.99152542372883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:866,&quot;width&quot;:472,&quot;resizeWidth&quot;:230,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!G2P8!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png 424w, /__u/substackcdn.com/image/fetch/$s_!G2P8!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png 848w, /__u/substackcdn.com/image/fetch/$s_!G2P8!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png 1272w, /__u/substackcdn.com/image/fetch/$s_!G2P8!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72b64dff-65de-446a-a97f-d0c273fa2f0f_472x866.png 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 aria-hidden="true" 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><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><h3>First Things First: Model Selection</h3><p>Next, let&#8217;s look at which model to use for CC. As of this writing, Anthropic offers three main models you&#8217;ll use with Claude Code: Opus, Sonnet, and Haiku. You can switch between them directly inside Claude Code by</p><p>Typing: /model</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!V_x-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!V_x-!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png 424w, /__u/substackcdn.com/image/fetch/$s_!V_x-!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png 848w, /__u/substackcdn.com/image/fetch/$s_!V_x-!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!V_x-!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!V_x-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png" width="968" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:968,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!V_x-!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png 424w, /__u/substackcdn.com/image/fetch/$s_!V_x-!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png 848w, /__u/substackcdn.com/image/fetch/$s_!V_x-!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!V_x-!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb29709-fda8-4d4d-b331-8101502dbf5e_968x400.png 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Qmf-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Qmf-!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png 424w, /__u/substackcdn.com/image/fetch/$s_!Qmf-!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png 848w, /__u/substackcdn.com/image/fetch/$s_!Qmf-!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Qmf-!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Qmf-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png" width="967" height="263" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:263,&quot;width&quot;:967,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!Qmf-!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png 424w, /__u/substackcdn.com/image/fetch/$s_!Qmf-!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png 848w, /__u/substackcdn.com/image/fetch/$s_!Qmf-!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Qmf-!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca3628d-086f-4561-a576-b8d2755e0fc6_967x263.png 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 aria-hidden="true" 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><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>At the moment, Claude Code defaults to Opus 4.5. In the past, it used to default to Sonnet because earlier versions of Opus were extremely expensive in terms of token usage. Opus 4.1, for example, would burn through tokens so quickly that it was basically unusable on the Pro plan.</p><p>That changed with Opus 4.5.</p><p>Anthropic greatly reduced the cost of tokens, from $15/$75 (input/output) per million tokens on Opus 4.1 to $5/$25 for Opus 4.5. According to Anthropic, Opus 4.5 uses less tokens than Sonnet 4.5, so theoretically you should use Opus 4.5 all the time.</p><p>My recommendation: <strong>start with Opus 4.5</strong>. If you run into rate limits, latency issues, or cost concerns, then experiment with Sonnet or Haiku. It&#8217;s very easy to switch later.</p><p>FYI This is how it looks on sidebar view</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7rkJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7rkJ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png 424w, /__u/substackcdn.com/image/fetch/$s_!7rkJ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png 848w, /__u/substackcdn.com/image/fetch/$s_!7rkJ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7rkJ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7rkJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png" width="302" height="371" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:371,&quot;width&quot;:302,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!7rkJ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png 424w, /__u/substackcdn.com/image/fetch/$s_!7rkJ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png 848w, /__u/substackcdn.com/image/fetch/$s_!7rkJ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7rkJ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe41da5f-4823-4827-8bcf-ff18df4f5bf2_302x371.png 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 aria-hidden="true" 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><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><h3>Planning Your Project - The Product Spec</h3><p>Now that we&#8217;ve picked a model, let&#8217;s do something very PMy: write a spec. When working with a LLM, a lot of the work you need to do is produce a spec so the LLM knows what to build.</p><p>We&#8217;re going to work with Claude to generate a lightweight product spec before writing any code.</p><p>This is an intentionally simple project for the sake of the tutorial. The only piece of complexity I&#8217;ve added to this is fetching questions from a Google sheet. If you want to simplify further, you could ask Claude to generate a handful of sample questions and store them locally for example, in a JSON file. That&#8217;s totally fine for learning purposes.</p><p>For now, we&#8217;ll treat this like a real (but small) product.</p><p><strong>Prompt: Creating the Product Spec</strong></p><p>Here&#8217;s the prompt I use to generate the initial spec. You can copy and paste this directly into Claude Code.</p><div><hr></div><p>Write a spec for an AI PM Interview Prep website. Create a new folder called &#8220;Project Memory&#8221; and output the spec &#8220;product-spec&#8221; as a markdown file.The goal is to help product managers practice for AI PM interviews. A few quick requirements to get us going</p><ul><li><p>Responsive design for desktop and mobile</p></li><li><p>Two pages:</p><ul><li><p>1: Shows Interview Question for PMs to practice against</p></li><li><p>2: A  list of free resources including top AI companies hiring</p></li></ul></li><li><p>Interview Question Page</p><ul><li><p>Questions</p><ul><li><p>Source questions from <a href="https://docs.google.com/spreadsheets/d/1tNUIgrWR_e9BOLioJmAxqvi-BOIV6C8X4UfF8zWDUWk/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1tNUIgrWR_e9BOLioJmAxqvi-BOIV6C8X4UfF8zWDUWk/edit?usp=sharing</a></p></li><li><p>Display one randomly selected question at a time</p></li><li><p>Include &#8220;Next Question&#8221; button to fetch new random questions</p></li><li><p>Show question category</p></li><li><p>Question filtering by category</p></li><li><p>Use local storage to track practiced questions</p></li></ul></li><li><p>Timer</p><ul><li><p>Show the user a timer from when the question is shown</p></li><li><p>Toggle visibility option (show/hide)</p></li></ul></li><li><p>User Contribution</p><ul><li><p>Prominent &#8220;Submit a Question&#8221; button linking to: <a href="https://docs.google.com/forms/d/e/1FAIpQLSekX2c8CHa9LWY91kBVMg5lNCqkLUvQWJ9zyv8OZkaZ2UOB3Q/viewform">https://docs.google.com/forms/d/e/1FAIpQLSekX2c8CHa9LWY91kBVMg5lNCqkLUvQWJ9zyv8OZkaZ2UOB3Q/viewform</a></p></li><li><p>Brief instruction text explaining community contributions</p></li></ul></li></ul></li><li><p>AI Resource Page</p><ul><li><p>Top AI Companies Hiring - Curated list with company names and career page links</p></li><li><p>Topic-Based Resources - Grouped by key concepts (e.g., MCP, RAG, Fine-tuning, AI Ethics)</p></li><li><p>Each resource should include: title, brief description, and link</p></li></ul></li></ul><p>Please ask me any clarifying questions</p><div><hr></div><p><strong>Why I always end with clarifying questions</strong></p><p>I always end with &#8220;Please ask me any clarifying questions.&#8221; This is intentional.</p><p>Even for a small project, there are almost always a few details I&#8217;ve missed or underspecified. Asking for clarifying questions gives Claude a chance to surface ambiguities early, and it helps align us before any real work starts.</p><p>In practice, Claude will usually ask a handful of sensible questions about scope, behavior, or edge cases. Taking a few minutes to answer them upfront saves a lot of back-and-forth later.</p><p><strong>Screenshot of Claude asking follow up questions</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OHa0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OHa0!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png 424w, /__u/substackcdn.com/image/fetch/$s_!OHa0!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png 848w, /__u/substackcdn.com/image/fetch/$s_!OHa0!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OHa0!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OHa0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png" width="737" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:737,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!OHa0!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png 424w, /__u/substackcdn.com/image/fetch/$s_!OHa0!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png 848w, /__u/substackcdn.com/image/fetch/$s_!OHa0!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OHa0!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb014ac8-2047-495d-a8b7-b7cf67a5c32a_737x376.png 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 aria-hidden="true" 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><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>At this point, you should have a <a href="http://product-spec.md">product-spec.md</a> file in a Project Memory folder.</p><h3>Keeping Project Memory Across Sessions</h3><p>Why did I create a <a href="http://product-spec.md">product-spec.md</a> and this project memory folder?</p><p>Claude Code resets most of its context between sessions. When you close a terminal or start a new Claude session, it does not reliably remember what you worked on last time, what decisions you made, or what&#8217;s left to build. That can get frustrating and cause more bugs as you work on your project.</p><h3>Project Memory: How We Persist Information</h3><p>I use a simple system to maintain information about the project across sessions. Inside the project folder, I keep a Project Memory directory with three markdown files:</p><ul><li><p>product-spec.md &#8212; the core product requirements and goals</p></li><li><p>technical-spec.md &#8212; key technical decisions and system patterns</p></li><li><p>progress.md &#8212; what we&#8217;re working on now, what&#8217;s done, what&#8217;s left, and known issues</p></li></ul><p>We&#8217;ve already started with product-spec.md. After Claude generates the spec, I usually review it, make any edits I agree or disagree with, and then ask Claude to create the technical-spec.md and progress.md files next.</p><h3>How Claude Uses Project Memory with Claude.md</h3><p>Now let&#8217;s talk about how Claude knows to read and respect these files.</p><p>Claude Code automatically reads a special file called Claude.md at the start of every session. This makes it the perfect place to give Claude durable instructions about how to work in your repository.</p><p>Tip: Per Anthropic&#8217;s <a href="https://www.anthropic.com/engineering/claude-code-best-practices">best practices guide</a>, Claude.md is ideal for documenting things like</p><ul><li><p>Common bash commands</p></li><li><p>Core files and utility functions</p></li><li><p>Code style guidelines</p></li><li><p>Testing instructions</p></li><li><p>Repository etiquette (e.g., branch naming, merge vs. rebase, etc.)</p></li><li><p>Developer environment setup (e.g., pyenv use, which compilers work)</p></li><li><p>Any unexpected behaviors or warnings particular to the project</p></li><li><p>Other information you want Claude to remember</p></li></ul><p>In our case, Claude.md is also where we tell Claude how to use the Project Memory folder.</p><h3>Creating Claude.md</h3><p>To create Claude.md, you have two options:</p><ul><li><p>Use /init</p></li><li><p>Create the file yourself</p></li></ul><p>/init  &#8211; this will let Claude generate its own Claude.md based on the current code base and whatever is in the directory</p><p>I have a Claude.md that includes my common instructions that I usually use. You can save the parts you like for every project in the global Claude.md which can be found:</p><ul><li><p>macOS / Linux: ~/.claude/CLAUDE.md</p></li><li><p>Windows: C:\Users\&lt;your-username&gt;\.claude</p></li></ul><h3>What&#8217;s Inside My Claude.md</h3><pre><code>This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

You are an engineer for a website to help product managers prepare for AI PM interviews. This means interviewing for top AI companies or for PM roles at any company working on AI products. The site features a question practice page with timer functionality and an AI resources page with curated learning materials and company links.

## Development Guidelines

- Limit comments inside the code

- Test all changes before marking complete

- Prefer to run single tests and not the whole suite for performance reasons

- Keep animations simple and working

## Important Notes

**Credentials &amp; API Keys:**

Any time there are credentials, API keys, etc make sure to store them in a `.env` file

**Windows Compatibility:**

Make sure all commands work within Windows terminal; this is being developed locally on Windows

## Project Memory Folder

The Project Memory folder is key to understanding the project and allows you to continue effectively.

**Core Files:**

- `product-spec.md` - All core requirements and goals

- `technical-spec.md` - Key technical design decisions and system patterns to stay consistent

- `progress.md` - Current work focus, recent changes, what&#8217;s left to build, current status and known issues

**Project Memory Updates occur when:**

- Discovering new project patterns

- After implementing significant changes

- When user requests with &#8220;update proj memory&#8221; (MUST review all files)

**Note:** When triggered by &#8220;update proj memory&#8221;, review every memory bank file, even if some don&#8217;t require updates. The project memory must be maintained with precision and clarity as effectiveness in building the project depends on it.</code></pre><p>At this point, your project should look roughly like this:</p><p>Folder Structure</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MW_Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MW_Q!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png 424w, /__u/substackcdn.com/image/fetch/$s_!MW_Q!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png 848w, /__u/substackcdn.com/image/fetch/$s_!MW_Q!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MW_Q!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MW_Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png" width="301" height="355" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93c0655f-e660-4035-9df0-22768195e2a8_301x355.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:355,&quot;width&quot;:301,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!MW_Q!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png 424w, /__u/substackcdn.com/image/fetch/$s_!MW_Q!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png 848w, /__u/substackcdn.com/image/fetch/$s_!MW_Q!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MW_Q!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93c0655f-e660-4035-9df0-22768195e2a8_301x355.png 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 aria-hidden="true" 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><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>This setup is a bit heavyweight for such a small project. But for bigger projects, Claude will be more consistent across sessions especially around the engineering patterns (in technical-spec.md) so you have less bugs. It&#8217;s also easier to build the project in increments when the phases are clearly defined (in the progress.md).</p><p>Once this structure is in place, building becomes smoother.</p><h3>Architecting your App with Plan Mode</h3><p>Next, we are going to use plan mode to architect your app. In more complex projects, it&#8217;s worth spending time on the architecture for scalability and extensibility so you don&#8217;t end up with a pile of spaghetti code.</p><p>Claude Code has a feature called <strong>Plan Mode</strong>, which is designed specifically for this kind of deep thinking and structured planning. Instead of jumping straight into implementation, Plan Mode encourages Claude to reason through architecture, tradeoffs, and sequencing first.</p><p>To enter Plan Mode in Claude Code, press Shift + Tab and cycle through the modes until you see Plan Mode enabled.</p><p><strong>A Note on &#8220;Ultrathink&#8221;<br></strong>In the past, a common tip was to pair Plan Mode with the keyword &#8220;ultrathink&#8221; to encourage maximum token usage and more detailed reasoning.</p><p>As of mid-January 2025, it appears that:</p><ul><li><p>&#8220;ultrathink&#8221; is no longer explicitly supported</p></li><li><p>Maximum token usage now seems to be the default behavior in Plan Mode</p></li></ul><p>There wasn&#8217;t a formal announcement from Anthropic, so this may change again. This is another good reminder that AI tooling evolves quickly.</p><p><strong>Generating the Plan: Google Sheets API Integration</strong></p><p>With Plan Mode enabled, here&#8217;s a simple prompt I used to kick off the discussion:</p><pre><code>Break down Phase 1 into smaller tasks that can be tested and validated. Architect a plan for building the google sheets API integration for review. Optimize for simplicity, testability, clean separation of concerns, and security</code></pre><p>Note: If you are building a project, you want to ship and maintain, you can use the phrase &#8220;Architect a production-grade, phased plan&#8221;</p><p>Claude&#8217;s output will usually be structured and fairly detailed. Here&#8217;s a sample of what it produced for the Google Sheets integration.</p><div><hr></div><p>Google Sheets API Integration - Deep Dive Architecture</p><p>Core Strategy:                                                                                                                                   Build the API integration layer first as an isolated, testable module before connecting to React components.</p><p>    Key Architectural Decisions:</p><p>    1. Separation of Concerns: Create a dedicated services/googleSheets.js module</p><p>    2. In-Memory Cache: Use a simple JS object with timestamp for 1-hour TTL</p><p>    3. Error Recovery: Multi-layer fallback (cache &#8594; retry &#8594; error state)</p><p>    4. Data Transformation: Raw sheet data &#8594; normalized question objects with generated IDs</p><p>    API Integration Steps (7 testable tasks):</p><p>    Task 1.1: Google Cloud Setup &amp; API Key</p><p>    - Create Google Cloud project</p><p>    - Enable Sheets API v4</p><p>    - Generate API key with HTTP referrer restrictions</p><p>    - Store in .env file as VITE_GOOGLE_SHEETS_API_KEY</p><p>    - Test: Verify API key works with curl/Postman</p><div><hr></div><h3>Using Another LLM to Validate Claude&#8217;s Plan</h3><p>From here, you&#8217;ll want to work with Claude to finalize the plan. When I&#8217;m working on architecture or a tricky problem, I&#8217;ll often ask another LLM to validate Claude&#8217;s Plan. In this case, I asked Gemini CLI to review Claude&#8217;s plan for any security issues.</p><blockquote><p>Tip: Copy and paste the Claude.md and rename it Gemini.md so Gemini has the same project context</p></blockquote><p>Starting Gemini is as simple as starting up Claude</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_tj0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_tj0!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png 424w, /__u/substackcdn.com/image/fetch/$s_!_tj0!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png 848w, /__u/substackcdn.com/image/fetch/$s_!_tj0!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_tj0!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_tj0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png" width="1231" height="292" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:292,&quot;width&quot;:1231,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!_tj0!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png 424w, /__u/substackcdn.com/image/fetch/$s_!_tj0!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png 848w, /__u/substackcdn.com/image/fetch/$s_!_tj0!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_tj0!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a275659-f3e2-4bed-afdf-3bf9e61b1a23_1231x292.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And this paid off! Google discovered a potential security flaw with Claude&#8217;s plan.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!bYql!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!bYql!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png 424w, /__u/substackcdn.com/image/fetch/$s_!bYql!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png 848w, /__u/substackcdn.com/image/fetch/$s_!bYql!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bYql!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!bYql!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png" width="1017" height="172" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:172,&quot;width&quot;:1017,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!bYql!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png 424w, /__u/substackcdn.com/image/fetch/$s_!bYql!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png 848w, /__u/substackcdn.com/image/fetch/$s_!bYql!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bYql!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d81c27-8551-4575-9fd6-f1ffa3ccd402_1017x172.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Adjusting the Plan and Fetching the Question Data</h3><p>Based on Gemini&#8217;s feedback, we changed the approach slightly. Instead of directly calling the Sheets API from the app, the new plan was to:</p><ul><li><p>Fetch and parse the data from a Share Link CSV</p></li></ul><p>Once the revised plan was in place, I asked Claude to move forward:</p><pre><code>Build Phase 1 MVP using CSV data integration, and create a test script to validate that the data is parsed correctly.</code></pre><p>At this point, we finally moved from planning into implementation.</p><h3>Debugging your First Issue</h3><p>Right away, I hit a bug. Looking at the developer console in the browser, I could see I was getting a 307 Temporary Redirect.</p><blockquote><p>Tip: When reporting a bug, share error information you see to CC to help it debug your issue faster. Since this is a web app, we can inspect the console and copy errors from the browser to Claude</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XLtn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XLtn!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png 424w, /__u/substackcdn.com/image/fetch/$s_!XLtn!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png 848w, /__u/substackcdn.com/image/fetch/$s_!XLtn!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XLtn!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XLtn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png" width="597" height="197" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:197,&quot;width&quot;:597,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!XLtn!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png 424w, /__u/substackcdn.com/image/fetch/$s_!XLtn!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png 848w, /__u/substackcdn.com/image/fetch/$s_!XLtn!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XLtn!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f5d24b-a0a6-4e0e-9e76-c2349aa761fd_597x197.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>After debugging together, the fix was to create a new published CSV link directly from Google Sheets:</p><p> <a href="https://docs.google.com/spreadsheets/d/e/2PACX-1vT8ZbiNbj00TARest-Srk4EwWuBTz6d7JDFE2B6kSW06GEECC9U42ksM3RyF9ssJ6Pl3pHoo--rPhLw/pub?gid=1423087399&amp;single=true&amp;output=csv">https://docs.google.com/spreadsheets/d/e/2PACX-1vT8ZbiNbj00TARest-Srk4EwWuBTz6d7JDFE2B6kSW06GEECC9U42ksM3RyF9ssJ6Pl3pHoo--rPhLw/pub?gid=1423087399&amp;single=true&amp;output=csv</a></p><p>Once that was in place, the redirect issue disappeared and the integration worked as expected.</p><h3>Why This Workflow Works</h3><p>This sequence <strong>plan &#8594; validate &#8594; build &#8594; debug</strong>  is something you&#8217;ll repeat constantly when working with Claude Code.</p><p>The key takeaway isn&#8217;t the Google Sheets integration itself. It&#8217;s learning how to:</p><ul><li><p>Plan before coding</p></li><li><p>Use Plan Mode for architecture</p></li><li><p>Validate ideas with a second LLM</p></li><li><p>Feed concrete error data back into Claude</p></li></ul><p>That&#8217;s how you get consistent, high-quality results.</p><h3>Version Control Basics</h3><p>Once you&#8217;ve validated the code works, it&#8217;s time to think about version control.</p><p>Claude Code can write and modify files, but it&#8217;s not a source of truth for your project. If something goes wrong, you need a reliable way to get back to a known-good state. That&#8217;s where Git comes in. I use GitHub to track changes so I can always roll back to a known-good state.</p><blockquote><p>Tip: After every meaningful feature or change, commit and push your code. This gives you a safety net and makes it much easier to recover if something breaks later.</p></blockquote><p><strong>Where /rewind Fits (and Where It Doesn&#8217;t)</strong></p><p>Claude Code does have a command called /rewind, which lets you roll back changes within a session. It&#8217;s useful when Claude makes a change you don&#8217;t like and you want to undo recent edits without manually reverting files.</p><p>That said, /rewind is not a replacement for Git.</p><p>A helpful way to think about it:</p><ul><li><p>/rewind &#8594; short-term, in-session undo</p></li><li><p>Git + GitHub &#8594; long-term version history and rollback</p></li></ul><p>If you close a session, hit context limits, or want to return to something you built yesterday, /rewind won&#8217;t help you. Git will.</p><p><strong>Github and Github CLI</strong></p><p>If you haven&#8217;t used Git much before, the GitHub CLI is a nice way to simplify things:</p><p>https://cli.github.com/</p><p>Once you&#8217;ve created a repository on GitHub, you can ask Claude to help you set everything up locally and connect your project to that repo. This is a great example of using Claude for &#8220;glue work&#8221; that&#8217;s annoying to do manually.</p><p>Claude also created a .gitignore file for me, which tells Git which files should not be tracked like dependencies, build artifacts, and environment variables.</p><p><strong>A Very Basic Git Workflow</strong></p><p>If you&#8217;re not familiar with Git, here&#8217;s how a basic workflow for using Git looks like:</p><ul><li><p>First, you tell Git which files you want to include in your next snapshot with the command &#8220;git add.&#8221; This is called <em>staging</em> your changes.</p></li><li><p>Next, you save those staged changes into your local history: &#8220;git commit -m &#8216;Short Description&#8217;&#8221;</p></li><li><p>Finally, you upload your commits to GitHub with &#8220;git push&#8221;</p></li></ul><p>If you are working on a solo project, that&#8217;s usually enough. In team environments, you&#8217;d typically open a pull request, get feedback, and then merge.</p><p><strong>Common Directory Structure</strong></p><p>As the project grows, your folder structure will start to look more complex.</p><p>Claude set this up as a Node project, which typically looks something like this:</p><ul><li><p>node_modules/ &#8212; all your dependencies live here</p></li><li><p>src/ &#8212; all your application code lives here</p></li></ul><p>You don&#8217;t need to understand every folder. What matters is knowing where your code lives (src) and what should not be committed (node_modules, which is handled by .gitignore).</p><p>Screenshot of how mine looks like</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rHUL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rHUL!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png 424w, /__u/substackcdn.com/image/fetch/$s_!rHUL!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png 848w, /__u/substackcdn.com/image/fetch/$s_!rHUL!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rHUL!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rHUL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png" width="316" height="511" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:511,&quot;width&quot;:316,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!rHUL!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png 424w, /__u/substackcdn.com/image/fetch/$s_!rHUL!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png 848w, /__u/substackcdn.com/image/fetch/$s_!rHUL!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rHUL!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435a5b2e-e1f8-4a65-96a7-26a16aca6b84_316x511.png 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 aria-hidden="true" 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><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><h3>Building the UI</h3><p>CC could probably one shot all the UI for this project, but I did it in stages. I asked Claude to break the UI work into smaller, testable batches. The benefit of this is it&#8217;s easier to fix any bugs that come up.</p><p>If something breaks, you know exactly which change caused it. It also keeps Claude focused on one thing at a time, which generally produces better results.</p><p>Screenshot of how my UI looks like</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Oci8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Oci8!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png 424w, /__u/substackcdn.com/image/fetch/$s_!Oci8!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png 848w, /__u/substackcdn.com/image/fetch/$s_!Oci8!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Oci8!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Oci8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png" width="1232" height="697" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:697,&quot;width&quot;:1232,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!Oci8!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png 424w, /__u/substackcdn.com/image/fetch/$s_!Oci8!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png 848w, /__u/substackcdn.com/image/fetch/$s_!Oci8!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Oci8!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4f34b99-95db-40f0-8480-d84039b027dd_1232x697.png 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 aria-hidden="true" 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><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><h3>The Context Window, Memory Management, and Compact</h3><p>At some point, you&#8217;ll run into Claude&#8217;s context window.</p><p>Right now, most people are working with a 200k token context window in Claude Code. Anthropic has been experimenting with much larger windows (up to 1M tokens) for some users, but availability is still limited.</p><p>Note:</p><ul><li><p>The context window is the maximum amount of text Claude can read and reason over at once.</p></li><li><p>Tokens are roughly &#8220;word-like&#8221; units (not exactly words, but close enough for intuition).</p></li></ul><p><strong>There&#8217;s 2 key issues to keep in mind</strong></p><ol><li><p>First, as you approach the context limit, model performance can degrade. Claude Code shows a usage indicator in the bottom-right corner so you can see when you&#8217;re getting close.</p></li><li><p>Second, when you run out of context, Claude Code automatically runs compact. Compact attempts to summarize and retain only the most important information from the session. The problem is timing. If compact runs while Claude is actively modifying your code, the output quality can drop significantly. Some people have reported partially applied changes or inconsistent results when this happens mid-edit.</p></li></ol><p><strong>What to do?</strong></p><ul><li><p>What I do is, after completing a big feature or a batch of work, I ask Claude to &#8220;update the project memory&#8221; and then use the command /clear to start the conversation from the beginning.</p></li><li><p>People who utilize compact will simply run /compact before building a big feature</p></li></ul><p>Tip: The command /context will show you where your tokens are being used</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PD9L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PD9L!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png 424w, /__u/substackcdn.com/image/fetch/$s_!PD9L!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png 848w, /__u/substackcdn.com/image/fetch/$s_!PD9L!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PD9L!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PD9L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png" width="796" height="332" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:332,&quot;width&quot;:796,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!PD9L!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png 424w, /__u/substackcdn.com/image/fetch/$s_!PD9L!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png 848w, /__u/substackcdn.com/image/fetch/$s_!PD9L!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PD9L!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981f6026-90f6-4f5d-993f-d7533965a6f4_796x332.png 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 aria-hidden="true" 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><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><h3>Hosting the Project</h3><p>Once you&#8217;ve built the UI and you&#8217;re happy with how the site works locally, the final step is getting it online. Because this is a simple side project, I like to keep hosting simple too. I use <strong><a href="https://render.com/">Render</a> </strong>for projects like this.</p><p>Render lets you:</p><ul><li><p>Connect directly to your GitHub repository</p></li><li><p>Specify the build and start commands</p></li><li><p>Deploy your app in just a few minutes</p></li></ul><p>You don&#8217;t need to think about servers, infrastructure, or deployment pipelines. You push to GitHub, Render pulls the latest code, and your site is live.</p><p>At this point, the project is &#8220;real.&#8221; You can share it, iterate on it, or just move on knowing you&#8217;ve shipped something end-to-end.</p><h3>Wrapping Up and Key Takeaways</h3><p>If you zoom out from all the tools, models, and setup steps, there are really just a few ideas that matter from this tutorial.</p><p>Everything else is implementation detail.</p><h3>Key Takeaway #1: Planning Is the Real Force Multiplier</h3><p>The biggest difference between a smooth experience with Claude Code and a frustrating one isn&#8217;t which tech stack you use, it&#8217;s how much you plan before you build.</p><p>Using Plan Mode, writing a lightweight product spec, breaking work into testable phases, and validating architecture before coding all dramatically reduce thrash. Claude is very good at generating code, but it&#8217;s much better when it&#8217;s operating inside a clear plan.</p><p>If you ever feel stuck or overwhelmed, that&#8217;s usually a signal to pause and re-plan, not to push harder.</p><h3>Key Takeaway #2: Markdown Files Are the Real Unlock</h3><p>If you look closely, almost everything that makes Claude Code feel &#8220;smart&#8221; over time comes down to markdown files.</p><ul><li><p>Your product spec.</p></li><li><p>Your technical decisions.</p></li><li><p>Your progress tracking.</p></li><li><p>Your Claude.md.</p></li></ul><p>In a future article, when we use more advanced features like agents and slash commands, you&#8217;ll notice they&#8217;re also just markdown files with instructions. It powers all the reusable workflows within CC.</p><p>Once you internalize that, Claude Code will hopefully be less intimidating.</p><h3>Key Takeaway #3: Claude Code Is Always Changing</h3><p>Commands change. Defaults change. New features appear sometimes without announcement.</p><p>Claude Code will keep adding convenience features: better memory, better undo, better tooling. Those features are helpful, but they are helpers, not foundations. You don&#8217;t want your entire workflow to depend on any single command or default behavior staying the same.</p><p>That&#8217;s why the core practices in this tutorial matter:</p><ul><li><p>Plan before building</p></li><li><p>Store durable context in markdown files</p></li><li><p>Commit frequently to Git</p></li></ul><p><strong>How I Keep Up with Claude Code Changes</strong></p><p>Because Claude Code is moving quickly, I don&#8217;t rely on any single tutorial (including this one) as a long-term source of truth. In practice, I keep up to date by:</p><ul><li><p>Skimming discussions in subreddits like /ClaudeAI</p></li><li><p>Following Anthropic&#8217;s product and engineering updates</p></li><li><p>Occasionally check the Claude Code <a href="https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md">changelog on GitHub</a></p></li><li><p>And, most importantly, noticing changes as I use the product day to day</p></li></ul><p>You don&#8217;t need to track everything closely. A light habit of staying curious is usually enough.</p><h3>The Finished Project</h3><p>If you want to see what the finished version looks like, the site we built in this tutorial is live here:</p><p>https://ai-pm-interview-prep.onrender.com/</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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><p></p>]]></content:encoded></item><item><title><![CDATA[Rocking your Meetings: From Team Syncs to Executive Reviews]]></title><description><![CDATA[A practical guide to people, project, and executive meetings from a PM and VP perspective]]></description><link>https://bonnieyu.substack.com/p/rocking-your-meetings-from-team-syncs</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/rocking-your-meetings-from-team-syncs</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Tue, 06 Jan 2026 21:08:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bd286643-cac1-4194-8145-7e1ba1b1e742_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Why am I writing about meetings in 2025 when the hottest topic is AI? AI can accelerate your workflows, but it doesn&#8217;t replace the work of building relationships with people. <strong>Meetings are one of your highest leverage points. This is face time with people, where you can make an impression.</strong> Whether you are meeting with clients or trying to get promoted, performing well in a meeting will take you further than doing incrementally more work on your project.</p><p>If you want to get promoted or get your project through, you need people to like and trust you. The way you interact with your peers and leadership team doesn&#8217;t just build relationships, it also builds a credible reputation that will travel across the company. Ultimately, you want to earn trust and get sponsored, and working well in meetings is one of the most impactful ways to accomplish that.</p><p>My younger self thought of meetings as time sinks, but now I know how crucial they are to be successful in your career. I&#8217;ll walk you through different types of meetings and how to make the most out of each one. I also invited <a href="https://www.linkedin.com/in/williamsargilla/">VP of Product Laura Williams Argilla</a> to share her thoughts, and wrap up with a tip on how to practice these skills.</p><h3>People and Relationships - Building Your Reputation</h3><p>How you show up in meetings shapes how people talk about you when you&#8217;re not there.  These moments are where relationships are built or&#8230; damaged.</p><p>Building relationships takes time. This is probably obvious, but you&#8217;ve got to start on day 1. Meet with all your core team mates, and get to know them as people, and as coworkers. Use these conversations to learn how the team actually works. They are a key information resource.</p><p>In my early 1:1s, I start with these questions:</p><ul><li><p>Intro and background (yea, you have to do this to find common ground and interests. It&#8217;s not just chit chat.)</p></li><li><p>What made you decide to join the team? How do you like it so far?</p></li><li><p>What do you expect from your PMs?</p></li></ul><p>Depending on the role, I&#8217;ll also ask:</p><ul><li><p>Engineers to walk me through the product architecture</p></li><li><p>Designers to walk me through customer research and design decisions</p></li><li><p>Data scientists to walk me through dashboards, experiments, and key metrics</p></li></ul><p>Now my favorite questions:</p><ul><li><p>What are the biggest challenges the team is dealing with right now?</p></li><li><p>What&#8217;s one thing you&#8217;d change about how the team works?</p></li><li><p>What do you think are the biggest issues with the product?</p></li></ul><p>These are my favorite questions because they let people vent. I can immediately uncover problems to jump in and solve. For example, on one team I joined, I discovered tension between engineers and management around stand ups. Some devs didn&#8217;t find value in having stand ups. I got a quick win by (1) helping the devs understand how (if run properly) stand ups can uncover risks or challenges and (2) suggesting we only do stand ups 3-4 days a week instead of everyday.</p><p>Helping people solve problems and finding common ground are the fastest ways to earn trust.</p><h3>Project Meetings: It&#8217;s Not Just About the Agenda</h3><p>There are many types of project meetings, but here are the things I focus on to get the most out of them.</p><p>The most basic advice for hosting meetings is preparing an agenda ahead of time, but if you want to run a great meeting that&#8217;s not sufficient. If you are the host of the meeting, be very clear about the outcome you want from the meeting. Meetings are expensive. Try to avoid gathering a bunch of people unless there&#8217;s a clear reason people need to be in the room together.</p><p>Before the meeting, ask yourself:</p><ul><li><p>Do you need another team to help build something for your project?</p></li><li><p>Is this a status meeting to identify challenges and unblock progress?</p></li><li><p>Are you trying to get buy-in on a decision?</p></li></ul><p>If you&#8217;re not the host, it&#8217;s just as important to understand the purpose. And if it&#8217;s unclear after the first few minutes, make sure to ask, because&#8230;</p><p>The hardest skill in running a good meeting is tracking everyone&#8217;s point of view. Meetings often get derailed when someone brings up something related but actually independent of the problem at hand. When this happens, I go back to the goal of the meeting. If I don&#8217;t immediately see how a new discussion moves us closer to that goal, I&#8217;ll ask the person to help connect the dots.<br><br>For example, I might say: &#8220;Can you help me understand how this ties back to the decision we&#8217;re trying to make today?&#8221; Sometimes they&#8217;re seeing an angle I hadn&#8217;t considered, and that&#8217;s valuable. Other times, asking the question helps everyone realize it&#8217;s important, but better handled separately. In that case, I&#8217;ll explicitly park it and move the group back to the original goal.</p><h3>Executive Meetings (VPs + C Suite): Upping your Game</h3><p>A friend once told me executives are just people, you should treat them as equals. In principle, I&#8217;d like that to be true. In reality, executives are a Special Case. Earlier on, I took the &#8220;treat them as equals&#8221; too much to heart and let&#8217;s just say it didn&#8217;t help my growth&#8230;.</p><p>Like all people, some executives are easier to work with than others. But the one thing they all have in common is that they&#8217;re busy. Even the most supportive executives will be more receptive if you&#8217;re succinct, direct, and clear about what you&#8217;re asking for.</p><p>Before any executive meeting, it&#8217;s worth understanding how that executive tends to reason, what&#8217;s top of mind for them, and how your proposal fits into that context. If you don&#8217;t have that information, ask your manager or peers. They&#8217;re often your best source of signal.</p><p>While I&#8217;m framing this as an executive section, these principles apply to working with senior leaders more broadly. Here&#8217;s my suggestion for preparation:</p><p><strong>Gather your Allies and Get Alignment</strong></p><p>This is probably obvious, but before an executive meeting, make sure other people are aligned with your proposal, and you&#8217;ve got a chance to get feedback from everyone. Try to avoid tackling too many issues in one meeting</p><p>What&#8217;s less obvious is asking those same people:</p><ul><li><p>What kind of questions do you think Executive A will have?</p></li><li><p>Do you think Executive A will have objections?</p></li><li><p>What&#8217;s top of mind for Executive A right now? How might this tie in with that?</p></li></ul><p><strong>Role play tough questions</strong></p><p>If you struggle with executive presence and communication, find a reliable coworker or find a coach to practice running through what you will be discussing. Ask them to ask you the hard questions so you&#8217;re ready when the executive asks you.</p><p><strong>Practice &#8220;I don&#8217;t know the answer, but I&#8217;ll get you the answer by XYZ date&#8221;</strong></p><p>As a PM, you often feel like you always have to have the answer, because you&#8217;re the domain expert. If you don&#8217;t know the answer, say you don&#8217;t know, but if you know the answer and you feel like you&#8217;re struggling to find the right words, it&#8217;s ok to say</p><p>&#8220;I don&#8217;t know the answer at the moment, but I&#8217;ll give you an answer by XYZ date.&#8221;</p><p>The challenge is saying it. It&#8217;s easy to put on paper, but a lot of us are trained to give an answer, and if you&#8217;re one of those people, practice saying it. Literally out loud.</p><h3>From the VP Seat: Laura Williams Argilla</h3><p>At this point, everything I&#8217;ve shared is from my experience as a PM. I also wanted to include advice from an experienced executive, so I asked <a href="https://www.linkedin.com/in/williamsargilla/">Laura Williams Argilla</a>. She is currently VP of Product at Alteryx, and previously held product leadership roles at Netflix, Tableau, Twitch, and Adobe. Below is Laura&#8217;s perspective, in her own words:</p><p><em>&#8220;My best advice for presenting to executives is to go deep in preparation, know your content, possible questions and where things might get tricky. Now keep that in your head. Here&#8217;s why: In one meeting with a CEO, I got one line into the presentation I had painstakingly created before he took the conversation in a whole different direction. Luckily I had done the homework ahead of time to make sure I was able to answer his questions, build confidence and eventually get to a useful outcome, even if it wasn&#8217;t the path I had planned.</em></p><p><em>A few tactical tips:</em></p><p><em>If you use slides, use as few as possible and don&#8217;t clutter them with information. You want the focus to be on what you are saying, not on deciphering an overloaded graphic.</em></p><p><em>To do this, you need to make sure you focus on the goal of the specific meeting. First, clarify your meeting goal: Is this an update? A decision point? Are you requesting resources or gathering feedback?</em></p><p><em>Think about the key information needed for the executives to fulfill that goal.</em></p><p><em>Start by making clear what you hope to achieve. If you need to make a decision, say that. Are you asking for resources? Tell them. Is this an update on a key project that is purely informational? Let them know. By stating it up front you have given them the right lens to view the conversation.</em></p><p><em>Next, start with the outcome you want. Sounds backwards, but again, this points them to the crux of the meeting. Once you state what you are looking for, tie that outcome to the business strategy and investment themes it supports.</em></p><p><em>Now provide the context on how you got to this conclusion, but remember, keep it brief. Give the top reason this is the right solution. Include data to back this up. At the same time acknowledge what changes with this information. Do your dates change? Is the project more expensive? Does it change messaging or need other stakeholder support?</em></p><p><em>Now open up for questions. This is where you draw from all of the up front preparation, and if they hit on something you don&#8217;t yet know, simply say that you don&#8217;t know but will find out and get back to them with the answer. If you are getting pushback, instead of moving immediately into defense mode, ask questions to better understand their concerns. This is a great opportunity to learn what they see as key business issues, conflicts and opportunities. It may also shape your approach moving forward.&#8221;</em></p><h3>But What if Preparation isn&#8217;t Enough?</h3><p>What stood out to me in Laura&#8217;s advice is how much executive effectiveness comes down to preparation and clarity. But even when you do all of that well, you might not get alignment from executive leadership. Here I&#8217;ll share my thoughts when there isn&#8217;t alignment:</p><p><strong>Know when to pick your battles</strong></p><p>Not everything is worth convincing your executive to agree on.</p><p>In the past, I worked with an executive who wasn&#8217;t a design leader, but still had very specific design tastes. Our designer presented multiple designs to this executive, and it was all getting rejected. The executive mentioned that he liked the Google designs, which translated to me as &#8220;I will approve this design if it looks more like Google Drive.&#8221;</p><p>The designer had strong reasons for their original work, and the designs had been tested, but the Google Drive design was a reasonable design (sure there were some downsides, but I didn&#8217;t think it was going to fail our customers) and it would get the executive on board. I asked the designer to take inspiration from Google Drive and modify his design off of that, and the design was approved.</p><p>Have I pushed back against executives? Yes, but I do it when I feel like this problem is of strategic importance or would break the experience for customers. In a situation with an executive that&#8217;s already set in their way, it will take multiple meetings and a lot of support to change their mind.</p><p><strong>Know when you shouldn&#8217;t be the messenger</strong></p><p>In some situations, especially for high-stakes or sensitive decisions, it may actually be more effective for your manager or a more senior peer to present the case. This isn&#8217;t about avoiding executive conversations, it&#8217;s about optimizing for the best outcome for the project.</p><p>Some executives respond better to certain styles. Some are more abrasive and need someone who can cut through the intensity to get to the real concern. Others like to dive deep into details and benefit from a presenter who can go several layers down with them in real time.</p><p>If someone on your team has a better working dynamic with a particular executive, it can be worth leveraging that especially when the decision really matters. The goal isn&#8217;t to prove you can handle the room. The goal is to get the right decision made.</p><p><strong>Be Open to Feedback</strong></p><p>Executives often have information ICs don&#8217;t. Sometimes their feedback may be related to a different project that they see going on with a different team but you&#8217;re not aware of. Or sometimes they have experiences that you don&#8217;t. Try to be open to their feedback, and&#8230; this is hard to pin down, but where the feedback is coming from exactly. Ask questions to get more insight into their thinking.</p><h3>1:1 with your Manager as a Career Tool</h3><p>Prepare your agenda ahead of time. I usually have a template that I fill out with a section about Project, Career, and Action Items. It&#8217;s easy to let project status updates take up all your time, so make sure to switch Career in the front from time to time<br></p><p>Be clear in your own mind of what you want out of your manager</p><ul><li><p>Do you need help with building relationships with an ally?</p></li><li><p>Do you need clarity on what&#8217;s necessary for your promotion?</p></li><li><p>Also, look for feedback that they&#8217;ve heard about you (that&#8217;s what impacts your reviews!)</p></li></ul><p>Write down accomplishments along with key details and impact.</p><ul><li><p>Pro Tip: I write it as if I&#8217;m writing my performance review so that when I need to do my performance review, I can copy and paste from my 1:1 agenda. Now you can even feed this document to AI so it writes your performance review for you!</p></li></ul><h3>New Year Resolution: Practice Soft Skills on Purpose</h3><p>As an introvert, I&#8217;ll be the first to say a lot of these skills are easier said than done. Soft skills are tricky because it&#8217;s hard to see clear levels of progress, but they are practicable. The key is to treat them like any other skill:</p><ol><li><p>Be aware of the problem</p></li><li><p>Pick one specific skill to work on</p></li><li><p>Create a situation where you can practice it</p></li><li><p>Reflect on what worked and what didn&#8217;t</p></li></ol><p>For example, if you want to get better at tracking people&#8217;s perspectives in a meeting, try this: in the next 5 meetings, take notes of the meeting goal, and whether the discussion is aligning with it. Are people talking past each other? Are certain concerns getting repeated but not resolved? Ideally you have a transcript, so after the meeting, you can have AI compare your notes with the transcript. Did you miss something? Did you misinterpret a concern? And then spend some time thinking, should you have intervened, and if so, what would you say next time?</p><p>In the new year, I highly recommend carving out 1-2 hours to choose one skill or relationship to improve on and create a small, intentional plan to work on it, because this will definitely pay dividends. If you want more personalized coaching and practice, hit me up at bonnieyu.coaching@gmail.com.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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><p></p>]]></content:encoded></item><item><title><![CDATA[OpenAI and The Future of App and AI Assistant Experiences ]]></title><description><![CDATA[A principal PM's breakdown of OpenAI&#8217;s Apps and ecosystem strategy]]></description><link>https://bonnieyu.substack.com/p/openai-and-the-future-of-app-and</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/openai-and-the-future-of-app-and</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Wed, 10 Dec 2025 19:20:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ef_y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>On Oct. 6th, OpenAI launched the <a href="https://openai.com/index/introducing-apps-in-chatgpt/">Apps SDK</a>, a new framework that lets developers build apps directly inside ChatGPT. During OpenAI&#8217;s <a href="https://www.youtube.com/live/hS1YqcewH0c?si=eEahk2Gy9S1g2iDq&amp;t=213">keynote</a>, Sam Altman described it as:</p><blockquote><p>&#8220;A new generation of apps that are adaptive, interactive, and personalized.&#8221;</p></blockquote><p>This launch is more than a new API; it&#8217;s a strategic decision to evolve ChatGPT into a &#8220;super assistant&#8221; capable of executing real tasks end to end. Instead of apps embedding AI agents, OpenAI wants to bring the apps inside ChatGPT.</p><p>After spending the last few days reading the developer docs, and testing early apps like Zillow, Expedia, Spotify, and Canva inside ChatGPT, I&#8217;ll share what&#8217;s working, not working, and what ChatGPT needs to do to make this ecosystem successful for both developers and users.</p><h2>App &amp; Assistant Experiences</h2><p>For the last 18 months, major products have been racing to build in-app agents e.g. Rufus inside the Amazon app or Notion AI inside Notion. These experiences are helpful, but each one is limited to the data and context of its own product.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!D_nc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!D_nc!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!D_nc!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!D_nc!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!D_nc!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!D_nc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!D_nc!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!D_nc!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!D_nc!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!D_nc!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0e9d74-68ba-4ae3-a22f-094426951bae_1498x840.png 1456w" sizes="100vw" fetchpriority="high"></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 aria-hidden="true" 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><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>OpenAI could have strengthened this model by letting apps authenticate and access your ChatGPT identity and memory. ChatGPT already knows details about your life: your family composition, dietary restrictions, calendar commitments, etc.</p><p><strong>OpenAI did not choose that route. </strong>Instead, OpenAI is bringing apps into ChatGPT. ChatGPT becomes the primary surface where users accomplish tasks and get things done. Does this model unlock differentiated experiences that in app agents (even with ChatGPT) simply can&#8217;t?</p><h2>The ChatGPT Apps</h2><p>The ChatGPT Apps directory currently includes 30 apps to show off the new experiences. The top 5 categories include: Productivity, Finance, Travel, Graphic and Design, and Developer Tools.</p><p>Sample apps available in ChatGPT&#8217;s directory</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ef_y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ef_y!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png 424w, /__u/substackcdn.com/image/fetch/$s_!ef_y!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png 848w, /__u/substackcdn.com/image/fetch/$s_!ef_y!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ef_y!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ef_y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png" width="585" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:608,&quot;width&quot;:585,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!ef_y!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png 424w, /__u/substackcdn.com/image/fetch/$s_!ef_y!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png 848w, /__u/substackcdn.com/image/fetch/$s_!ef_y!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ef_y!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabde4bff-0944-4486-9bc9-e1f90f74debf_585x608.png 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 aria-hidden="true" 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><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>Distribution of App Categories</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_Zhd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_Zhd!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png 424w, /__u/substackcdn.com/image/fetch/$s_!_Zhd!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png 848w, /__u/substackcdn.com/image/fetch/$s_!_Zhd!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_Zhd!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_Zhd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png" width="1456" height="868" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:868,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!_Zhd!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png 424w, /__u/substackcdn.com/image/fetch/$s_!_Zhd!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png 848w, /__u/substackcdn.com/image/fetch/$s_!_Zhd!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_Zhd!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70769aa8-06c1-4858-8724-98c6300c77da_1600x954.png 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 aria-hidden="true" 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><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><h2>Which Apps Shine and Which Fall Flat?</h2><p><strong>Winning Apps</strong></p><p>After testing the early partners, Canva was a clear winner. It quickly created posters for my son&#8217;s lemonade stand. If you&#8217;re not a designer, ChatGPT + Canva is magic. You describe what you want; the app produces it. My hypothesis is that apps where you compress a skill gap into a single prompt with a simple output will feel like magic.</p><p>Productivity and Content Creation type apps, &#8220;one-and-done&#8221; workflows, seem to work well.</p><p>Figma is another good example. Here Figma generated a decent UX flowchart based on a simple prompt.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KBHl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KBHl!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png 424w, /__u/substackcdn.com/image/fetch/$s_!KBHl!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png 848w, /__u/substackcdn.com/image/fetch/$s_!KBHl!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KBHl!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KBHl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png" width="767" height="633" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:633,&quot;width&quot;:767,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!KBHl!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png 424w, /__u/substackcdn.com/image/fetch/$s_!KBHl!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png 848w, /__u/substackcdn.com/image/fetch/$s_!KBHl!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KBHl!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdba599-6a46-4ca4-9e79-12a872dd0f1e_767x633.png 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 aria-hidden="true" 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><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>But I also found limitations with today&#8217;s integrations. In this conversation, ChatGPT confidently told me it could create a high-fidelity UX design for me, only to walk it back when Figma&#8217;s API didn&#8217;t support the functionality necessary.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!G-FY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!G-FY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png 424w, /__u/substackcdn.com/image/fetch/$s_!G-FY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png 848w, /__u/substackcdn.com/image/fetch/$s_!G-FY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png 1272w, /__u/substackcdn.com/image/fetch/$s_!G-FY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!G-FY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png" width="675" height="201" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:201,&quot;width&quot;:675,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!G-FY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png 424w, /__u/substackcdn.com/image/fetch/$s_!G-FY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png 848w, /__u/substackcdn.com/image/fetch/$s_!G-FY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png 1272w, /__u/substackcdn.com/image/fetch/$s_!G-FY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a864c-72d0-435d-a1cf-20df7db5c22c_675x201.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>What can ChatGPT do to motivate developers to continue investing in these app experiences so users can truly complete their tasks? We&#8217;ll talk more about that later.</p><p><strong>Poor Fit Apps</strong></p><p>Apps that require iterative filtering and visual scanning fell flat e.g. Expedia and Zillow. It was surprising the Zillow experience wasn&#8217;t better since it was featured in the <a href="https://www.youtube.com/live/hS1YqcewH0c?si=4xyzciXJA0kXGJyd&amp;t=667">OpenAI Keynote</a>. OpenAI obviously wanted to show off the interactive map, but as a tool for actually finding a home, the UX fell short.</p><p>You can&#8217;t even do some of the core tasks for researching homes&#8230; e.g. filtering. Every time you need to do a quick filter because you forgot you wanted 4+ bedrooms, or a certain price, you need to ask ChatGPT. ChatGPT slows these workflows down dramatically.</p><h2>A Concrete Example: Expedia App vs. Expedia Inside ChatGPT</h2><p><strong>Expedia&#8217;s Native App</strong></p><p>A typical flight search has:</p><ul><li><p>visible filters to reduce cognitive load</p></li><li><p>instant date adjusters to explore options</p></li><li><p>hundreds of results pre-loaded for fast re-filtering</p></li><li><p>visual comparison</p></li></ul><p>The app is optimized for <strong>rapid searches</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1b0X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1b0X!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png 424w, /__u/substackcdn.com/image/fetch/$s_!1b0X!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png 848w, /__u/substackcdn.com/image/fetch/$s_!1b0X!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1b0X!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1b0X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png" width="398" height="861.7050067658998" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1600,&quot;width&quot;:739,&quot;resizeWidth&quot;:398,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!1b0X!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png 424w, /__u/substackcdn.com/image/fetch/$s_!1b0X!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png 848w, /__u/substackcdn.com/image/fetch/$s_!1b0X!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1b0X!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0311ff-ed29-4713-9dea-6bc768b1c437_739x1600.png 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!e0Di!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!e0Di!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png 424w, /__u/substackcdn.com/image/fetch/$s_!e0Di!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png 848w, /__u/substackcdn.com/image/fetch/$s_!e0Di!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!e0Di!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!e0Di!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png" width="406" height="879.0257104194858" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1600,&quot;width&quot;:739,&quot;resizeWidth&quot;:406,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!e0Di!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png 424w, /__u/substackcdn.com/image/fetch/$s_!e0Di!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png 848w, /__u/substackcdn.com/image/fetch/$s_!e0Di!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!e0Di!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d65356-40ea-4e29-a1cd-6fdc51426e62_739x1600.png 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 aria-hidden="true" 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><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><h2><strong>Expedia Inside ChatGPT</strong></h2><p>Here&#8217;s an example of me asking ChatGPT</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6zZY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6zZY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png 424w, /__u/substackcdn.com/image/fetch/$s_!6zZY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png 848w, /__u/substackcdn.com/image/fetch/$s_!6zZY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6zZY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6zZY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png" width="922" height="842" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:842,&quot;width&quot;:922,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!6zZY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png 424w, /__u/substackcdn.com/image/fetch/$s_!6zZY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png 848w, /__u/substackcdn.com/image/fetch/$s_!6zZY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6zZY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcfd4554-8f6b-43eb-868a-cd09e848489a_922x842.png 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 aria-hidden="true" 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><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>ChatGPT responded with a carousel of 5 responses from Expedia, and a page long summary of which flight it recommends. I waited for these results for nothing, because</p><p>I forgot to tell ChatGPT I only want non-stop flights&#8230;. So I&#8217;m waiting for results again</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!g355!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!g355!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png 424w, /__u/substackcdn.com/image/fetch/$s_!g355!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png 848w, /__u/substackcdn.com/image/fetch/$s_!g355!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png 1272w, /__u/substackcdn.com/image/fetch/$s_!g355!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!g355!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png" width="963" height="691" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:691,&quot;width&quot;:963,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!g355!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png 424w, /__u/substackcdn.com/image/fetch/$s_!g355!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png 848w, /__u/substackcdn.com/image/fetch/$s_!g355!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png 1272w, /__u/substackcdn.com/image/fetch/$s_!g355!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f081c9-5e4d-43e4-b348-5892aab28712_963x691.png 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 aria-hidden="true" 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><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>With ChatGPT you need to:</p><ul><li><p>hold filters in your head</p></li><li><p>express them in a prompt</p></li><li><p>wait for the LLM to &#8220;think&#8221;</p></li><li><p>wait for a tool call to run</p></li><li><p>wait for ChatGPT to show the &#8220;in app UI&#8221; and write the results in text</p></li></ul><p>The result is:</p><ul><li><p>high cognitive load</p></li><li><p>high latency</p></li><li><p>limited result sets (only 5 in the carousel!)</p></li><li><p>friction in every iteration</p></li></ul><p>As a PM, one of our jobs is to recognize what makes good UX and what causes UX to fail. The Expedia and Zillow experiences inside ChatGPT exposes the downside of LLM interactions. Or what I call the LLM Interaction Loop.</p><p>The core UX loop for LLM experiences today:</p><ul><li><p>User thinks and write prompt</p></li><li><p>LLM thinks and writes results (User waits)</p></li><li><p>User thinks and writes prompt</p></li><li><p>LLM thinks and writes results (User waits)</p></li></ul><p>This loop happens over and over again. When you have to do this loop for simple fast interactions like filtering, that&#8217;s when the ChatGPT experience fails. The Expedia and Zillow app experiences optimize for visual scanning, speed, and low cognitive load for the user. ChatGPT on the other hand makes all of this worse.</p><div><hr></div><p>FYI I&#8217;m a Product Manager coach and consultant. I help PMs upskill in areas like product strategy, AI, UX, metrics, and so on. Connect with me at <a href="mailto:bonnieyu.coaching@gmail.com">bonnieyu.coaching@gmail.com</a> or <strong><a href="https://www.linkedin.com/in/bonnieyu1/">LinkedIn</a></strong></p><div><hr></div><h2>What Can OpenAI Do to Make the Apps Ecosystem Better?</h2><p>The App ecosystem is a big opportunity for OpenAI. Yes, ChatGPT&#8217;s mission is to be a &#8220;super assistant,&#8221; but the app ecosystem is a strategic play that can also:</p><ul><li><p><strong>Deepen OpenAI&#8217;s data moat.</strong> By using apps across different verticals, ChatGPT can get richer data across different facets of your life that it normally may not</p></li><li><p><strong>Increase Retention and thus Subscription Revenue </strong>by making ChatGPT the default place where users complete tasks</p></li><li><p><strong>Unlock new revenue streams</strong> including potential revenue sharing between ChatGPT and the App Developers</p></li></ul><p>At the same time, building a healthy 3rd-party ecosystem is one of the hardest problems in product. Anyone can launch an SDK; very few companies create a platform where developers build indispensable value for users.</p><p>So instead of just critiquing the UX, let&#8217;s break this down like platform PMs. What decisions does OpenAI need to make to ensure developers invest and users benefit?</p><p>Time to exercise our PM brains.</p><p><strong>1. How does OpenAI motivate developers to invest beyond lightweight demos?</strong></p><p>Right now, the strongest incentive for developers is <strong>distribution</strong>. ChatGPT has 800 million weekly users. That alone gets companies interested, but it doesn&#8217;t guarantee they&#8217;ll invest beyond surface-level integrations. If apps see ChatGPT only as an entry point to their app, effectively a marketing channel, then they won&#8217;t innovate and build the &#8220;adaptive, interactive, and personalized&#8221; experiences that Altman and OpenAI wants. OpenAI will need to add</p><p><strong>Meaningful monetization paths.<br></strong>If Canva, Expedia, Figma, or emerging startups could convert ChatGPT users into subscribers or paid transactions while using the apps inside ChatGPT, the quality of apps would increase overnight. Based on one of their articles, OpenAI does plan to leverage the <a href="https://openai.com/index/buy-it-in-chatgpt/">Agentic Commerce Protocol</a> to provide these opportunities for developers.</p><p><strong>Developer analytics.<br></strong>Developers need to understand usage, funnel dropoff, failures, and user behavior. Platforms grow when developers can measure what they built.</p><p>This is the foundation of a healthy ecosystem: developers must see ChatGPT not as a marketing channel but as a place where real business value is created.</p><p><strong>2. How Does OpenAI Make ChatGPT Feel Like a Super Assistant Instead of Just a Middleman?</strong></p><p>ChatGPT feels like an intermediary between you and the app especially for high decision tasks like travel planning or real estate purchase. This is especially obvious in travel and real estate searches, where the model is simply fetching results rather than adding meaningful value.</p><p>What are the value differentiators that ChatGPT can bring to the table? If ChatGPT wants to be your super assistant, it needs to deliver capabilities that individual apps cannot.</p><p>A true super assistant should be able to:</p><ul><li><p>Coordinate across multiple apps so it can complete the ask for you</p></li><li><p>Leverage personal data (preferences, loyalty points, credit card rewards) to optimize decisions</p></li><li><p>Proactively recommend smarter options that the user may not think to ask for</p></li></ul><p><strong>Multi App Workflows</strong></p><p>Right now, each app runs in isolation. You can&#8217;t have ChatGPT call both Expedia and AirBnB. But when I&#8217;m traveling, I like to book my flights with Expedia and my stays with AirBnB. A future where ChatGPT can plan a trip by pulling data from Expedia, AirBnB, and Yelp simultaneously and present a coherent itinerary in a visually beautiful presentation would be a lot more compelling than having me to run each app at a time - going back and forth.</p><p><strong>Profile and Wallet Data</strong></p><p>User context is one of the biggest unlocks for a true super assistant, but this is also a tricky area. If ChatGPT had safe, user controlled access to key personal data e.g. your credit cards, credit score, loyalty points, past trips, or budget preferences, it could optimize decisions across apps. It can choose flights that maximize rewards, suggest hotels where you have status, or flag when a trip exceeds your budget. Even with imperfect UI, saving users time or money is a powerful reason to rely on ChatGPT over any single app. But obtaining some of this data, especially the financial piece is challenging.</p><p>ChatGPT has a lot of interesting data about us. There are many reports of people using ChatGPT as a therapist, sharing their deepest secrets and issues, or as a financial planner, but it may be incomplete or ChatGPT may not have saved it in memory. It may not be organized in a way for ChatGPT to leverage.</p><p>ChatGPT can either (1) wait for users to share this information in conversation or (2) create new features e.g. wallet to store and make purchases to encourage users to share the data needed. I wouldn&#8217;t be surprised if part of the reasoning for building the app ecosystem is to mine data about other areas of our life.</p><p><strong>3. How much should OpenAI invest in UI components?</strong></p><p>Apps today have access to a very small set of <a href="https://developers.openai.com/apps-sdk/plan/components">UI widgets</a> (lists, map, carousel, etc) which works for simple flows but breaks down for decision-heavy tasks like travel planning. This is where the platform is most constrained. Even if Zillow or Expedia wanted to build a rich UX inside ChatGPT, they currently cannot.</p><p><strong>Additional App SDK UI Components</strong></p><p>OpenAI could improve app quality by offering more expressive components such as:</p><ul><li><p>filter bars</p></li><li><p>comparison tables</p></li><li><p>sliders</p></li><li><p>multi-pane layouts</p></li></ul><p><strong>Generative UI</strong></p><p>Even with the Apps SDK, ChatGPT still remains mostly a text based experience. Developers can render a carousel or map, but ChatGPT rarely adapts the UI based on what the user is trying to do. What if ChatGPT can dynamically generate UI within the chat experience based on your query?</p><p>Imagine asking for flights. If you forget to specify stops, dates, or number of travelers, ChatGPT could automatically render a lightweight filter bar under your message, not as part of an app&#8217;s UI, but as part of the assistant experience itself. Instead of reprompting, you&#8217;d adjust a few controls and get precise results immediately.</p><p>Generative UI can improve not only the experience for the Apps inside ChatGPT, but also the ChatGPT experience as a whole. Using text constantly back and forth gets tiring after a while. Sometimes I just want to click things and not read a wall of text.</p><p><strong>4. Category Strategy: Which Types of Apps should OpenAI Optimize for First?</strong></p><p>Not all apps are equally suited to ChatGPT today. Some categories like design and content creation, productivity, and coding with single artifact outputs have been doing well. Others like travel and real estate haven&#8217;t been optimized for ChatGPT yet.</p><p>So the strategic question becomes:</p><p>Where can ChatGPT deliver outsized value today, and where does it need foundational improvements before users feel the magic?</p><p>In the near term, OpenAI should double down on categories where the assistant is performing well: creation, developer tools, writing, summarization, etc. These wins build user trust in the ecosystem and give developers confidence that polished apps will be rewarded.</p><p>Meanwhile, categories like travel and real estate will require longer term platform work: richer UI elements, multi-app orchestration, faster interactions, and additional user context (preferences, financial information, etc). These verticals won&#8217;t shine until the underlying assistant capabilities evolve.</p><p>A strong ecosystem grows from depth in the right places, not breadth everywhere at once. OpenAI doesn&#8217;t need to make every category perfect on day one. It should double down on what&#8217;s doing well.</p><p>What do you think? Have you tried any of the apps inside ChatGPT? Any you particularly like?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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>]]></content:encoded></item><item><title><![CDATA[How I’d Tackle Anthropic’s Claude Code Take Home Assignment (as a Principal-level PM)]]></title><description><![CDATA[A real world walkthrough of product thinking - from brief to metrics]]></description><link>https://bonnieyu.substack.com/p/how-id-tackle-anthropics-claude-code</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/how-id-tackle-anthropics-claude-code</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Mon, 17 Nov 2025 20:33:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/00c2c034-5cc0-4d19-8a1a-345b77ebfbab_1153x258.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently reviewed a few PM&#8217;s take-home assignments from the Anthropic interview process, and noticed some common mistakes. There were basic misses in how they interpreted and understood the assignment. I&#8217;ll walk you through my approach so you can confidently meet core expectations and showcase your best strategic thinking.</p><h3><strong>Here&#8217;s the assignment:</strong></h3><p>&#8220;Anthropic wants to grow the adoption of Claude Code among Fortune 2000 companies. Propose a feature that would increase the virality of the product within an organization. You should choose a direction that is a compelling market (from a size, product-market fit, and competitive landscape perspective) and is achievable by a small team of 5 engineers in a 3 month timeframe.</p><p>Specific Questions:</p><ul><li><p>Description of the target audience and user pain point</p></li><li><p>Description of the proposed feature and user experience</p></li><li><p>How you would test for product-market-fit and what success criteria you would track</p></li><li><p>Why you think that this is a good product strategy</p></li><li><p>Description of risks and mitigations and if relevant, discussion of model capabilities needed</p></li></ul><p>&#8221;</p><h3><strong>How to read the assignment</strong></h3><p>So you understand the problem you&#8217;re solving and what they (Anthropic) expect. A few keywords matter:</p><ul><li><p><strong>Claude Code </strong>- they want someone who understands developer tools and AI agents</p></li><li><p><strong>Virality</strong> <strong>within an org</strong> - not consumer invites. How does one team impact another?</p></li><li><p><strong>Fortune 2000</strong> - enterprise buying dynamics</p></li><li><p><strong>5 engineers in 3 months</strong> - Pragmatic MVP</p></li></ul><p>In short, Anthropic is looking for a pragmatic PM with experience in growth and building enterprise tools for developers, and can ship AI features quickly.</p><h3><strong>Do your due diligence.</strong></h3><p>Look up critical information about the company. Claude&#8217;s business plans split seats into Standard and Premium. On the Team plan, Standard seats are $25/user/mo and Premium seats are $150/user/mo. <strong>Claude Code requires a Premium seat.</strong> See <a href="https://claude.com/pricing#team-&amp;-enterprise">Pricing Page</a>.</p><p>In Enterprise, the customer isn&#8217;t just the primary end user (Developer). You need to consider who pays. The CTO/VP pays the bills and the IT Admin team/Engineering Manager who approves the licenses.</p><p>Why is this important? Because Claude Code sits behind a Premium seat, your feature needs to make the Premium seat obviously worthwhile to the budget owner for the end user, or if we want to convert adjacent roles like PM/QA it needs to be so compelling that they will advocate for the Premium seat.</p><h3><strong>What virality means here</strong></h3><p>In simple terms, virality is about existing users taking an action that brings other users into the product. A popular example is a Slack user invites a teammate so they can have a conversation together. In a consumer setting, we can also discuss referrals, but in enterprise products it&#8217;s important to consider work artifacts (PRs, work summaries, templates etc) that other employees encounter in their workflow. What are artifacts within Claude that bring users together to collaborate or create value when shared?</p><p>With that said, the primary user I&#8217;d target is - Developers, Tech Leads, EMs.</p><ul><li><p>Anthropic has a decent chunk of existing developers who can then bring in other users.</p></li><li><p>Claude Code is mainly for developers and they are most likely to get a paid premium seat.</p></li><li><p>We need to build the feature within 3 months and this is a short take home assignment. Going after a secondary role like PM or Designer would require more strategic thinking and a longer term plan which given the constraints would be difficult for this take home assignment</p></li></ul><h3><strong>Ask Recruiter any clarifying questions</strong></h3><p>Whether it&#8217;s an interview or a take home assignment, try to get as much information out of your recruiter as possible. In this case, you may want to clarify whether &#8220;virality within an organization&#8221; is specific to Anthropic Enterprise users, or if they are also considering Claude Code within IDEs like Cursor. Are we focused on seat acquisition or are we focused on engagement with Claude Code?</p><p><strong>Since we don&#8217;t have a recruiter, we&#8217;ll focus on the Anthropic Enterprise users for our write up</strong></p><div><hr></div><p><strong>FYI I&#8217;m a Product Coach and Consultant. If you&#8217;d like help with your writing and upskilling as a PM, contact me at <a href="mailto:bonnieyu.coaching@gmail.com">bonnieyu.coaching@gmail.com</a> or connect with me at <a href="https://www.linkedin.com/in/bonnieyu1/">LinkedIn</a></strong></p><div><hr></div><h3><strong>The Take-Home Write Up</strong></h3><p>Our goal is to increase the virality of Claude Code (CC) within an organization for Fortune 2000 companies. Today, most customers use CC individually, whether that&#8217;s as a coding assistant or for automating various tasks, but most projects happen collaboratively. Developers, the primary user of CC, work within teams and often need to collaborate outside of CC. In large or distributed teams, this includes hand-offs, supporting on-call, sharing work status, working in other team&#8217;s code bases, etc.</p><p>Anthropic has been winning the favor of many developers. However there is competition with OpenAI&#8217;s Codex, Google&#8217;s Gemini CLI, Cursor, etc. Anthropic should leverage its current base of developers to bring in more users to CC, develop a moat against rising competitors, and solve our developer pain points.</p><p>Developers today have a number of pain points. For example,</p><ul><li><p><strong>Ramping up.</strong> Developers often need to ramp up on other codebases quickly. This can be joining a new team or onboarding on a different team&#8217;s codebase, but every new codebase feels like starting from scratch. </p></li><li><p><strong>Time lost to non-coding overhead.</strong> Developers need to spend time writing incident reports, status updates, and hand off notes that pull developers out of their flow.</p></li><li><p><strong>Repeated questions / tribal knowledge trapped in silos.</strong> The same questions and debugging steps get repeated because answers live in private chats or notes.</p></li><li><p><strong>Slow incident response.</strong> Missing teammates or missing team playbooks extends on call</p></li></ul><p><strong>Solution</strong></p><p>Anthropic has the opportunity to create a shared, collaborative experience for teams by introducing Claude Workspaces. Claude Workspace is a new web application where teams can co-create, organize and share Claude interactions tied to their projects.</p><p>Teams can create new projects and add Claude based assets such as prompt libraries, custom agents, and new status summaries directly from Claude Code. In the short term, this enables lightweight sharing of team-specific knowledge and automations of common workflows.</p><p>Over time, Claude Workspaces can evolve into a broader collaboration hub, for example adding a tie in to Claude.ai&#8217;s prompts, skills, and artifacts. This can allow other team members like PMs to include their product specs. We can also add conversations and comments directly in the workspace. The vision is for Claude Workspace to serve as a shared hub for team knowledge and workflows, and not just a file repository.</p><p><strong>The MVP</strong></p><p>This is a big vision that we need to scope down to meet our 3 months constraint. The core value of Workspaces comes from storing team knowledge in lightweight, reusable objects that can be shared and discovered across the organization.</p><p>Our MVP will focus on shipping a small set</p><p><strong>Prompts: </strong>Simple, reusable prompt files that help new developers ramp up quickly by giving them access to proven, context-rich prompts used by their team. Over time, these accumulate into team-specific prompt libraries.</p><p><strong>Custom Agents:</strong> Claude Code already supports custom agents; the MVP makes them shareable and reusable across teammates. Teams can create reusable agents that understand their team&#8217;s codebase and processes. Examples include</p><ul><li><p>Point and Estimation Agents that can help teams standardize epic and story estimation</p></li><li><p>On Call Agent that your team and other teams can leverage to speed up incident resolution</p></li></ul><p><strong>Statuses (Nice to Have)</strong>: Claude Code already retains some memory of developer activity. The new status feature would build on this foundation to automatically generate a daily or weekly summary of Claude Code activity, and allows developers to share it to the team&#8217;s workspace. No more digging through Git or slack threads for stand ups. While valuable, this is not required for the initial collaboration loop, and can be saved for a Phase 2. </p><p>MVP Requirements</p><p>Workspace Experience</p><ul><li><p>Workspace dashboard (list of workspaces, project creation)</p></li><li><p>Ability to invite teammates via e-mail or link</p></li><li><p>Basic search</p></li><li><p>Basic access controls (add, edit, view, delete)</p></li></ul><p>Claude Code Experience</p><ul><li><p>Share a prompt, agent, or status to workspace</p></li><li><p>Search and find a prompt or custom agent</p></li><li><p>Claude Code agent can search, surface, or add workspace items on behalf of the user</p></li><li><p>(**Nice to have**) Automatically generate a daily or weekly summary of CC activity as a shareable object that users can choose to share </p></li></ul><p><strong>Why is this the right strategy?</strong></p><p>Enterprise virality looks different from consumer virality. Developers don&#8217;t invite teammates for points or badges, they do it to make their workflows smoother. That&#8217;s why developers and tech leads are the right target audience. They are the primary users of Claude Code today, they have real collaboration pain points, and they are the ones who naturally influence tool adoption across engineering teams.</p><p>By building Workspaces, Anthropic can unlock two strategic benefits. </p><p>First, Workspaces create a viral loop. When a developer saves a useful custom agent or prompt into a workspace, others can discover and reuse it instantly. Each new shared item compounds the value for the next user increasing the likelihood of virality.  Workspaces increase virality by creating visibility and collaboration.</p><p>Second, Workspaces strengthens Anthropic&#8217;s long-term position within Enterprises. By storing a team&#8217;s persistent knowledge, prompts, workflows, etc, the product becomes embedded in how that engineering org works. That creates a natural moat: switching tools means losing accumulated team intelligence, not just replacing a coding assistant.</p><p>Imagine a scenario where a developer is responding to an on-call incident, and they realize it&#8217;s related to a different team&#8217;s service. They page the other team&#8217;s on call. As they are waiting, they can search the other team&#8217;s Workspace, find their On-Call Agent, and immediately begin investigation. Anyone joining the incident can see all past reasoning, shared updates, and status summaries, dramatically speeding up response time.</p><p>Other examples:</p><ul><li><p>A backend engineer shares a &#8220;PR Review Agent&#8221; that helps standardize review feedback. Other developers adopt it because it saves them time and produces consistent quality.</p></li><li><p>A tech lead curates a prompt library for their project, giving new hires a 2x faster onboarding experience. The next time another team forms, they naturally start their own workspace.</p></li></ul><p>These loops of reuse, collaboration, and discovery create organic virality within enterprise. Claude Workspaces transform individual Claude Code interactions into team assets, assets that are more valuable when shared than when kept private.</p><p><strong>Metrics</strong></p><p>From a virality standpoint, key metrics are</p><ul><li><p>% of users who invite at least one teammate to a workspace</p></li><li><p>% of new users that join a workspace</p><ul><li><p>Break down licensed vs unlicensed Premium users</p></li></ul></li><li><p>Increase in Premium license request and approvals</p></li></ul><p>Engagement metrics</p><ul><li><p>% of users who use an asset in a workspace</p></li><li><p>% of users who come back within 7 days to use or share an asset</p></li></ul><p>Other metrics</p><ul><li><p>% of users who are part of a workspace</p></li><li><p>Unique collaborators per workspace</p></li><li><p>Positive customer feedback</p></li></ul><p>*Note: we&#8217;ll also want to track absolute number counts to show business impact</p><p><strong>Roll Out Strategy</strong></p><ol><li><p>Start by dogfooding or doing an internal launch to refine flows</p></li><li><p>If Anthropic already has a beta program for Enterprise users, pilot the program with enterprise customers</p></li><li><p>Roll out to X% of organizations and scale to the rest of the Enterprise users</p></li></ol><p><strong>Risks and Mitigations</strong></p><p>The main risk lies in the new Status feature. While Claude Code retains some memory, the new Statuses feature will likely need an update to Claude Code&#8217;s model to track daily and weekly work that can be effectively shared out. This introduces two concerns:</p><ul><li><p>potential pressure on Claude Code&#8217;s context window, and</p></li><li><p>increased engineering complexity that could push delivery beyond the 3-month constraint.</p></li></ul><p>Before making a decision, we should get developer feedback on costing. If necessary, we can cut the Statuses feature from the MVP release. The core value of Workspaces still stands on its own. Statuses can be introduced as a Phase 2 enhancement once we validate demand.</p><p><strong>Taking this to the Next Level</strong></p><p>If I was applying to Anthropic, here&#8217;s what I&#8217;d do (before applying!) </p><ul><li><p>Anthropic is constantly releasing new features&#8230; even as we speak, the features in this post are quickly going out of date! Take time to go through all the new feature releases in more depth. See Claude Code <a href="https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md">changelog</a>.</p></li><li><p>Test other scenarios where Claude Code appears such as Cursor with Claude Code. This might help you brainstorm better ideas</p></li><li><p>Talk to developers who work on Enterprise codebases so you get a deeper understanding of developer workflows. Instead of a bigger vision that I&#8217;ve scoped to a MVP, you can solve a very specific developer pain point that is viral. </p></li><li><p>Add any data points that can help make the case better for example <a href="https://www.anthropic.com/research/impact-software-development">Anthropic&#8217;s Economic Index report, Enterprise user adoption is lagging behind</a></p></li><li><p>Weave in Anthropic&#8217;s <a href="https://www.anthropic.com/company">mission statement</a> where it makes sense: Making AI systems you can rely on. Anthropic is an AI safety and research company. We build reliable, interpretable, and steerable AI systems.</p></li></ul><p>Let me know in the comments what you think of this post. What kind of topics do you want me to write about? Also, I&#8217;m considering launching a course for PMs. Tell me what you&#8217;d like to learn - Growth, UX, data analysis, etc!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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>]]></content:encoded></item><item><title><![CDATA[A n8n tutorial: How I Send the Best AI Articles to My Kindle]]></title><description><![CDATA[Automate Getting Your Content to Kindle]]></description><link>https://bonnieyu.substack.com/p/a-n8n-tutorial-how-i-send-the-best</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/a-n8n-tutorial-how-i-send-the-best</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Fri, 07 Nov 2025 21:14:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BACe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you love reading long form content on your Kindle, this is for you! I love reading deep-dive posts from Ben Thompson&#8217;s Stratechery, MIT AI News, OpenAI, and Anthropic blog posts in a quiet space. I actually want to read the whole article, not just a summary.</p><p>I wanted everything formatted nicely and delivered straight to my Kindle &#8212; so I built an <strong>n8n automation</strong> that curates the best AI content, and emails it as a Kindle document. If you&#8217;re new to n8n, n8n is a no-code/low-code automation tool that lets you visually connect APIs, apps, and AI models. Lenny&#8217;s newsletter has been offering n8n free for one year as part of the product pass. You can check if it&#8217;s still available <a href="https://www.lennysnewsletter.com/p/productpass">here</a>. Otherwise you can sign up for an account <a href="https://n8n.io/">here</a>.</p><p>Now on to the building.</p><div><hr></div><h2><strong>Start With the Problem, Not the Tool</strong></h2><p>Before jumping into n8n, map out what you actually need your workflow to do.</p><p><strong>Goal:</strong> Aggregate curated AI content from the past X days with an executive summary, and send the articles to Kindle.</p><h3><strong>Inputs</strong></h3><ul><li><p><strong>Newsletters from Gmail </strong>that I&#8217;ve labeled</p></li><li><p><strong>AI RSS Feed Sources (Example)</strong></p><ul><li><p>Anthropic: <a href="https://raw.githubusercontent.com/Olshansk/rss-feeds/main/feeds/feed_anthropic_engineering.xml">Engineering</a></p></li><li><p>OpenAI:<a href="https://developers.openai.com/blog/?utm_source=chatgpt.com"> </a><a href="https://openai.com/news/rss.xml">News</a></p></li></ul></li></ul><h3><strong>Steps</strong></h3><ol><li><p>Pull all items published in the last X days</p></li><li><p>Merge RSS + Gmail newsletters</p></li><li><p>Ask a model to write:</p><ul><li><p>A high-level <em>Executive Summary</em></p></li><li><p>A <em>Table of Contents</em> ranked by relevance</p></li><li><p>The <em>exact article bodies</em> (no paraphrasing)</p></li></ul></li></ol><h3><strong>Output</strong></h3><p>One clean HTML file that looks like this on Kindle:</p><p>AI Highlights<br>Executive Summary<br>Table of Contents (Clickable)<br>Full articles with Title, Author, Date, and Original Link</p><h2><strong>Quick n8n Tips</strong></h2><p><strong>Adding Nodes</strong></p><p>Hit the &#8220;+&#8221; sign to add nodes, and use it to search for the nodes in this guide</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OOhr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OOhr!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png 424w, /__u/substackcdn.com/image/fetch/$s_!OOhr!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png 848w, /__u/substackcdn.com/image/fetch/$s_!OOhr!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OOhr!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OOhr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png" width="503" height="436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:503,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!OOhr!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png 424w, /__u/substackcdn.com/image/fetch/$s_!OOhr!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png 848w, /__u/substackcdn.com/image/fetch/$s_!OOhr!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OOhr!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28298f04-db0d-4ab7-bd71-4d87423bc7a8_503x436.png 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 aria-hidden="true" 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><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><strong>Expression mode</strong></p><p>Sometimes you&#8217;ll need to switch to the Expression mode so n8n can parse the $json for you to pull the input variables</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HNKO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HNKO!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png 424w, /__u/substackcdn.com/image/fetch/$s_!HNKO!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png 848w, /__u/substackcdn.com/image/fetch/$s_!HNKO!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HNKO!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HNKO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png" width="432" height="153" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:153,&quot;width&quot;:432,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!HNKO!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png 424w, /__u/substackcdn.com/image/fetch/$s_!HNKO!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png 848w, /__u/substackcdn.com/image/fetch/$s_!HNKO!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HNKO!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5599de6-11ee-4750-95d6-5715bb3d783c_432x153.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Test as you build</strong></p><p>When you hover over a node, there&#8217;s a little play button that lets you execute that specific node so you can check if the node works or not.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!TqKc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!TqKc!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png 424w, /__u/substackcdn.com/image/fetch/$s_!TqKc!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png 848w, /__u/substackcdn.com/image/fetch/$s_!TqKc!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TqKc!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!TqKc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png" width="173" height="161" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:161,&quot;width&quot;:173,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!TqKc!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png 424w, /__u/substackcdn.com/image/fetch/$s_!TqKc!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png 848w, /__u/substackcdn.com/image/fetch/$s_!TqKc!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TqKc!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3a4012-496d-4e74-90fd-fb0d030313ad_173x161.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>There&#8217;s also an Execute Step button when you click into each node so you can run the node and check the input and outputs</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0uzC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0uzC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png 424w, /__u/substackcdn.com/image/fetch/$s_!0uzC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png 848w, /__u/substackcdn.com/image/fetch/$s_!0uzC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0uzC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0uzC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png" width="696" height="116" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:116,&quot;width&quot;:696,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!0uzC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png 424w, /__u/substackcdn.com/image/fetch/$s_!0uzC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png 848w, /__u/substackcdn.com/image/fetch/$s_!0uzC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0uzC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1edbf4-11a4-432c-a918-946eeaa5b89b_696x116.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2><strong>Let&#8217;s Build your n8n Workflow</strong></h2><p>This is what the final n8n workflow will look like.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4_pe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 424w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 848w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4_pe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png" width="1456" height="345" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:345,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79186,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/178303151?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 424w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 848w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2><strong>Step 1: Gather all your content</strong></h2><p>We are going to start with gathering the data (RSS Feeds and Newsletters in my Gmail) that we are sending to the Kindle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BACe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BACe!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png 424w, /__u/substackcdn.com/image/fetch/$s_!BACe!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png 848w, /__u/substackcdn.com/image/fetch/$s_!BACe!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BACe!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BACe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png" width="803" height="302" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:302,&quot;width&quot;:803,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!BACe!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png 424w, /__u/substackcdn.com/image/fetch/$s_!BACe!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png 848w, /__u/substackcdn.com/image/fetch/$s_!BACe!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BACe!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42d99841-6f0c-432f-8bbb-570216717ab0_803x302.png 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 aria-hidden="true" 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><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><strong>1. Trigger</strong></p><p>When building I start with a &#8220;Trigger Manually&#8221; node. Once you have the flow working, you can change it to a &#8220;Schedule Trigger&#8221; node, so it runs on a schedule.</p><p><strong>2. Get RSS Feeds</strong></p><p>We are using 3 different nodes here to gather our RSS feeds</p><ul><li><p>&#8220;Code&#8221; node to create a RSS feed URL List</p></li><li><p>&#8220;RSS Read&#8221; node to read the content from the URLs</p></li><li><p>&#8220;Filter&#8221; node to pull in the last X days of content</p></li></ul><p><strong>&#8220;Code&#8221; node to create the RSS feed URL list</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Z2qU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Z2qU!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png 424w, /__u/substackcdn.com/image/fetch/$s_!Z2qU!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png 848w, /__u/substackcdn.com/image/fetch/$s_!Z2qU!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Z2qU!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Z2qU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png" width="1012" height="547" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:547,&quot;width&quot;:1012,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!Z2qU!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png 424w, /__u/substackcdn.com/image/fetch/$s_!Z2qU!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png 848w, /__u/substackcdn.com/image/fetch/$s_!Z2qU!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Z2qU!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55cbc9f1-39aa-4565-a34d-ce06df62fbdf_1012x547.png 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 aria-hidden="true" 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><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>Mode: Run Once for All Items</p><p>Language: Javascript</p><p>Javascript:</p><pre><code>return [{ url: &#8216;&#8217; },{ url: &#8216;&#8217; },{ url: &#8216;&#8217;}];</code></pre><p>You&#8217;ll need to insert the RSS feed URL in the quotes.</p><p><strong>Read RSS node</strong> to fetch the content</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!L-Jg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!L-Jg!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png 424w, /__u/substackcdn.com/image/fetch/$s_!L-Jg!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png 848w, /__u/substackcdn.com/image/fetch/$s_!L-Jg!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png 1272w, /__u/substackcdn.com/image/fetch/$s_!L-Jg!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!L-Jg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png" width="776" height="402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:402,&quot;width&quot;:776,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!L-Jg!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png 424w, /__u/substackcdn.com/image/fetch/$s_!L-Jg!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png 848w, /__u/substackcdn.com/image/fetch/$s_!L-Jg!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png 1272w, /__u/substackcdn.com/image/fetch/$s_!L-Jg!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75271c62-4f31-4152-9b6d-a9cc4f4eb05d_776x402.png 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 aria-hidden="true" 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><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>URL: {{ $json.url }}</p><p><strong>Filter Node</strong></p><p>Filter for the last 2 days of content</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BquY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BquY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png 424w, /__u/substackcdn.com/image/fetch/$s_!BquY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png 848w, /__u/substackcdn.com/image/fetch/$s_!BquY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BquY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BquY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png" width="1003" height="326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:326,&quot;width&quot;:1003,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!BquY!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png 424w, /__u/substackcdn.com/image/fetch/$s_!BquY!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png 848w, /__u/substackcdn.com/image/fetch/$s_!BquY!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BquY!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b746525-7671-4a44-9b9f-dccbb6a7cfb4_1003x326.png 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 aria-hidden="true" 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><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>fx: {{ $json.isoDate }}</p><p>Date &amp; Time: is after or equal to</p><p>fx: {{ $now.minus({ days: 2 }).toISO() }}</p><p>** Change the 2 to a different number if you want to pull more or less days of content</p><p>Here&#8217;s what the 3 nodes should look like!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!A5Ex!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!A5Ex!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png 424w, /__u/substackcdn.com/image/fetch/$s_!A5Ex!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png 848w, /__u/substackcdn.com/image/fetch/$s_!A5Ex!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png 1272w, /__u/substackcdn.com/image/fetch/$s_!A5Ex!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!A5Ex!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png" width="556" height="181" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:181,&quot;width&quot;:556,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!A5Ex!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png 424w, /__u/substackcdn.com/image/fetch/$s_!A5Ex!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png 848w, /__u/substackcdn.com/image/fetch/$s_!A5Ex!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png 1272w, /__u/substackcdn.com/image/fetch/$s_!A5Ex!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd81fd7-7e20-4285-b273-dafae9937446_556x181.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>3. Get Gmail Newsletters</strong></p><p>Connect Gmail to n8n</p><p>In your workflows page, click the dropdown on the Create Workflow button to &#8220;Create Credential&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6Dda!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6Dda!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png 424w, /__u/substackcdn.com/image/fetch/$s_!6Dda!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png 848w, /__u/substackcdn.com/image/fetch/$s_!6Dda!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6Dda!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6Dda!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png" width="381" height="187" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:187,&quot;width&quot;:381,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!6Dda!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png 424w, /__u/substackcdn.com/image/fetch/$s_!6Dda!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png 848w, /__u/substackcdn.com/image/fetch/$s_!6Dda!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6Dda!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841c6a07-c11c-44dd-868c-1045992bcbd3_381x187.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>After you click, Create Credential, search for GMail and authorize n8n to use your Gmail account to read and send e-mails. I removed the ability for n8n to delete anything. Once your gmail account is connected, add a GMail node, and specifically &#8220;Get Many Messages&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!EdlO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!EdlO!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png 424w, /__u/substackcdn.com/image/fetch/$s_!EdlO!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png 848w, /__u/substackcdn.com/image/fetch/$s_!EdlO!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png 1272w, /__u/substackcdn.com/image/fetch/$s_!EdlO!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!EdlO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png" width="495" height="455" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:455,&quot;width&quot;:495,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!EdlO!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png 424w, /__u/substackcdn.com/image/fetch/$s_!EdlO!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png 848w, /__u/substackcdn.com/image/fetch/$s_!EdlO!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png 1272w, /__u/substackcdn.com/image/fetch/$s_!EdlO!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2037ab4c-ed14-425b-83a5-12f44d257d58_495x455.png 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 aria-hidden="true" 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><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>&#8220;Get Many Messages&#8221; node we are going to use the gmail label to filter for the e-mails we want and search for &#8220;newer_than: 2d&#8221; If you want it to be last 24 hour, you can change it to 1d, or if you want it to be weekly you can change it to 7d.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ZxPx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZxPx!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZxPx!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZxPx!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZxPx!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZxPx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png" width="766" height="770" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:766,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!ZxPx!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZxPx!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZxPx!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZxPx!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868cba4b-3bea-4689-8162-f36a4bed0eff_766x770.png 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 aria-hidden="true" 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><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><strong>4. Merge and Aggregate the RSS and Gmail feeds</strong></p><p>For the next part, we need to merge and aggregate all our content to pass it to the LLM.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!3BsP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!3BsP!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png 424w, /__u/substackcdn.com/image/fetch/$s_!3BsP!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png 848w, /__u/substackcdn.com/image/fetch/$s_!3BsP!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3BsP!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!3BsP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png" width="548" height="343" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:343,&quot;width&quot;:548,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!3BsP!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png 424w, /__u/substackcdn.com/image/fetch/$s_!3BsP!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png 848w, /__u/substackcdn.com/image/fetch/$s_!3BsP!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3BsP!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1d2292c-1872-4948-9261-5372dc9fcfc8_548x343.png 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 aria-hidden="true" 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><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>Add a &#8220;Merge&#8221; node to append the two data sources</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!oLlU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!oLlU!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png 424w, /__u/substackcdn.com/image/fetch/$s_!oLlU!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png 848w, /__u/substackcdn.com/image/fetch/$s_!oLlU!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oLlU!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!oLlU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png" width="780" height="403" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:403,&quot;width&quot;:780,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!oLlU!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png 424w, /__u/substackcdn.com/image/fetch/$s_!oLlU!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png 848w, /__u/substackcdn.com/image/fetch/$s_!oLlU!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oLlU!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7486dd07-f65a-4a96-943f-f531ba6fbbb2_780x403.png 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 aria-hidden="true" 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><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>Add an &#8220;Aggregate&#8221; node to create a single list</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Hg4t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Hg4t!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png 424w, /__u/substackcdn.com/image/fetch/$s_!Hg4t!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png 848w, /__u/substackcdn.com/image/fetch/$s_!Hg4t!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Hg4t!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Hg4t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png" width="773" height="515" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:515,&quot;width&quot;:773,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!Hg4t!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png 424w, /__u/substackcdn.com/image/fetch/$s_!Hg4t!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png 848w, /__u/substackcdn.com/image/fetch/$s_!Hg4t!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Hg4t!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed900b84-61be-4756-b92f-6aa73c32ee73_773x515.png 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 aria-hidden="true" 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><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><h2><strong>Step 2: Extract and Format the Data</strong></h2><p>We&#8217;ll be using a LLM to extract the content and format the data to send to Kindle. If you want to optimize this step, you can look into using a Readability API or library. Mozilla has an open source Readability.js that you can look into testing. The downside of using a LLM for this step is you can&#8217;t pass it that much content, but I already have an OpenAI Key so it&#8217;s convenient for me to set up.</p><p><strong>Set up your Open AI account and secret key</strong></p><p>Similar to the GMail account, you&#8217;ll need to Create a New Credential and add your OpenAI Key. If you&#8217;ve never created an OpenAI Key, create an account at </p><p>https://platform.openai.com/</p><p>and then go to <a href="https://platform.openai.com/api-keys">https://platform.openai.com/api-keys</a> to create your first API key. You will need it to for the &#8220;OpenAI&#8221; node.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rcqp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rcqp!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png 424w, /__u/substackcdn.com/image/fetch/$s_!rcqp!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png 848w, /__u/substackcdn.com/image/fetch/$s_!rcqp!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rcqp!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rcqp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png" width="587" height="627" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:627,&quot;width&quot;:587,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!rcqp!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png 424w, /__u/substackcdn.com/image/fetch/$s_!rcqp!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png 848w, /__u/substackcdn.com/image/fetch/$s_!rcqp!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rcqp!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95e60d8-6931-4495-82d6-d4149b8af5f2_587x627.png 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 aria-hidden="true" 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><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><strong>Add a &#8220;Message a Model&#8221; node to do the extractions</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FE6c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FE6c!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png 424w, /__u/substackcdn.com/image/fetch/$s_!FE6c!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png 848w, /__u/substackcdn.com/image/fetch/$s_!FE6c!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FE6c!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FE6c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png" width="455" height="212" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff44161c-bf85-4771-843c-c5216ced7600_455x212.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:212,&quot;width&quot;:455,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!FE6c!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png 424w, /__u/substackcdn.com/image/fetch/$s_!FE6c!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png 848w, /__u/substackcdn.com/image/fetch/$s_!FE6c!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FE6c!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff44161c-bf85-4771-843c-c5216ced7600_455x212.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!DSAL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!DSAL!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png 424w, /__u/substackcdn.com/image/fetch/$s_!DSAL!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png 848w, /__u/substackcdn.com/image/fetch/$s_!DSAL!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DSAL!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!DSAL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png" width="776" height="758" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15666bba-8124-480d-a579-e2694f606f62_776x758.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:758,&quot;width&quot;:776,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!DSAL!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png 424w, /__u/substackcdn.com/image/fetch/$s_!DSAL!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png 848w, /__u/substackcdn.com/image/fetch/$s_!DSAL!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DSAL!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15666bba-8124-480d-a579-e2694f606f62_776x758.png 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 aria-hidden="true" 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><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>Model: GPT-4.1-MINI</p><p>I tested GPT-5 but it was too slow and n8n would often abort the workflow.</p><p>We&#8217;ll add a System prompt and a User Prompt</p><p><strong>Here&#8217;s the System prompt:</strong></p><pre><code>You are a careful extractor and formatter of long form content for reading on Kindle devices. You must:

- Never alter or rewrite the article bodies. Render them verbatim, preserving paragraph breaks and basic inline formatting.

- If an article body is provided as HTML, remove the article&#8217;s html and css styling, maintain a minimal HTML structure for readability (paragraphs/line breaks, lists, inline code), but do not paraphrase or change wording.

- If an article body is plain text or Markdown, convert minimal structure to HTML for readability (paragraphs/line breaks, lists, inline code), but do not paraphrase or change wording.

- Do not invent missing data. If author or date is unknown, show &#8220;Unknown&#8221;.

- Create stable in-document anchors and a Table of Contents that jumps to each article on Kindle.

- Rank links by relevance for a PM interested in AI technology, product strategy, and tutorials (highest), then research/product announcements, then policy/press, and finally podcast/interview/marketing (lowest).

- Output one complete, valid HTML document only&#8212;no extra commentary.</code></pre><p><strong>Here&#8217;s the user prompt:</strong></p><pre><code>Below is long form content from RSS Feeds and Gmail newsletters

DATA_START

{{ JSON.stringify($json.combinedData) }}

DATA_END

TASKS

1) Executive Summary (two short sections):

- &#8220;RSS Highlights&#8221;

- &#8220;Newsletter Highlights&#8221;

Each section should include why a PM should care (strategy, product, pricing, availability, benchmarks, enterprise impact). Use only information present in the items; do not fabricate details.

2) Table of Contents:

- One ordered list of links to articles, ranked by PM relevance:

Rank buckets from highest to lowest:

A) technology/product strategy/tutorials/how-to/engineering

B) research or product announcements with substance (benchmarks, evals)

C) policy/press

D) podcasts/interviews/marketing

- Each entry MUST be: &#8220;Title &#8212; by Author&#8221; where Author may be &#8220;Unknown&#8221;.

- Each link should be an in-document anchor to the article section (e.g., href=/__u/bonnieyu.substack.com/&amp;#8221;#item-001&amp;#8221;).

3) Articles Section (verbatim bodies):

- For each item (same order as Table of Contents), render:

&lt;h2 id=&#8221;item-XXX&#8221;&gt;&lt;b&gt;Title&lt;/b&gt;&lt;/h2&gt;

&lt;p&gt;&lt;i&gt;by Author &#8226; Source &#8226; Date&lt;/i&gt;&lt;/p&gt;

&lt;div class=&#8221;article-body&#8221;&gt;[EXACT BODY]&lt;/div&gt;

&lt;p&gt;&lt;i&gt;Original:&lt;/i&gt; &lt;a href=/__u/bonnieyu.substack.com/&amp;#8221;URL&amp;#8221;%3EURL%3C/a%3E%3C/p%3E

- EXACT BODY rules:

* If htmlContent exists: place it unchanged inside &lt;div class=&#8221;article-body&#8221;&gt;&#8230;&lt;/div&gt;.

* Else if markdownContent exists: convert minimally to HTML (paragraphs, lists, inline code), no paraphrasing.

* Else if textContent exists: wrap paragraphs, preserve line breaks, no paraphrasing.

- Do not remove or rewrite sentences. You may strip tracking params from URLs if present, otherwise leave as-is.

OUTPUT

Return a single self-contained HTML document with inline &lt;style&gt; suited for Kindle reading:

- Use semantic tags and simple CSS only (no external assets, no scripts).

- Keep layout single-column, comfortable line-height, and avoid tiny fonts.

- Ensure anchors are stable and unique (#item-000, #item-001, &#8230;).

- Insert &lt;hr&gt; between articles.

- Avoid giant images; if &lt;img&gt; tags are present in htmlContent, set max-width:100%.

HTML TEMPLATE (use this skeleton and fill it):

&lt;!doctype html&gt;

&lt;html&gt;

&lt;head&gt;

&lt;meta charset=&#8221;utf-8&#8221;&gt;

&lt;title&gt;AI Highlights&lt;/title&gt;

&lt;style&gt;

body { font-family: serif; line-height: 1.45; max-width: 46rem; margin: 0 auto; padding: 1rem; }

h1, h2 { page-break-after: avoid; }

h1 { margin: 0.3em 0 0.6em; }

h2 { margin: 1.2em 0 0.3em; }

p, li { margin: 0.4em 0; }

hr { margin: 1.2em 0; }

small { color: #444; }

.summary { font-style: italic; margin: 0.6em 0 1em; }

.toc a { text-decoration: none; }

.article-body img { max-width: 100%; height: auto; }

.meta { color:#555; font-style: italic; }

&lt;/style&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;h1&gt;AI Highlights&lt;/h1&gt;

&lt;h2&gt;Executive Summary&lt;/h2&gt;

&lt;h3&gt;RSS Highlights&lt;/h3&gt;

&lt;div&gt;

&lt;/div&gt;

&lt;h3&gt;Gmail Highlights&lt;/h3&gt;

&lt;div&gt;

&lt;/div&gt;

&lt;h2&gt;Contents&lt;/h2&gt;

&lt;ol class=&#8221;toc&#8221;&gt;

&lt;!-- One &lt;li&gt;&lt;a href=/__u/bonnieyu.substack.com/&amp;#8221;#item-000&amp;#8221;%3ETitle &#8212; by Author&lt;/a&gt;&lt;/li&gt; per article, ranked by relevance --&gt;

&lt;/ol&gt;

&lt;!-- ARTICLES (exact bodies) --&gt;

&lt;!-- Repeat for each item in the same order as TOC --&gt;

&lt;hr /&gt;

&lt;h2 id=&#8221;item-000&#8221;&gt;&lt;b&gt;&lt;!-- Title --&gt;&lt;/b&gt;&lt;/h2&gt;

&lt;p class=&#8221;meta&#8221;&gt;by &lt;!-- Author or Unknown --&gt; &#8226; &lt;!-- Source or Unknown --&gt; &#8226; &lt;!-- Date or Unknown --&gt;&lt;/p&gt;

&lt;div class=&#8221;article-body&#8221;&gt;

&lt;!-- EXACT HTML if htmlContent; else minimal conversion from markdown/text --&gt;

&lt;/div&gt;

&lt;p&gt;&lt;i&gt;Original:&lt;/i&gt; &lt;a href=/__u/bonnieyu.substack.com/&amp;#8221;%3C!-- URL or # --&gt;&#8221;&gt;&lt;!-- URL --&gt;&lt;/a&gt;&lt;/p&gt;

&lt;/body&gt;

&lt;/html&gt;</code></pre><p>The prompt is the most critical part of the model. Aside from the extraction and formatting of the content, it also ranks the articles based on my preferences. Modify the prompt to your liking!</p><h2><strong>Step 4: Prepare and Send Data to Kindle</strong></h2><p>We are almost at the finish line!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ttNZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ttNZ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png 424w, /__u/substackcdn.com/image/fetch/$s_!ttNZ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png 848w, /__u/substackcdn.com/image/fetch/$s_!ttNZ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ttNZ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ttNZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png" width="536" height="197" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:197,&quot;width&quot;:536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!ttNZ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png 424w, /__u/substackcdn.com/image/fetch/$s_!ttNZ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png 848w, /__u/substackcdn.com/image/fetch/$s_!ttNZ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ttNZ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cf256f6-6d8e-4abb-a8cf-ee35503b8a10_536x197.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Kindle only accepts certain formats like HTML or ePUB as an e-mail attachment. More details on how to send documents to Kindle can be found <a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=G5WYD9SAF7PGXRNA">here</a>.</p><p><strong>Create a binary file for attachment</strong></p><p>Add a &#8220;Edit Field&#8221; node and give it the ChatGPT Message</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!H0RC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!H0RC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png 424w, /__u/substackcdn.com/image/fetch/$s_!H0RC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png 848w, /__u/substackcdn.com/image/fetch/$s_!H0RC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png 1272w, /__u/substackcdn.com/image/fetch/$s_!H0RC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!H0RC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png" width="675" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:675,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!H0RC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png 424w, /__u/substackcdn.com/image/fetch/$s_!H0RC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png 848w, /__u/substackcdn.com/image/fetch/$s_!H0RC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png 1272w, /__u/substackcdn.com/image/fetch/$s_!H0RC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34dd6fc8-e20d-42af-bbc8-a21b4e0238f2_675x521.png 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 aria-hidden="true" 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><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>Add a &#8220;Convert to File&#8221; node to create a HTML file. Note: We can&#8217;t use a Convert to HTML file node because n8n will put it in a table and wrap it in html tags which Kindle doesn&#8217;t accept.</p><p>In the File Name field, you can name the file how you like - I called it &#8220;AI Highlights.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MbXn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MbXn!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png 424w, /__u/substackcdn.com/image/fetch/$s_!MbXn!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png 848w, /__u/substackcdn.com/image/fetch/$s_!MbXn!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MbXn!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MbXn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png" width="690" height="667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e5f1261-5222-4478-983d-5aea479839e7_690x667.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:667,&quot;width&quot;:690,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!MbXn!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png 424w, /__u/substackcdn.com/image/fetch/$s_!MbXn!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png 848w, /__u/substackcdn.com/image/fetch/$s_!MbXn!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MbXn!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e5f1261-5222-4478-983d-5aea479839e7_690x667.png 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 aria-hidden="true" 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><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>You can also use the &#8220;Expression Mode&#8221; and add a date to the file name:</p><p>AI Highlights {{ $now.format(&#8217;dd/LL/yyyy&#8217;) }}.html</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!enUJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!enUJ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png 424w, /__u/substackcdn.com/image/fetch/$s_!enUJ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png 848w, /__u/substackcdn.com/image/fetch/$s_!enUJ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png 1272w, /__u/substackcdn.com/image/fetch/$s_!enUJ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!enUJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png" width="642" height="222" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:222,&quot;width&quot;:642,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!enUJ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png 424w, /__u/substackcdn.com/image/fetch/$s_!enUJ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png 848w, /__u/substackcdn.com/image/fetch/$s_!enUJ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png 1272w, /__u/substackcdn.com/image/fetch/$s_!enUJ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0484914-5eef-49c9-ac95-fad1064cf1b5_642x222.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Get your Kindle e-mail address</strong></p><p>We will be sending the HTML file to your Kindle e-mail address.</p><p>To find your Kindle email address, go to <a href="https://www.amazon.com/hz/mycd/digital-console/contentlist/pdocs/dateDsc">Manage Your Content &amp; Devices</a> &gt; Preferences &gt; Personal Document Settings<strong>.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HRsC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HRsC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png 424w, /__u/substackcdn.com/image/fetch/$s_!HRsC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png 848w, /__u/substackcdn.com/image/fetch/$s_!HRsC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HRsC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HRsC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png" width="1456" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!HRsC!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png 424w, /__u/substackcdn.com/image/fetch/$s_!HRsC!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png 848w, /__u/substackcdn.com/image/fetch/$s_!HRsC!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HRsC!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa1a12e-6182-4e3d-8f21-0fe2e3aa54a8_1715x510.png 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 aria-hidden="true" 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><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><strong>Add a GMail, &#8220;Send a Message&#8221; node</strong></p><p>The most important part of the &#8220;Send a Message&#8221; node is adding the file as an attachment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!27qr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!27qr!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png 424w, /__u/substackcdn.com/image/fetch/$s_!27qr!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png 848w, /__u/substackcdn.com/image/fetch/$s_!27qr!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png 1272w, /__u/substackcdn.com/image/fetch/$s_!27qr!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!27qr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png" width="793" height="802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:802,&quot;width&quot;:793,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!27qr!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png 424w, /__u/substackcdn.com/image/fetch/$s_!27qr!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png 848w, /__u/substackcdn.com/image/fetch/$s_!27qr!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png 1272w, /__u/substackcdn.com/image/fetch/$s_!27qr!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18475da0-530f-41ff-aa0d-ed50a5073ecd_793x802.png 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 aria-hidden="true" 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><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>In the Message field, you can add a date to make it more distinct</p><p>AI Highlights {{ $now.format(&#8217;dd/LL/yyyy&#8217;) }}</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!GFOc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!GFOc!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png 424w, /__u/substackcdn.com/image/fetch/$s_!GFOc!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png 848w, /__u/substackcdn.com/image/fetch/$s_!GFOc!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png 1272w, /__u/substackcdn.com/image/fetch/$s_!GFOc!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!GFOc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png" width="742" height="197" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:197,&quot;width&quot;:742,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!GFOc!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png 424w, /__u/substackcdn.com/image/fetch/$s_!GFOc!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png 848w, /__u/substackcdn.com/image/fetch/$s_!GFOc!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png 1272w, /__u/substackcdn.com/image/fetch/$s_!GFOc!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3dd2417-0da8-40d1-848a-ca5913b8d6ae_742x197.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And that&#8217;s it!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4_pe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 424w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 848w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4_pe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png" width="1456" height="345" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:345,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/178303151?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 424w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 848w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4_pe!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9faa16-fefa-42f3-99a1-5322cda96736_1468x348.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><h2><strong>Bonus Ideas</strong></h2><ul><li><p>Switch in a &#8220;Schedule Trigger&#8221; Node so you can have it run daily or weekly based on your schedule</p></li><li><p>Instead of using a LLM, look into a Readability API or Library to handle more text. LLMs have limited tokens.</p></li><li><p>Schedule different themes (e.g., &#8220;AI Research Friday&#8221;, &#8220;Product Strategy Sunday&#8221;).</p></li></ul><h2><strong>Give it a try!</strong></h2><p>I enjoy reading and doing deep dives. I hope this workflow gives you a chance to do the same. If you build your own workflow, let me know what sources you added or how you customized it.</p><p>P.S. I coach PMs and teams on product strategy and career growth, you can find me on <a href="https://www.linkedin.com/in/bonnieyu1/">LinkedIn</a> or e-mail me at <a href="mailto:bonnieyu.coaching@gmail.com">bonnieyu.coaching@gmail.com</a><br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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>]]></content:encoded></item><item><title><![CDATA[Writing Evals for a Creative Agent]]></title><description><![CDATA[What I learned evaluating a children's storytelling chatbot]]></description><link>https://bonnieyu.substack.com/p/writing-evals-for-a-creative-agent</link><guid isPermaLink="false">https://bonnieyu.substack.com/p/writing-evals-for-a-creative-agent</guid><dc:creator><![CDATA[Bonnie Yu]]></dc:creator><pubDate>Tue, 07 Oct 2025 20:31:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!B8Qc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There&#8217;s a ton of great posts out there on AI Evals such as Hamel Husain &amp; Shreya Shankar&#8217;s piece on <a href="https://www.lennysnewsletter.com/p/building-eval-systems-that-improve">Lenny&#8217;s Newsletter</a>, Peter Yang&#8217;s <a href="https://creatoreconomy.so/p/curious-beginners-guide-to-ai-evaluations">practical eval guide</a>, and Mahesh Yadav&#8217;s <a href="https://maven.com/p/60f318/evaluate-ai-agents-with-confidence">community session</a>. But, most examples focus on a customer service agent of some sort, which makes sense, it&#8217;s a common business use case. Most of the eval questions tend to be fairly straightforward: &#8220;Did the AI agent make up product details?&#8221;</p><p>What if you are evaluating a creative agent?</p><p>I recently wrote evals for a creative writing chatbot that co-writes stories with kids (grades 1-3) and gives them feedback on their writing. I want to share how I approached it, and what I learned about writing evals for creative agents.</p><p><strong>Why Creative Evals Feel Harder</strong></p><p>The first trap people fall into is thinking evals are like math, there&#8217;s some black and white metric you measure. That works when you&#8217;re checking if a chatbot gets a factual question right. But with creative agents, the &#8220;right&#8221; answer is subjective.</p><ul><li><p>Is the story engaging for a child?</p></li><li><p>Did the vocabulary fit naturally in the story?</p></li></ul><p>A lot of the correct answer comes down to <strong>taste</strong>, whether that&#8217;s a subject matter expert&#8217;s or yours. I had to get comfortable with dealing with more of that subjectivity and find a systematic way to make judgement calls.</p><p>What helped me is realizing that evals aren&#8217;t just about accuracy, they&#8217;re about closing the gap between what the AI does and what you want it to do for your customers.</p><p><strong>Quick context about the app</strong></p><p>Before diving in, here&#8217;s how the chatbot works:</p><ul><li><p>The chatbot and the child alternate writing parts of the story.</p></li><li><p>The chatbot must include a challenging vocabulary word in its turn.</p></li><li><p>After the child writes their part of the story, the chatbot gives writing feedback.</p></li><li><p>The chatbot then continues the story based on the child&#8217;s writing.</p></li><li><p>The chatbot and child alternate turns until the story ends.</p></li></ul><p>This means the chatbot has two major jobs</p><ul><li><p>Story writing</p></li><li><p>Writing Feedback</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!B8Qc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!B8Qc!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png 424w, /__u/substackcdn.com/image/fetch/$s_!B8Qc!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png 848w, /__u/substackcdn.com/image/fetch/$s_!B8Qc!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png 1272w, /__u/substackcdn.com/image/fetch/$s_!B8Qc!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!B8Qc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png" width="1147" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:1147,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!B8Qc!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png 424w, /__u/substackcdn.com/image/fetch/$s_!B8Qc!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png 848w, /__u/substackcdn.com/image/fetch/$s_!B8Qc!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png 1272w, /__u/substackcdn.com/image/fetch/$s_!B8Qc!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6585e340-887e-4b8e-a2ca-9cda288fc283_1147x622.png 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KDzQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KDzQ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png 424w, /__u/substackcdn.com/image/fetch/$s_!KDzQ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png 848w, /__u/substackcdn.com/image/fetch/$s_!KDzQ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KDzQ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KDzQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png" width="913" height="407" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:407,&quot;width&quot;:913,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!KDzQ!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png 424w, /__u/substackcdn.com/image/fetch/$s_!KDzQ!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png 848w, /__u/substackcdn.com/image/fetch/$s_!KDzQ!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KDzQ!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68919e9-fd2a-4f0a-bbc9-339426c5f0f3_913x407.png 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 aria-hidden="true" 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><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><strong>Step 1. Use Error Analysis to build your intuition</strong></p><p>Error Analysis, this is a fancy term for something simple: look at your AI responses, write some notes, and categorize the issues.</p><p>It&#8217;s a really useful step in evals for any type of AI agent, but especially helpful for creative agents when you&#8217;re not sure what to eval. It builds your intuition of what you want to monitor and improve on in your app.</p><p>Here&#8217;s examples errors I found:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Kkux!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Kkux!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png 424w, /__u/substackcdn.com/image/fetch/$s_!Kkux!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png 848w, /__u/substackcdn.com/image/fetch/$s_!Kkux!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Kkux!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Kkux!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png" width="1456" height="265" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:265,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56180,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/175562491?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Kkux!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png 424w, /__u/substackcdn.com/image/fetch/$s_!Kkux!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png 848w, /__u/substackcdn.com/image/fetch/$s_!Kkux!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Kkux!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3ec020-cf0c-41ef-85b5-c34aceb5a85d_1743x317.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>If you&#8217;re working with a large dataset, you can use an LLM to automatically categorize errors. But at this early stage, I can easily spot recurring issues like:</p><ul><li><p>Sentence structure too complex for 1st graders</p></li><li><p>Vocabulary too advanced or used unnaturally</p></li></ul><p>After reviewing examples like these, I updated my prompts to simplify sentence structures and make vocabulary use feel more natural. It was also fun to see what kids write in their stories, and how the AI agents responded.</p><p><strong>Step 2. Figuring out what to eval</strong></p><p>Using insights from my error analysis, I came up with separate eval questions for the story writing and writing feedback tasks. It was clear that these were two different jobs to be done and required very different evaluation criteria.</p><p>Here are some example questions:</p><p>Story writing</p><ul><li><p>Writing Quality</p><ul><li><p>Does the story build naturally and remain engaging for a 1st-3rd grader?</p></li><li><p>Is the vocabulary used naturally in the sentence?</p></li></ul></li><li><p>Child Alignment</p><ul><li><p>Does the story avoid adding events or details that directly contradict the child&#8217;s input?</p></li></ul></li><li><p>Child Safety</p><ul><li><p>Does the chatbot avoid writing anything that is inappropriate for children (e.g. violent, graphic, sexual in nature)?</p></li></ul></li></ul><p>Writing Feedback</p><ul><li><p>Writing Accuracy</p><ul><li><p>Did the AI highlight specific spelling or grammar errors?</p></li><li><p>Did the AI highlight specific sentence flow issues?</p></li></ul></li><li><p>Teaching Quality</p><ul><li><p>Are the corrections accurate according to standard English usage?</p></li><li><p>Did the AI provide a good model sentence for the student in the feedback?</p></li></ul></li><li><p>Instructor Tone</p><ul><li><p>Are the corrections written in a clear and child-friendly language?</p></li><li><p>Is the feedback written in an encouraging but also constructive way?</p></li></ul></li></ul><p><strong>My 2 cents:</strong> It&#8217;s ok if your first eval isn&#8217;t &#8220;perfect&#8221;, and iterate on the questions as you go. As you start labeling the evals and getting customer feedback, you&#8217;ll realize what matters most for your app.</p><p><strong>Step 3. Labeling the response between Bad, Average, Good</strong></p><p>Some guides recommend labeling at the category level (Writing Quality, Child Alignment, etc), but I labeled each of the outputs at the question level. It takes a lot more time - you&#8217;re labeling 10 questions on 100s of inputs compared to 3 categories on those same inputs, but I found labeling each of the questions incredibly helpful for understanding precisely where the AI agent needs improvement.</p><p>I labeled each of the responses between Bad, Average, Good. In Husain &amp; Shreya&#8217;s piece, they pushed for a Yes/No approach, that is, the output is either good enough to ship or not good enough. In this case, especially around the more subjective questions, I personally found it useful to label across a gradient. Within the context of a larger story, I think you are naturally going to have some &#8220;average&#8221; and &#8220;good&#8221; sentences, and I&#8217;m ok with that. What I want to see is a healthy dose of &#8220;good&#8221; sentences.</p><p>Here&#8217;s how I might label &#8220;bad&#8221; vs &#8220;average&#8221; vs &#8220;good&#8221; for the eval question: Does the story build naturally and remain engaging for a 1st-3rd grader?</p><p>This is a simple rubric I wrote</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sReM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sReM!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png 424w, /__u/substackcdn.com/image/fetch/$s_!sReM!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png 848w, /__u/substackcdn.com/image/fetch/$s_!sReM!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sReM!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sReM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png" width="803" height="280" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:803,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58671,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bonnieyu.substack.com/i/175562491?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!sReM!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png 424w, /__u/substackcdn.com/image/fetch/$s_!sReM!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png 848w, /__u/substackcdn.com/image/fetch/$s_!sReM!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sReM!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0ea22ef-ea43-4682-9775-40f6630b56b2_803x280.png 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 aria-hidden="true" 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><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><strong>Example Labeling</strong></p><p>Child Input Context: there was a trap</p><p><strong>Bad:</strong> &#8220;As Arygfd opened the mysterious door, she quickly stepped inside. She noticed a trap on the floor! Arygfd felt her heart race, but she was determined to find the treasure hidden in this room.&#8221;</p><ul><li><p>Why this is bad?</p><ul><li><p>Jumps from &#8220;trap&#8221; to &#8220;treasure with no setup. The treasure feels out of place.</p></li><li><p>While we want simpler sentences for 1st-3rd graders, this is pretty bare. There&#8217;s no description of the trap, or room to build atmosphere.</p></li><li><p>Missed opportunity to let the child describe solving the trap</p></li></ul></li></ul><p><strong>Average:</strong> &#8220;As Arygfd opened the mysterious door, a sudden rush of air blew past her. She quickly stepped inside and discovered a dark room filled with strange objects. Suddenly, she noticed a trap on the floor! It was a hidden pit that could make anyone fall! Arygfd felt her heart race, but she was determined to find the treasure hidden in this room.&#8221;</p><ul><li><p>Why this is average?</p><ul><li><p>Adds atmosphere: the &#8220;rush of air&#8221; and &#8220;dark room filled with strange objects&#8221; creates a smoother lead-in before the trap appears</p></li><li><p>There&#8217;s more description on what the trap actually is so the child can potentially solve the trap problem, but still jumps to the treasure too soon.</p></li></ul></li></ul><p><strong>Good:</strong> &#8220;As Arygfd opened the mysterious door, a sudden rush of air blew past her. She quickly stepped inside and discovered a dark room filled with strange objects. Suddenly, she noticed a trap on the floor! It was a hidden pit that could make anyone fall. Arygfd&#8217;s curiosity grew stronger as she wondered what secrets this room might be hiding.&#8221;</p><ul><li><p>Why this is good?</p><ul><li><p>All the positives from the &#8220;average&#8221; but also adds a hook at the end to invite the child to write the next part of the story</p></li></ul></li></ul><p>Don&#8217;t worry too much about having the perfect rubric from the start. According to this <a href="https://arxiv.org/pdf/2404.12272">paper</a>, it&#8217;s common for the rubric to change after you do the first few evaluations.</p><p>Sample of my labeled responses</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!gPso!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!gPso!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png 424w, /__u/substackcdn.com/image/fetch/$s_!gPso!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png 848w, /__u/substackcdn.com/image/fetch/$s_!gPso!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gPso!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_webp, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!gPso!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png" width="1456" height="430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:430,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="/__u/substackcdn.com/image/fetch/$s_!gPso!, /__u/bonnieyu.substack.com/w_424, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png 424w, /__u/substackcdn.com/image/fetch/$s_!gPso!, /__u/bonnieyu.substack.com/w_848, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png 848w, /__u/substackcdn.com/image/fetch/$s_!gPso!, /__u/bonnieyu.substack.com/w_1272, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gPso!, /__u/bonnieyu.substack.com/w_1456, /__u/bonnieyu.substack.com/c_limit, /__u/bonnieyu.substack.com/f_auto, /__u/bonnieyu.substack.com/q_auto:good, /__u/bonnieyu.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4b70f9-26b1-44ac-a248-2b6b6fa9d004_1600x472.png 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 aria-hidden="true" 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><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><strong>Step 4. Using Evals to Improve my Agent</strong></p><p>Once I finished labeling, I calculated the % Good, % Average, % Bad for each of the questions. This gave me a clear picture of where the agent was struggling.</p><p>For example, on the question &#8220;Does the LLM give directional guidance for writing the next story part?,&#8221; the results looked like: 33% Good, 50% Average, 17% Bad. Now I can go back to my prompt and add specific instructions about how to help the child write the next part of the story. From there, it&#8217;s an iterative process of seeing if my evals improved, and running the cycle over and over again.</p><p>I manually labeled around 100 responses for this project. It was time-consuming but incredibly valuable for understanding my agent&#8217;s behavior. But what if you need to scale beyond that? I haven&#8217;t scaled to thousands of responses yet so I can&#8217;t share battle-tested advice here. The resources I mentioned go deeper into programmatic evals and LLM as a judge approach. I can certainly see how a LLM as a judge could help certain criteria like labeling for grammar and spelling accuracy or safety violations, but for the more subjective criteria &#8220;Is the story engaging for a child,&#8221; I suspect I would still want to manually sample and label the responses.</p><p><strong>Bottom Line</strong></p><p>Evals are just a data tool to help you systematically review your AI responses to get it where you need it to be. </p><p>What you do need is clarity on: </p><p><em>What do I want this agent to do for my users?</em> </p><p>Then design your evals to measure progress against that goal.</p><p>But here&#8217;s one piece that&#8217;s missing from most AI eval discussions: <strong>customer feedback.</strong></p><p>Evals are useful but because labeling is done by a product manager, subject-matter expert, or &#8220;taste-maker,&#8221; this will introduce bias. Ultimately, we&#8217;re not building for ourselves; we&#8217;re building for our customers.</p><p>As product leaders, if we&#8217;re investing time in eval analysis, we also need to ensure <strong>customer feedback stays in the loop.</strong></p><p>If your eval scores go up, but kids aren&#8217;t actually enjoying writing more&#8212;or improving their writing at all&#8212;something&#8217;s off.</p><p>There are simple ways to tie evals back to user outcomes:</p><ul><li><p>Align eval metrics with customer metrics.</p></li><li><p>Add a &#8220;customer rating&#8221; or &#8220;user sentiment&#8221; column to your eval dataset or traces, and see whether it correlates with your labeled scores.</p></li><li><p>Review customer comments, usability studies, or behavioral data alongside your eval results.</p></li></ul><p>However you do it, the goal is the same: <strong>eval improvements should translate into better real-world experiences.</strong></p><p>Otherwise, your evals may look good on paper&#8212;but your customers won&#8217;t feel the difference.</p><p>I&#8217;d love to hear from anyone that is working with a creative agent. Let me know in the comments - How did you balance automation with human judgment? What worked? What didn&#8217;t?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bonnieyu.substack.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! 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>]]></content:encoded></item></channel></rss>