<?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[Action Potential]]></title><description><![CDATA[I like to think about tech & society, and occasionally write some of those thoughts out.]]></description><link>https://www.actionpotential.co</link><image><url>https://substackcdn.com/image/fetch/$s_!yAka!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f4ddd2-f4bb-4aa7-af1b-f1dd6315554c_1280x1280.png</url><title>Action Potential</title><link>https://www.actionpotential.co</link></image><generator>Substack</generator><lastBuildDate>Sun, 17 May 2026 04:19:36 GMT</lastBuildDate><atom:link href="https://www.actionpotential.co/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Rami Alhamad]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[actionpotential@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[actionpotential@substack.com]]></itunes:email><itunes:name><![CDATA[Rami]]></itunes:name></itunes:owner><itunes:author><![CDATA[Rami]]></itunes:author><googleplay:owner><![CDATA[actionpotential@substack.com]]></googleplay:owner><googleplay:email><![CDATA[actionpotential@substack.com]]></googleplay:email><googleplay:author><![CDATA[Rami]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Commit Graph Escapes Engineering]]></title><description><![CDATA[What happens when every function starts working in repo-shaped systems?]]></description><link>https://www.actionpotential.co/p/the-commit-graph-escapes-engineering</link><guid isPermaLink="false">https://www.actionpotential.co/p/the-commit-graph-escapes-engineering</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 11 May 2026 17:24:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!unzv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!unzv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!unzv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg 424w, https://substackcdn.com/image/fetch/$s_!unzv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg 848w, https://substackcdn.com/image/fetch/$s_!unzv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!unzv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!unzv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg" width="1000" height="1020" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1020,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Composition No. 12 with Blue, Piet Mondrian, 1936-1942, oil on canvas&quot;,&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="Composition No. 12 with Blue, Piet Mondrian, 1936-1942, oil on canvas" title="Composition No. 12 with Blue, Piet Mondrian, 1936-1942, oil on canvas" srcset="https://substackcdn.com/image/fetch/$s_!unzv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg 424w, https://substackcdn.com/image/fetch/$s_!unzv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg 848w, https://substackcdn.com/image/fetch/$s_!unzv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!unzv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc3e3fd-3527-4d59-ab2e-ab3093d8a1e0_1000x1020.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Piet Mondrian Composition No. 12 with Blue at the National Gallery of Canada</figcaption></figure></div><p>I have a finance repo.</p><p>I have a marketing repo.</p><p>That would have sounded strange a few years ago. GitHub was where code lived. Engineering work went into repositories. Everything else lived in Google Docs, Notion, spreadsheets, Slack threads, decks, and the hazy memory of whoever happened to be closest to the work.</p><p>But that is not really how I am running Alma anymore.</p><p>Alma is a small company, so the operating system has to be lightweight. I do not want a giant process layer. I do not want every idea to become a meeting. I want the company to be able to think, ship, measure, and adjust quickly.</p><p>Increasingly, that means turning more work into artifacts that can be created, edited, reviewed, versioned, and reused by AI agents.</p><p>The marketing repo can hold campaign briefs, ad variants, landing page copy, experiment readouts, lifecycle emails, creative concepts, and positioning notes. The finance repo can hold investor updates, scenario models, pricing analysis, monthly metrics, fundraising narratives, and board materials. The product repo can hold specs, research summaries, rollout plans, and feature decisions.</p><p>Some of this still ends up in apps. A spreadsheet may become an <code>.xlsx</code>. A landing page may become React. A campaign may go live in Meta. But the working layer is increasingly file-shaped.</p><p>And once work becomes file-shaped, it starts to behave more like software.</p><p>It has history. It has authorship. It has diffs. It has branches. It can be reviewed. It can be reverted. It can be connected to what shipped.</p><p>That is the part I cannot stop thinking about.</p><div><hr></div><h2>GitHub as a Productivity Proxy</h2><p>The GitHub contribution graph is imperfect, but it reveals something real.</p><p>If someone is deep in the weeds of building, the graph usually shows it. Not because every commit is valuable. Not because more green squares automatically means better work. But because sustained contact with the system leaves traces.</p><p>Commits show cadence. Pull requests show collaboration. Diffs show what changed. Issues show what got noticed. Deploys show what made it into the world.</p><p>In an AI coding world, this becomes even more important. If a builder is using Claude Code, Codex, Cursor, or whatever comes next, the output still has to land somewhere. The agent can write code, but the repo records what changed.</p><p>The contribution graph becomes a rough proxy for something deeper:</p><p><strong>Are you repeatedly changing reality?</strong></p><p>That question is not just for engineers.</p><div><hr></div><h2>The Marketing Commit</h2><p>Imagine a marketer working in the same kind of loop.</p><p>Not &#8220;I made some posts.&#8221;</p><p>More like:</p><ul><li><p>drafted 20 ad hooks for a protein campaign</p></li><li><p>launched 4 landing page variants</p></li><li><p>rewrote the onboarding email sequence</p></li><li><p>created a new creator outreach list</p></li><li><p>shipped a testimonial campaign</p></li><li><p>wrote the readout on what converted</p></li><li><p>killed the losing angles</p></li><li><p>doubled down on the winning one</p></li></ul><p>Each of those can be an artifact. Each artifact can live in a repo. Each change can have a commit.</p><p>The point is not that GitHub is magically the right interface for marketers. Maybe the better version is Notion with real diffs. Maybe it is Linear. Maybe it is a new tool that looks more like an operating system for AI-assisted work.</p><p>The important idea is repo-like work:</p><ol><li><p>The work is durable.</p></li><li><p>The work has history.</p></li><li><p>Changes have authors.</p></li><li><p>The reasoning is inspectable.</p></li><li><p>Artifacts connect to outcomes.</p></li></ol><p>That last part matters most. AI will make artifact creation cheap. The scarce thing will be closed loops.</p><p>The future marketing graph should not measure how much content someone generated. That will be too easy. It should measure how often they moved an idea through the full cycle:</p><p><strong>hypothesis -&gt; artifact -&gt; launch -&gt; measurement -&gt; learning -&gt; iteration</strong></p><p>That is the marketing equivalent of a commit that matters.</p><div><hr></div><h2>The Finance Commit</h2><p>Finance has the same pattern.</p><p>A finance repo sounds odd until you realize how much finance work is versioned reasoning.</p><p>What changed in the forecast? Why did the runway assumption move? Which pricing scenario did we believe last month? What did we tell investors in March? How did the board narrative evolve? Which model drove the hiring decision?</p><p>In most companies, the answer is scattered across spreadsheet copies and Slack messages.</p><p>In a repo-shaped system, the finance work has a trail:</p><ul><li><p><code>models/may-runway-scenario.xlsx</code></p></li><li><p><code>pricing/annual-plan-sensitivity.md</code></p></li><li><p><code>investor-updates/2026-05.md</code></p></li><li><p><code>board/series-a-narrative.md</code></p></li><li><p><code>metrics/revenuecat-april-summary.md</code></p></li></ul><p>The value is not that everything becomes public. The value is that the company can see how its own thinking changed.</p><p>That becomes especially important when AI is helping generate the first draft of the model, summarize metrics, write the investor update, or compare scenarios. The agent accelerates the work. The repo preserves the judgment.</p><div><hr></div><h2>The Consequences</h2><p>If this pattern spreads, it changes how we understand productivity.</p><p>The old proxy for knowledge work was presence. Meetings attended. Slack responsiveness. Docs created. Decks delivered. A lot of it was hard to inspect from the outside.</p><p>The new proxy might be artifact movement.</p><p>What did you create? What changed because of it? Did it ship? Did it teach us something? Did it compound? Can someone else build on it next week?</p><p>That is a better question than &#8220;were you busy?&#8221;</p><p>It also has risks.</p><p>A contribution graph can become theater. People can optimize for visible activity instead of meaningful progress. Managers can confuse commits with impact. Teams can accidentally create surveillance systems and call them operating systems.</p><p>So the point is not to count green squares.</p><p>The point is that AI-assisted work needs a memory layer. As output volume goes up, the need for traceability goes up too. You need to know what was generated, what was selected, what was shipped, what worked, and what was abandoned.</p><p>The repo becomes less like a folder and more like a record of decisions.</p><div><hr></div><h2>A Possible Future</h2><p>Maybe every serious function ends up with a repo, even if it is not literally GitHub.</p><p>Engineering already has one.</p><p>Marketing gets one.</p><p>Finance gets one.</p><p>Product gets one.</p><p>Recruiting gets one.</p><p>Design gets one.</p><p>Not because everyone needs to become an engineer, but because AI makes more work legible as versioned artifacts.</p><p>The interesting future is not that every employee has a GitHub streak. That would be a shallow version of the idea.</p><p>The interesting future is that companies get a clearer view of how work actually moves:</p><p><strong>drafted -&gt; reviewed -&gt; shipped -&gt; measured -&gt; iterated -&gt; archived</strong></p><p>That graph may matter more than the org chart.</p><p>Because in an AI-assisted company, the question is not who can produce the most stuff. Everyone will be able to produce more stuff.</p><p>The question is who can turn judgment into shipped artifacts, and shipped artifacts into learning.</p><p>GitHub gave engineering a way to see that motion.</p><p>Now the commit graph may be escaping engineering.</p>]]></content:encoded></item><item><title><![CDATA[The Canada Strong Fund Should Be a Startup Fund of Funds]]></title><description><![CDATA[If Canada wants a sovereign wealth fund, the Maple Eight should help make it the anchor investor for a real Canadian startup ecosystem]]></description><link>https://www.actionpotential.co/p/the-canada-strong-fund-should-be</link><guid isPermaLink="false">https://www.actionpotential.co/p/the-canada-strong-fund-should-be</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Sun, 03 May 2026 15:01:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rlup!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rlup!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rlup!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Rlup!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Rlup!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Rlup!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rlup!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3214762,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/196312519?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rlup!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Rlup!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Rlup!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Rlup!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aca1942-08f6-4218-9cbd-1aa13209cd36_1536x1024.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Canada Strong Fund for Startups in the style of Arthur Lismer</figcaption></figure></div><p>Canada has created its first national sovereign wealth fund.</p><p>That sentence would have sounded strange a few years ago. It sounds necessary now.</p><p>The Canada Strong Fund is starting with a $25 billion federal commitment over three years. It will be an arm&#8217;s-length Crown corporation, focused on commercial returns, investing in strategic Canadian projects and companies alongside private capital. The interesting part is that it is not just a government balance sheet vehicle. Ottawa also wants a retail product so ordinary Canadians can invest in it, share in the upside, and have their initial invested capital protected.</p><p>That hybrid structure matters. It means the fund can become more than a government program. It can become a coordination layer for Canadian capital.</p><p><strong>The first test is obvious: will the big Canadian pension funds participate?</strong></p><p>Ontario Teachers&#8217;. OMERS. CPP Investments. PSP. La Caisse. BCI. HOOPP. AIMCo. The Maple Eight have become some of the best institutional investors in the world. They manage trillions of dollars. They buy toll roads, airports, utilities, data centres, private companies, credit portfolios and public equities all over the world. They are exactly the kind of long-duration capital Canada says it needs.</p><p><strong>So they should be in the Canada Strong Fund.</strong></p><p>Not as a patriotic donation. Not as political theatre. Not because anyone should raid pension assets to solve an Ottawa messaging problem.</p><p>They should participate because the Canada Strong Fund can be designed as an investable, professionally governed, commercially disciplined platform for opportunities that are currently too fragmented for them to underwrite at scale.</p><p><strong>And the most important mandate for that platform should be startups.</strong></p><div><hr></div><h2>The Data Is Uncomfortable</h2><p>Canada is not short of capital. <strong>We are short of organized risk capital</strong> pointed at Canadian company formation.</p><p>CPP Investments reported $780.7 billion in assets at the end of 2025. Its own geographic disclosure showed $366.9 billion in the United States, or 47 percent of assets, and $98.3 billion in Canada, or 12 percent. OMERS reported that 55 percent of its assets were in the U.S. and 18 percent in Canada at December 31, 2025. PSP Investments reported 40.5 percent U.S. exposure and 20 percent Canada exposure at March 31, 2025. Ontario Teachers&#8217; is more balanced, with 38 percent of gross investments in the U.S. and 31 percent in Canada.</p><p>These figures are not pure S&amp;P 500 or U.S. index allocations. They are geographic exposure across public markets, private equity, credit, infrastructure, real estate and other assets. But they are still the right starting point for the national question: where is Canadian retirement capital actually compounding?</p><p>This does not mean the funds are doing something irrational. The U.S. is the deepest capital market in the world. A CPP spokesperson told CBC that major global equity benchmarks are roughly 65 percent U.S. by weight, so a 47 percent U.S. exposure is not some wild overweight.</p><p>But the national outcome is still strange.</p><p>Canadian workers, teachers, nurses, municipal employees and public servants are saving enormous pools of capital. Those pools are compounding, quite rationally, in the places with the most investable assets. Too often, that means the U.S. public market, U.S. private equity, U.S. venture-backed technology, U.S. infrastructure, U.S. credit.</p><p>Meanwhile, Canadian venture capital is tiny by comparison.</p><p>CVCA reported that Canada saw $8.0 billion invested across 571 venture deals in 2025, down from 2024. The same year, NVCA reported that U.S. venture capital reached 15,352 deals worth $320 billion. The ratio is not close. The U.S. deployed about forty times as much venture capital as Canada.</p><p>This is the real problem.</p><p>Canada has pension-scale pools of capital and founder-scale ambition, but not enough institutional plumbing between the two.</p><div><hr></div><h2>The Answer Is Not &#8220;Force Pensions to Buy Canada&#8221;</h2><p>This argument can get stupid quickly.</p><p>Pension funds have a fiduciary duty. They are not industrial policy slush funds. Ontario teachers do not contribute to a pension so that a minister can pick startups. Municipal workers do not need their retirement security tied to whatever sector is fashionable in Ottawa this year.</p><p>The case for pension participation has to pass the same test any investment should pass: governance, returns, liquidity, risk, manager quality, benchmark discipline, and enough scale to justify the work.</p><p>That is exactly why the Canada Strong Fund matters.</p><p>The missing piece in Canada is not patriotism. It is product.</p><p>If you are a $300 billion pension fund, you cannot solve Canadian seed funding by writing $2 million cheques into promising pre-seed rounds. You need vehicles. You need professional managers. You need diversification. You need reporting. You need co-investment rights. You need governance. You need enough deal flow to absorb real capital without distorting the market.</p><p>Canada should build that vehicle inside the Canada Strong Fund.</p><p>Call it the <strong>Canada Strong Startup Platform</strong>.</p><p>Its job would be simple: become the anchor LP for the Canadian innovation economy.</p><div><hr></div><h2>What the Platform Should Do</h2><p>The platform should not try to pick every startup directly. That would be a mistake.</p><p>It should operate primarily as a fund of funds, with a co-investment sleeve.</p><p>The rough structure:</p><ul><li><p>70 percent into Canadian venture funds, from pre-seed to growth.</p></li><li><p>20 percent into direct co-investments alongside those managers, especially for Canadian companies that need $50 million to $300 million rounds without immediately moving south.</p></li><li><p>10 percent reserved for secondaries, follow-ons, and liquidity support so the ecosystem can recycle capital.</p></li></ul><p><strong>It should back many managers, not five famous ones.</strong></p><p>Canada needs more funds, not just bigger funds. It needs specialist AI funds, health funds, climate funds, fintech funds, robotics funds, bio-manufacturing funds, defence technology funds, energy technology funds, developer tool funds, and boring software funds. It needs first-time and second-time managers with real edge. It needs funds in Toronto, Montreal, Vancouver, Waterloo, Calgary, Edmonton, Ottawa, Halifax and Quebec City.</p><p>The platform should write anchor commitments that make funds possible.</p><p>A $50 million commitment into a $150 million fund changes the trajectory of an emerging manager. A $150 million commitment into a $500 million growth fund changes whether Canadian scale-ups can raise locally. A standing co-investment program changes whether our best companies have to become Delaware companies with U.S. lead investors by default.</p><p>This is where pensions can participate without pretending to be seed investors.</p><p>They can commit to the Canada Strong Startup Platform on commercial terms. The federal government can seed it. The pension funds can scale it. Retail Canadians can participate through the broader Canada Strong product. The platform can recycle returns into the next generation of funds.</p><p>That is how you turn a sovereign wealth fund from a press conference into an ecosystem machine.</p><div><hr></div><h2>The Math Is Not Crazy</h2><p>The Canada Strong Fund starts at $25 billion.</p><p>That is big for Ottawa. It is small compared with Canadian pension capital.</p><p>CPP alone is roughly $780 billion. Ontario Teachers&#8217; is $279 billion. PSP is almost $300 billion. OMERS is $145 billion. La Caisse reported $517 billion in net assets for 2025. BCI manages nearly $295 billion in gross assets.</p><p>One percent of these pools is enormous.</p><p>One percent of CPP is about $7.8 billion. One percent of Ontario Teachers&#8217; is about $2.8 billion. One percent of PSP is about $3.0 billion. One percent of OMERS is about $1.5 billion. One percent of La Caisse is about $5.2 billion.</p><p><strong>Nobody has to bet the pension system on Canadian startups.</strong></p><p>A 0.5 percent to 1.0 percent allocation from a few major funds, phased over five to ten years, would create one of the most important venture capital engines in Canadian history. It would still be small enough to sit inside a diversified institutional portfolio. It would be large enough to change founder behaviour.</p><p>Founders respond to capital availability.</p><p>If the only serious Series B and Series C capital is in San Francisco or New York, companies will orient themselves there. If the only deep AI infrastructure investors are American or Gulf-backed, the best Canadian AI companies will become Canadian in origin and foreign in ownership. If Canada wants headquarters, jobs, tax base, intellectual property, and decision-making authority to stay here, it needs domestic growth capital.</p><p>Not grants. Capital.</p><div><hr></div><h2>The Gulf Already Understands This</h2><p>The Gulf funds are not subtle about what they are doing.</p><p>Saudi Arabia&#8217;s Public Investment Fund has Jada, a fund-of-funds company created to develop the country&#8217;s private equity and venture ecosystem<strong>. The Saudi Press Agency recently reported that Jada had allocated SAR 3.5 billion across 46 venture capital and private equity funds, while Sanabil had committed roughly SAR 1.5 billion to support 165 emerging companies.</strong> That is ecosystem construction, not passive portfolio allocation.</p><p>Abu Dhabi has been just as deliberate.</p><p><strong>Mubadala helped back Hub71, Abu Dhabi&#8217;s global tech ecosystem. Hub71&#8217;s 2024 impact reporting said startups in the ecosystem had raised $2.17 billion and generated $1.2 billion in revenue</strong>. Mubadala also built venture exposure through Mubadala Capital and partnered with global managers. More recently, Abu Dhabi&#8217;s MGX has become a major AI and infrastructure vehicle, partnering with Microsoft, BlackRock and GIP on AI infrastructure.</p><p>The lesson is not that Canada should copy Gulf political economy. We should not.</p><p>The lesson is that sovereign capital can be used to create a market.</p><p>The Gulf funds understand that startup ecosystems are not just office space and accelerators. They are capital stacks. They are anchor LPs. They are procurement relationships. They are immigration policy. They are compute, power, customers, regulators, universities, and later-stage financing. They are the whole machine.</p><p>Canada has pieces of this machine. We have strong universities. We have AI labs. We have technical talent. We have public pension sophistication. We have stable institutions. We have energy. We have immigration. We have founders.</p><p>But we do not yet have the capital stack at national scale.</p><p>The Canada Strong Fund can become that stack.</p><div><hr></div><h2>The Mandate Should Be Narrow</h2><p>If everything is strategic, nothing is strategic.</p><p>The Canada Strong Fund will be tempted to become a basket of airports, mines, ports, transmission lines, manufacturing projects, defence suppliers, telecom infrastructure, and politically important regional deals. Some of that belongs in the fund. Canada does need nation-building infrastructure.</p><p><strong>But startups deserve a dedicated mandate because startups are how new strategic sectors are born.</strong></p><p>A mine is important. A port is important. A transmission line is important.</p><p><strong>But the companies that turn minerals into materials, biology into medicine, compute into software, robotics into productivity, and AI research into global products are also infrastructure. They are the productive infrastructure of the next economy.</strong></p><p>The fund should define a clear innovation allocation and publish it.</p><p>For example:</p><ul><li><p>At least 20 percent of Canada Strong Fund capital committed to the Canada Strong Startup Platform over the first decade.</p></li><li><p>At least half of that deployed through independent Canadian venture managers.</p></li><li><p>No political deal selection.</p></li><li><p>Independent investment committee.</p></li><li><p>Commercial return targets.</p></li><li><p>Annual disclosure of commitments, managers, vintage diversification, fees, net returns, follow-on rates, Canadian headquarters retention, patents, exports, employment and tax base.</p></li><li><p>Co-investment rights for pension partners.</p></li><li><p>A strict rule that government cannot direct individual company investments.</p></li></ul><p>This is how you keep the fund from becoming a subsidy program.</p><p>The goal is not to make venture capital easier. The goal is to make Canadian venture capital investable at institutional scale.</p><div><hr></div><h2>What Ontario Teachers&#8217; Should Do</h2><p>Ontario Teachers&#8217; should be first.</p><p>It already has Teachers&#8217; Venture Growth. It already invests in global technology companies. In 2025, Teachers&#8217; reported venture growth returns of 30.2 percent, and highlighted investments in Anthropic, Grafana Labs, Gusto, Darwinbox, Kraken and Quantexa. It also led StackAdapt&#8217;s latest funding round in Canada.</p><p>That is the muscle Canada needs.</p><p>Ontario Teachers&#8217; should publicly commit to evaluating an anchor allocation to the Canada Strong Startup Platform, with a preference for fund commitments and co-investments that can pass its normal underwriting bar.</p><p>OMERS should follow. It serves Ontario municipal workers, school boards, transit systems, electrical utilities, emergency services and local agencies. It is already deeply connected to Ontario&#8217;s public economy. It has 55 percent of assets in the U.S. and 18 percent in Canada. It does not need to abandon global diversification to put more capital behind Canadian company formation.</p><p>CPP Investments should participate carefully. CPP has the strongest need to protect independence, because it is the national plan. But even CPP can allocate through a professionally governed, commercial platform without turning itself into a policy tool.</p><p>PSP should be natural. It already manages Canada Growth Fund independently. It understands the difference between government policy capital and pension capital. It can help design the governance firewall.</p><p>La Caisse should be a model. Quebec has long understood that institutional capital can support local economic development while still pursuing returns. Canada should learn from that without making the governance sloppy.</p><p>BCI, HOOPP and AIMCo should be at the table too.</p><p>This should not be a single cheque. It should be a standing market.</p><div><hr></div><h2>The Policy Ask</h2><p>Ottawa should do five things.</p><p>First, create a dedicated startup fund-of-funds sleeve inside the Canada Strong Fund.</p><p>Second, invite the Maple Eight to become anchor LPs on commercial terms, with co-investment rights and independent governance.</p><p>Third, use a comply-or-explain model for federally and provincially sponsored public funds: each major plan should annually disclose whether it evaluated Canada Strong Fund opportunities and why it did or did not invest. Do not force bad investments. Force serious consideration.</p><p>Fourth, make BDC complementary, not duplicative. BDC can keep doing direct support, debt, seed programs and fund commitments. The Canada Strong Startup Platform should be the national institutional allocator that brings pensions, sovereign capital and private LPs into the same architecture.</p><p>Fifth, measure the right outcomes. Not announcement dollars. Not jobs promised in press releases. Measure fund performance, follow-on capital, manager formation, company scale-up retention, Canadian headquarters, exports, productivity, tax base and realized returns.</p><p>The Canada Strong Fund should not be judged by whether it sounds patriotic.</p><p>It should be judged by whether, ten years from now, a Canadian founder can build an important company in Canada without immediately depending on foreign capital to survive.</p><div><hr></div><h2>Build the Capital Stack</h2><p>Canada&#8217;s startup problem is usually described as a talent problem, a culture problem, a market problem or an ambition problem.</p><p>Some of that is true.</p><p>But a lot of it is a capital stack problem.</p><p>The U.S. has a massive venture capital machine. The Gulf is using sovereign wealth to build one. Europe is trying to mobilize institutional capital for strategic sectors. Everyone has figured out that the next economy will be shaped by who finances the companies before they are obvious.</p><p>Canada finally has a sovereign wealth fund.</p><p>Now it needs to make the fund useful.</p><p>Put the pension funds in the room. Give them a professionally governed vehicle they can actually underwrite. Make startups a core mandate, not a footnote under &#8220;technology.&#8221; Back many Canadian venture funds. Reserve capital for growth rounds. Keep politics out of investment decisions. Publish the data. Compound the returns. Recycle the gains.</p><p>If Canada Strong is going to mean anything, it should mean that Canadian capital helps Canadian builders build Canadian companies at global scale.</p><p>That is the sovereign wealth fund we need.</p><div><hr></div><h2>Sources</h2><ul><li><p>Government of Canada, <a href="https://www.canada.ca/en/department-finance/news/2026/04/canada-strong-fund.html">Canada Strong Fund backgrounder</a>, April 27, 2026.</p></li><li><p>Government of Canada, <a href="https://budget.canada.ca/update-miseajour/2026/report-rapport/pdf/update-miseajour2026-eng.pdf">Spring Economic Update 2026</a>, Canada Strong Fund section.</p></li><li><p>CPP Investments, <a href="https://www.cppinvestments.com/en/our-performance/">The Fund</a>, assets and geographic allocation as of December 31, 2025.</p></li><li><p>CBC News via Yahoo, <a href="https://ca.news.yahoo.com/amid-buy-canadian-fervour-canadas-090000910.html">Amid &#8216;Buy Canadian&#8217; fervour, Canada&#8217;s top pension funds still heavily invested in U.S.</a>, February 2026.</p></li><li><p>Ontario Teachers&#8217; Pension Plan, <a href="https://www.otpp.com/en-ca/about-us/our-results/annual-reporting/">2025 Annual Report</a>.</p></li><li><p>Ontario Teachers&#8217; Pension Plan, <a href="https://www.otpp.com/en-ca/investments/our-advantage/our-performance-and-track-record/">Performance and track record</a>.</p></li><li><p>OMERS, <a href="https://assets.ctfassets.net/iifcbkds7nke/3iibVtGtfWXbVs4WzmfHvc/914ca0173fc1049f8bdfcf8b5c2a6ec9/OMERS_2025_AR_ua.pdf">2025 Annual Report</a>.</p></li><li><p>PSP Investments, <a href="https://www.investpsp.com/media/filer_public/03-our-performance/annual-report-2025/pdf/PSP-2025-annual-report-en-fin-statements-not-included.pdf">2025 Annual Report</a>.</p></li><li><p>La Caisse, <a href="https://www.lacaisse.com/en/news/pressreleases/caisse-posted-93-return-2025-net-assets-517-billion">2025 results press release</a>.</p></li><li><p>BCI, <a href="https://www.bci.ca/bci-achieves-10-annual-return-in-fiscal-2025/">BCI achieves 10% annual return in fiscal 2025</a>.</p></li><li><p>CVCA, <a href="https://www.cvca.ca/insights/market-reports/year-end-2025/">Year-End 2025 Canadian Venture Capital Market Overview</a>.</p></li><li><p>NVCA, <a href="https://nvca.org/press_releases/nvca-releases-2026-yearbook-charts-a-venture-industry-in-transition/">2026 Yearbook press release</a>.</p></li><li><p>Public Investment Fund, <a href="https://www.pif.gov.sa/en/our-investments/our-portfolio/jada/">Jada Fund of Funds</a>.</p></li><li><p>Saudi Press Agency, <a href="https://www.spa.gov.sa/en/N2562977">PIF Governor reviews strategy</a>, April 2026.</p></li><li><p>Hub71, <a href="https://www.zawya.com/en/press-release/companies-news/hub71-records-217bln-in-startup-funding-as-abu-dhabi-rises-among-global-tech-hubs-se6c9iz3">2024 impact reporting via Zawya</a>.</p></li><li><p>Hub71, <a href="https://www.hub71.com/latest-news/press-release/mubadala%2C-antler-and-hub71-launch-national-founders-programme-to-commercialize-university-research">Mubadala, Antler and Hub71 National Founders Programme</a>, September 2025.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Canada Needs a Sovereign Intelligence Fund]]></title><description><![CDATA[PM Carney built the factory financing. Now Canada needs to build the factories of intelligence.]]></description><link>https://www.actionpotential.co/p/canada-needs-a-sovereign-intelligence</link><guid isPermaLink="false">https://www.actionpotential.co/p/canada-needs-a-sovereign-intelligence</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Tue, 28 Apr 2026 03:56:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WFyt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WFyt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WFyt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WFyt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WFyt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WFyt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WFyt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:318151,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/195709339?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WFyt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WFyt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WFyt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WFyt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d89cbd3-3216-4ef0-81fa-0ab44e7a7f2e_1376x768.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Factory of Intelligence in the style of Lauren Harris</figcaption></figure></div><p>PM Carney announced the Canada Strong Fund this week. $25 billion to start, a Crown corporation structure, and an explicit invitation for Canadians to invest alongside the government.</p><p>I think it&#8217;s a great move. Long overdue. And I think the next move is even more important.</p><p>Jensen Huang has been making a point lately that I can&#8217;t stop thinking about. Chips and data centers are the factories of the future. Not metaphorically. Literally. They take in electricity and produce intelligence, sold by the token, consumed at the rate of billions per second.</p><p>Tokens are units of cognitive labor. As models get better, more of what used to be human work moves into the factory. Translation, writing, analysis, support, design, increasingly engineering. None of it disappears. It just shifts location.</p><p>Here is what worries me. Almost none of those factories are in Canada. The dominant ones are owned by a handful of US companies running on chips fabricated in Taiwan. When a Canadian business uses AI to do the work that used to require five employees, the productivity gain is real, but the rent flows to Nvidia, OpenAI, Microsoft, Google, Anthropic. Local wages compress. Foreign profits expand. Our trade balance on intelligence will start to look like an oil importer&#8217;s balance on oil.</p><p>A sovereign wealth fund is a good start. But the most important project of national interest right now is the factory itself. Canada should be building and operating token factories at national scale. Hydro-rich provinces, cold climate, stable rule of law, abundant land. The natural advantages are obvious. The financing structure has been the missing piece.</p><p>Call it a Sovereign Intelligence Fund. A Crown corporation with a single mandate: build and operate the compute infrastructure that produces tokens for Canadian use. Canadian companies live on top of that base layer, taking the raw output and curating it into products the world wants to buy. That is the part of the value chain we are good at. We will not get to play that game for long if we do not own the factory underneath.</p><p>The early pieces are in motion. The Cohere and CoreWeave facility in Cambridge is online. The federal AI compute strategy has $2 billion committed. The instinct is right. The scale is wrong. $2 billion is a rounding error compared to what a single US hyperscaler spends on data centers in a quarter.</p><p>The next move out of Ottawa should be ambitious. Tens of billions in scale, not single-digit billions. An explicit mandate to be the wholesale supplier of Canadian-controlled tokens to Canadian businesses. And a retail product that lets ordinary Canadians own a slice of it, just like the Canada Strong Fund.</p><p>We have the chance to collectively own the factories of the next economy. We should take it.</p>]]></content:encoded></item><item><title><![CDATA[The Referral System Hiding in App Store Connect]]></title><description><![CDATA[How to build a real affiliate program on top of Apple&#8217;s offer codes, without paying a third party a cent]]></description><link>https://www.actionpotential.co/p/the-referral-system-hiding-in-app</link><guid isPermaLink="false">https://www.actionpotential.co/p/the-referral-system-hiding-in-app</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 20 Apr 2026 12:03:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uA2G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uA2G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uA2G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uA2G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uA2G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uA2G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uA2G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg" width="1280" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;15 Contemporary Syrian Artists You Need to Follow&quot;,&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="15 Contemporary Syrian Artists You Need to Follow" title="15 Contemporary Syrian Artists You Need to Follow" srcset="https://substackcdn.com/image/fetch/$s_!uA2G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uA2G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uA2G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uA2G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad10b7c0-290d-4614-b743-2d4b209ee352_1280x853.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Artist: Khaled Barakeh</figcaption></figure></div><p>Most iOS app founders I talk to assume that building a referral system is a six-figure problem. They look at Branch, AppsFlyer, Tapfiliate, Rewardful. They quote out something like $500 to $5,000 a month. Then they decide referrals are a &#8220;later&#8221; problem and ship without one.</p><p>Here&#8217;s the thing nobody tells you: Apple already gives you the primitives. You can generate one-time promo codes through the App Store Connect API, hand them out programmatically, and detect when each one is redeemed. With RevenueCat (or your own receipt validation) on the back end, you have everything you need to credit a referrer the moment their friend converts.</p><p>I built this at Alma in about a week. This post is the missing manual.</p><h2>What Apple Actually Gives You</h2><p>Inside App Store Connect, every auto-renewable subscription can have a <strong>subscription offer</strong>, and every offer can have <strong>one-time use codes</strong>. Each code is a unique string that unlocks the offer for one person. You&#8217;ve probably seen them used in beta testing: &#8220;here&#8217;s a free month, paste this in Settings.&#8221;</p><p>What&#8217;s less well known is that the App Store Connect API will generate these in batches for you. You can request 25,000 codes in a single API call. They come back as a CSV-like response with a unique string per row, and Apple tracks redemption state on their side.</p><p>So the building blocks are:</p><ol><li><p><strong>Generate codes programmatically</strong> through the App Store Connect API</p></li><li><p><strong>Hand a code to a user</strong> via your own backend</p></li><li><p><strong>Detect redemption</strong> through a RevenueCat webhook (or App Store Server Notifications if you&#8217;re going direct)</p></li><li><p><strong>Map the redeemed code back to the referrer</strong> and reward them</p></li></ol><p>That&#8217;s it. No third-party SDK in your binary. No second analytics pipeline. The whole loop lives between Apple, your database, and your subscription provider.</p><h2>The Pool Pattern</h2><p>The trick that makes this work at scale is treating offer codes like a resource pool, not a per-user generation request.</p><p>Generating codes through the App Store Connect API is not instant. It&#8217;s a background job on Apple&#8217;s side, and the codes don&#8217;t appear immediately. If the first time a user taps &#8220;Share with a friend&#8221; is also the first time you call Apple&#8217;s API, you&#8217;ve just made your share button a 30-second loading spinner.</p><p>So we keep a pool. A Postgres table with one row per code:</p><pre><code><code>one_time_code_pool
  code              TEXT
  status            ENUM(available, pending, used, expired)
  assigned_to_user  UUID NULL
  expires_at        TIMESTAMP
</code></code></pre><p>A scheduled job watches the count of <code>available</code> rows. When it dips below a threshold, it calls the App Store Connect API and inserts the new batch. Codes flow through the lifecycle:</p><ul><li><p><code>available</code>: minted by Apple, sitting in the pool</p></li><li><p><code>pending</code>: assigned to a referrer, waiting for someone to redeem</p></li><li><p><code>used</code>: redeemed by a friend, attribution complete</p></li><li><p><code>expired</code>: never used within Apple&#8217;s expiry window</p></li></ul><p>When a user calls <code>GET /referral/my-code</code>, the backend grabs the next available row, marks it <code>pending</code>, stamps the user&#8217;s ID on it, and returns it. The user always gets an answer in under 100ms.</p><h2>Authenticating to App Store Connect</h2><p>The fiddly part is the JWT. The App Store Connect API uses a signed token, and the signing key format is a footgun.</p><p>Inside App Store Connect, under <strong>Users and Access &gt; Integrations &gt; App Store Connect API</strong>, you create a key. Apple gives you a <code>.p8</code> private key file and three identifiers: a Key ID, an Issuer ID, and a Team ID. You only get to download the key once. Lose it and you start over.</p><p>The key looks like this:</p><pre><code><code>-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg...
-----END PRIVATE KEY-----
</code></code></pre><p>In environment variables, the newlines often get stripped, which is what makes this annoying. Your JWT signing code needs to handle both the full PEM (with headers) and the raw body (without). We normalize on read, then sign with ES256:</p><pre><code><code>def generate_app_store_connect_jwt():
    headers = {"alg": "ES256", "kid": APPLE_KEY_ID, "typ": "JWT"}
    payload = {
        "iss": APPLE_ISSUER_ID,
        "iat": int(time.time()),
        "exp": int(time.time()) + 1200,  # 20 minutes max
        "aud": "appstoreconnect-v1",
    }
    return jwt.encode(payload, normalized_private_key, algorithm="ES256", headers=headers)
</code></code></pre><p>Tokens are valid for at most 20 minutes. We mint a new one per request rather than caching, which is fine because the cost is microseconds.</p><p>With the JWT in hand, generating a code batch is a single POST to <code>/v1/subscriptionOfferCodes</code> with a relationship to your subscription, the batch name, the number of codes, the expiry, and the activation date. Apple processes it asynchronously. A second poll a few minutes later returns the actual code strings.</p><h2>The Redemption Path</h2><p>This is where the architecture gets opinionated. Apple gives you two ways to know a code was redeemed, and you need both.</p><p><strong>Path one: the RevenueCat webhook.</strong> When a friend pastes the code into the App Store offer redemption sheet and completes the purchase, RevenueCat fires an <code>INITIAL_PURCHASE</code> event to your backend. The payload includes an <code>offer_code</code> field. You match that string against the <code>pending</code> rows in <code>one_time_code_pool</code>, find the referrer, mark the row <code>used</code>, and credit the referrer.</p><p><strong>Path two: the iOS confirm endpoint.</strong> SwiftUI ships a built-in modifier called <code>.offerCodeRedemption(isPresented:onCompletion:)</code>. It opens Apple&#8217;s native redemption sheet. When it returns successfully, your app immediately calls <code>POST /referral/confirm-redemption?referral_code=ABC123</code> so the backend can credit the referrer right away.</p><p>Why both? Because the RevenueCat webhook sometimes arrives without <code>offer_code</code> populated, or arrives minutes late, or arrives never (we&#8217;ve seen all three). And the iOS confirm path is unreliable too: the app might be backgrounded, the network might drop, the user might force-quit. You write idempotent code that handles either path arriving first, and you stop worrying about it.</p><p>The idempotency rule is one row in <code>referral_completions</code> per (referrer, referee) pair. If both paths fire, one wins, the other is a no-op.</p><h2>Crediting the Referrer</h2><p>This is the only part where you genuinely need a subscription provider with a &#8220;promotional&#8221; or &#8220;gifted&#8221; entitlement concept. RevenueCat calls it a promotional entitlement and exposes it through <code>POST /subscribers/{id}/entitlements/{ent}/promotional</code>. You hit that endpoint with a duration (we use 30 days per successful referral, stackable), and the user immediately gets premium features even though they never paid.</p><p>If you&#8217;re not using RevenueCat, the equivalent is maintaining a <code>granted_premium_until</code> column on your user table and checking it alongside the App Store receipt. Slightly more code, but the same shape.</p><p>The thing to internalize is: <strong>the reward doesn&#8217;t have to be subscription credit.</strong> Once you have a reliable signal that &#8220;user A successfully referred user B,&#8221; you can reward however you want. Cash via Tremendous. Account credits. Entries in a giveaway. A T-shirt. The hard part was attribution, not payout.</p><h2>The Whole Loop in One Diagram</h2><pre><code><code>Referrer taps "Share"
  &#8594; GET /referral/my-code
  &#8594; backend pulls next available code from pool, marks it pending
  &#8594; returns "Use code XYZ123 for a free month: apps.apple.com/redeem?code=XYZ123"

Friend taps the share message
  &#8594; opens App Store offer redemption sheet (native iOS)
  &#8594; completes purchase

Two things happen, in some order:
  &#8594; RevenueCat sends INITIAL_PURCHASE webhook with offer_code=XYZ123
  &#8594; iOS app calls POST /referral/confirm-redemption?referral_code=XYZ123

Backend (idempotent):
  &#8594; marks pool row 'used'
  &#8594; inserts row in referral_completions
  &#8594; grants referrer 30 days of promo access via RevenueCat
  &#8594; optionally pays referrer cash via Tremendous, sends a push, etc.
</code></code></pre><h2>What This Unlocks</h2><p>When the cost of building a referral program drops from &#8220;evaluate three vendors and sign a $20k contract&#8221; to &#8220;two days of backend work,&#8221; the calculus changes. You stop debating <em>whether</em> to do referrals. You start iterating on the offer.</p><p>A few things we&#8217;ve tried since shipping this:</p><p><strong>Tiered rewards.</strong> Refer one friend, get a month free. Refer five, get a year. The pool doesn&#8217;t care.</p><p><strong>Influencer codes.</strong> A creator gets their own batch of 100 codes branded for their audience. Same infrastructure, different UI for distribution.</p><p><strong>Win-back offers.</strong> A churned user gets a one-time code in an email. Same pool table, different <code>assigned_to</code> semantics.</p><p><strong>Affiliate cash payouts.</strong> For a partnership with a fitness coach, every redemption of their code triggered a $15 payment to them via Tremendous. We had the attribution. Tremendous had the rails. The whole thing was a 200-line script.</p><p>None of this required a new vendor. It all came out of the same <code>one_time_code_pool</code> and <code>referral_completions</code> tables.</p><h2>What Still Requires Care</h2><p>Being honest about the rough edges:</p><p><strong>Apple&#8217;s processing latency.</strong> Code batches don&#8217;t appear instantly. If your pool empties and you have to wait for Apple, your referral feature returns a 503. Keep your refill threshold generous and run the cron daily, not weekly.</p><p><strong>Webhook authentication.</strong> RevenueCat sends a shared secret in the auth header. If you don&#8217;t validate it, anyone on the internet can forge a successful referral and grant themselves premium. We reject any webhook missing the expected header value. This sounds obvious. It is not always done.</p><p><strong>Self-referral.</strong> You&#8217;d be amazed how many people try to redeem their own code. The check is one line (<code>if referrer_id == referee_id: reject</code>) but it has to be there.</p><p><strong>Entitlement identifier drift.</strong> We had a bug for a week where the webhook path granted entitlement <code>premium</code> and the iOS confirm path granted entitlement <code>alma_premium_promo</code>. Both reported success. Only one actually unlocked the UX. Pick one identifier, use it everywhere, and write a test.</p><p><strong>Admin endpoints.</strong> It&#8217;s tempting to expose <code>GET /referral/admin/stats</code> to see how the program is performing. If it&#8217;s on a public API host, add auth. We left ours unauthenticated for one afternoon and it was indexed by a crawler before sundown.</p><h2>The Stack</h2><p>For anyone building this:</p><ul><li><p><strong>App Store Connect API</strong>: Code generation, JWT auth with ES256, <code>/v1/subscriptionOfferCodes</code> endpoint</p></li><li><p><strong>Postgres</strong>: <code>one_time_code_pool</code> and <code>referral_completions</code> tables, plus an Alembic migration</p></li><li><p><strong>FastAPI</strong>: Three endpoints (<code>my-code</code>, <code>stats</code>, <code>confirm-redemption</code>) plus the RevenueCat webhook handler</p></li><li><p><strong>RevenueCat</strong>: Webhook receiver and promotional entitlement grants via their v1 API</p></li><li><p><strong>SwiftUI</strong>: <code>.offerCodeRedemption(isPresented:onCompletion:)</code> modifier for the native redemption sheet</p></li><li><p><strong>Background worker</strong>: A cron job that monitors pool depth and refills via the ASC API</p></li></ul><p>Total backend code is around 800 lines. Total iOS code is around 200. We use the standard subscription stack we already had, plus one new table and one new router.</p><h2>The Takeaway</h2><p>The real insight isn&#8217;t that Apple has a referral API. It&#8217;s that the primitives have been sitting in App Store Connect for years and almost nobody assembles them.</p><p>If you&#8217;re already using a subscription product, you&#8217;re already authenticating to Apple, validating receipts, and listening for webhook events. Adding a referral loop on top is a weekend, not a quarter. The codes are free. The infrastructure is yours. The only thing the third-party vendors are really selling is the assembly, and the assembly is a long blog post.</p><p>We shipped Alma&#8217;s referral program with this stack three months ago. Every code redeemed has been attributed. The pool refills itself. The referrer gets credit before their friend has even logged their first meal.</p><p>If you&#8217;re sitting on a subscription app and waiting for &#8220;the right time&#8221; to build referrals, this is your sign. Apple&#8217;s already done the hard part.</p><div><hr></div><p><em>Curious about what we&#8217;re building? <a href="https://alma.food/">Alma</a> is an AI nutrition coach that actually remembers you. Free to start.</em></p>]]></content:encoded></item><item><title><![CDATA[Delete Typeform. Ship the Weekly Feedback Loop Instead.]]></title><description><![CDATA[How I run a self-hosted user survey flywheel in 20 minutes a week]]></description><link>https://www.actionpotential.co/p/delete-typeform-ship-the-weekly-feedback</link><guid isPermaLink="false">https://www.actionpotential.co/p/delete-typeform-ship-the-weekly-feedback</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Thu, 16 Apr 2026 19:01:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BzP2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BzP2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BzP2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BzP2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BzP2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BzP2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BzP2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;15 Contemporary Syrian Artists You Need to Follow&quot;,&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="15 Contemporary Syrian Artists You Need to Follow" title="15 Contemporary Syrian Artists You Need to Follow" srcset="https://substackcdn.com/image/fetch/$s_!BzP2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BzP2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BzP2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BzP2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dacd2b-7022-47e1-9e4f-6e31cd4cfd22_1600x1000.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">by Anas Albraehe, a talented Syrian artist</figcaption></figure></div><p>I love sending surveys. I love reading the answers. Talking to users is one of the few parts of the job that has never gotten old, and a well-timed survey is the highest signal-to-effort way I know to do it at scale.</p><p>The part I do not love is the plumbing.</p><p>Typeform is a nice product, but the pricing tiers turn a weekly habit into a line item. The good features live behind the higher plans, response limits cap the fun right when things are interesting, and the data ends up trapped in a dashboard I then have to export, clean, and rejoin to my user table to ask any question worth asking. Rolling your own from scratch using a generic form builder or stitching together Notion plus Zapier plus a spreadsheet was, for most of my career, worse: expensive in hours, tedious to maintain, and always one broken integration away from a Saturday afternoon of debugging.</p><p>So the survey itch would show up. I&#8217;d weigh the plumbing. I&#8217;d ship the survey anyway, because the answers are worth it. But the friction kept the cadence irregular. I wanted a weekly habit. I was getting a quarterly burst.</p><p>So I rebuilt the whole thing. No Typeform. No Google Forms. No third-party anything. The survey page lives on our own site, the responses land in our own database, the sends go through our own email, and a skill orchestrates the whole loop. Weekly cadence. About twenty minutes of my time per round.</p><p>Here is how it works, and how you can build the same thing for your product.</p><div><hr></div><h2>What I Actually Wanted</h2><p>The target was simple:</p><ol><li><p>Survey topics should come from gaps in what we already know, not whatever I happened to be thinking about that week.</p></li><li><p>Writing a survey should take minutes, not hours. Designing four questions is not a craft that deserves a full afternoon.</p></li><li><p>Responses should land in a place I control, next to the user data they belong with, not trapped in a SaaS dashboard.</p></li><li><p>Sending should be one command, and the system should refuse to spam the same person twice inside a month.</p></li><li><p>I should never, ever open Typeform again.</p></li></ol><p>Five pieces, end to end. Each one is a hundred lines of code or less.</p><div><hr></div><h2>Piece 1: The Survey Page</h2><p>We have a marketing site at alma.food. It already renders a dozen static pages. Adding a dynamic survey route turned out to be a one-evening job.</p><p>The page lives at <code>alma.food/surveys/:slug</code>. The slug is the survey identifier. The configuration for each survey is a plain JavaScript file in <code>src/survey-configs/</code>:</p><pre><code><code>export default {
  slug: 'logging-accuracy-2026-04',
  title: 'Is Alma getting your food right?',
  subtitle: 'Quick 3-minute check on nutrition data accuracy.',
  questions: [
    {
      id: 1,
      type: 'single_choice',
      question: 'How often does Alma feel off?',
      options: ['Almost never', 'Sometimes', 'Often', 'Most of the time'],
      required: true,
    },
    {
      id: 2,
      type: 'rating',
      question: 'How much does that affect your trust in Alma?',
      scale: 5,
      labels: ['Not at all', 'Makes me want to quit'],
      required: true,
    },
    {
      id: 3,
      type: 'open_text',
      question: 'Anything specific you want us to fix?',
      required: false,
    },
    {
      id: 4,
      type: 'email_opt_in',
      question: 'Want us to follow up?',
      required: false,
    },
  ],
}
</code></code></pre><p>The React page reads the slug from the URL, imports the matching config, and renders a single-page survey with a progress bar. Six question types cover everything I&#8217;ve ever needed: <code>single_choice</code>, <code>multi_choice</code>, <code>rating</code>, <code>yes_no</code>, <code>open_text</code>, <code>email_opt_in</code>. The survey pages aren&#8217;t linked from anywhere public. The path you end up on is the one you received in the email.</p><p>On submit, the page posts to a single backend endpoint. That&#8217;s it. Shipping a new survey is now writing a JS config file, adding it to a loader map, and pushing to our <code>prod</code> branch. Vercel deploys it automatically.</p><div><hr></div><h2>Piece 2: The Response Endpoint</h2><p>The backend is a single FastAPI route:</p><pre><code><code>@router.post("/surveys/{slug}/response")
@rate_limit(...)
def submit_survey_response(slug, params, session):
    session.execute(text("""
        INSERT INTO survey_responses (survey_slug, answers, respondent_email)
        VALUES (:slug, :answers, :email)
    """), {
        "slug": slug,
        "answers": json.dumps(params.answers),
        "email": params.respondent_email,
    })
    session.commit()
    return {"success": True}
</code></code></pre><p>(The endpoint is rate-limited and does basic input validation. Don&#8217;t ship a public write endpoint without both.)</p><p>That is the entire storage layer. Three tables cover the schema:</p><ul><li><p><code>surveys</code> &#8212; slug, title, description, questions JSON, cohort SQL (for reference later)</p></li><li><p><code>survey_responses</code> &#8212; slug, answers JSON, respondent email, created_at</p></li><li><p><code>survey_sends</code> &#8212; slug, user_id, email, sent_at (enforces the cooldown)</p></li></ul><p>No admin panel. No dashboard. I query it the way I query any other production data, which is exactly the point. Survey responses live next to the food logs, the chat transcripts, the subscription events. When I want to cross-reference a specific answer against a user&#8217;s logging pattern, it is one join, not a CSV export.</p><div><hr></div><h2>Piece 3: The Skill</h2><p>This is the part that took the habit from &#8220;quarterly maybe&#8221; to &#8220;weekly without thinking.&#8221;</p><p>I wrote a Cursor skill at <code>docs/skills/survey.md</code>. Skills are markdown files that describe a workflow for an AI agent to execute. Mine has eight steps, in order:</p><ol><li><p><strong>Load context</strong> &#8212; the agent reads a voice guide and queries the last 15 surveys from the database so it doesn&#8217;t repeat a topic.</p></li><li><p><strong>Propose topics</strong> &#8212; based on gaps in past surveys, the agent proposes five candidate topics with a one-line rationale each, and asks me to pick one or describe my own.</p></li><li><p><strong>Design the survey</strong> &#8212; four to six questions, no leading phrasing, one open text near the end, one email opt-in last. The agent drafts it, I approve.</p></li><li><p><strong>Create the files</strong> &#8212; config file, loader entry, <code>surveys</code> table insert. All generated.</p></li><li><p><strong>Find target users</strong> &#8212; the agent proposes a cohort (active last 30 days is a good default), runs the SQL against our Supabase prod database via MCP, dedupes against anyone surveyed in the last 30 days, and reports the final count.</p></li><li><p><strong>Draft the email</strong> &#8212; short, plain text, warm, direct. No template. No branding. The subject line is curiosity driven, not &#8220;We need your feedback.&#8221;</p></li><li><p><strong>Send</strong> &#8212; one command per batch, BCC up to 49 recipients per call (AWS SES limit), record every send in <code>survey_sends</code>.</p></li><li><p><strong>Follow up with opt-ins</strong> &#8212; respondents who leave an email in the opt-in field get a short thank-you note with a Cal.com link two days later.</p></li></ol><p>Each step has clear instructions: the exact SQL to run, the exact email structure, the exact insert statement. The skill removes every small decision that used to consume my energy.</p><p>When I say &#8220;run the survey skill,&#8221; the agent reads the file and starts at Step 1. I show up for the approval checkpoints. The agent handles the plumbing.</p><div><hr></div><h2>Piece 4: The Review Loop</h2><p>Sending is half the loop. The other half is reading what came back and actually doing something with it.</p><p>Every Thursday I run a second skill that pulls the week&#8217;s responses, groups them by question, summarises the open text qualitatively, and drops the whole thing into a dated markdown file at <code>product_marketing/survey_manager/survey_results_YYYY_MM.md</code>. The same file gets appended to every week. Over time it becomes a rolling log of what users are telling us, which is more useful than any single survey&#8217;s top-line numbers.</p><p>The key move here is that the review is deterministic. Same format, same sections, same location, every week. That consistency is what makes it possible to skim three months of results in ten minutes and actually notice a shift in sentiment, not just re-read last week&#8217;s spike.</p><div><hr></div><h2>Piece 5: The Cadence</h2><p>Every Thursday. That is the whole schedule.</p><p>On Thursday morning, I run the review skill against the survey I sent the previous Thursday. Most responses are in by then. The skill summarises the answers and appends them to the running results doc. Then I run the send skill and ship a new one the same day. Review, then send, then done until next Thursday.</p><p>Twenty minutes, once a week, at the same time. The consistency is what turned this into a habit instead of a project.</p><p>The cohort query is the part I&#8217;m most protective of. Every send pulls a fresh batch of active users directly from the production database and cross-references them against the <code>survey_sends</code> table before anyone gets an email. If you&#8217;ve received a survey from me in the last month, you are automatically excluded from the next one, no matter what the topic is. That table is effectively a lightweight CRM: one row per send, one per-user cooldown, enforced at query time. The skill refuses to draft the email until the cohort has been deduped.</p><p>This matters more than it sounds. The fastest way to ruin a feedback loop is to burn out the people who answer. The cooldown means nobody hears from me more often than once a month, and every survey reaches a genuinely fresh slice of the user base. The BCC sends use a generic &#8220;Hi there&#8221; greeting (no personalisation is possible in BCC), which I decided was a fine trade for being able to send to a batch with one command. The signal is in the answers, not the salutation.</p><div><hr></div><h2>The Math</h2><p>A weekly Typeform-style workflow has real costs:</p><ul><li><p>30 minutes designing each survey in a builder UI</p></li><li><p>15 minutes exporting responses to a CSV</p></li><li><p>15 minutes rejoining that CSV to user data to ask any question worth asking</p></li><li><p>A monthly SaaS bill that climbs the moment your response volume gets interesting, plus feature gates on the higher tiers for things that should be table stakes</p></li></ul><p>A self-hosted loop costs me:</p><ul><li><p>20 minutes a week, mostly spent on approval checkpoints</p></li><li><p>Zero incremental SaaS</p></li><li><p>Full access to the raw data for cross-referencing</p></li><li><p>A rolling log of feedback I actually re-read</p></li></ul><p>The tradeoff I thought I&#8217;d be making (polish for control) turned out to be a non-issue. Nobody has complained about the page. People answer the questions. The open text boxes fill up with thoughtful paragraphs. Response rates have gone up, not down, probably because the emails sound like they&#8217;re coming from a founder who actually cares, not a form that escaped a marketing department.</p><div><hr></div><h2>What You Need to Build This</h2><p>If you&#8217;re a founder or PM reading this and thinking about stealing the pattern, here&#8217;s the minimum viable version:</p><ol><li><p><strong>A page on your site</strong> that reads a slug, loads a config, renders a form, and POSTs to one endpoint. 150 lines of React.</p></li><li><p><strong>One backend endpoint</strong> to store the response. Rate limit it.</p></li><li><p><strong>Three database tables</strong>: surveys, responses, sends.</p></li><li><p><strong>A skill file</strong> that walks an AI agent through proposing, designing, sending, and recording. Start with mine. Swap out the cohort SQL for whatever matches your user model.</p></li><li><p><strong>A weekly time slot</strong> on your calendar. Not for doing the work. For showing up to the approval checkpoints.</p></li></ol><p>Everything else is polish. The entire system is probably 400 lines of code end to end, most of which you&#8217;re going to ask an agent to write for you anyway.</p><p>The lesson I keep learning is that tools like Typeform solve a problem that doesn&#8217;t really exist anymore, which is &#8220;I don&#8217;t know how to ship a form.&#8221; You do know how to ship a form. Or rather, the agent sitting next to you does, and all you need to give it is the structure of your own system and a little bit of taste about what the survey should ask.</p>]]></content:encoded></item><item><title><![CDATA[The Codebase That Fixes Itself at 3 AM]]></title><description><![CDATA[Five Python daemons, headless Claude Code, and zero on-call pages]]></description><link>https://www.actionpotential.co/p/the-codebase-that-fixes-itself-at</link><guid isPermaLink="false">https://www.actionpotential.co/p/the-codebase-that-fixes-itself-at</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 23 Mar 2026 16:27:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!q7mw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q7mw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q7mw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q7mw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q7mw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q7mw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q7mw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg" width="1168" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A geometric abstraction of a server rack in Guido Molinari's hard-edge painting style.&quot;,&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="A geometric abstraction of a server rack in Guido Molinari's hard-edge painting style." title="A geometric abstraction of a server rack in Guido Molinari's hard-edge painting style." srcset="https://substackcdn.com/image/fetch/$s_!q7mw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q7mw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q7mw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q7mw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a23de79-c538-4f95-9888-569f88a6c8d4_1168x784.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A server rack in the style of Guido Molinari</figcaption></figure></div><p>Last Tuesday at 2:47 AM, a user in Sydney logged &#8220;medium fries from Macca&#8217;s.&#8221; The system matched it to a US-sourced McDonald&#8217;s record. Wrong country, wrong portion, wrong calories. Nobody was awake.</p><p>By morning, there was a markdown file in our repo explaining exactly what happened: the branded fast path matched a US-centric database record because the system has no region awareness. The file included the trace ID, the database query that confirmed the mismatch, and a recommendation to add region-aware branded food matching to the backlog. It decided not to auto-fix because the user had already corrected the values manually.</p><p>The system that wrote that report has no pulse. It&#8217;s a Python daemon running on a Macbook Pro that polls our production database every three minutes, and when it finds something wrong, it spawns an autonomous AI agent to investigate and fix it.</p><p>We call them watchers.</p><h2>What a Watcher Actually Is</h2><p>A watcher is a Python script that runs as a background daemon. It polls a data source on a fixed interval, checks for new problems, and when it finds one, spawns a headless Claude Code process to investigate.</p><p>Not an API call. A full coding agent with access to the filesystem, the production database, observability traces, and the source code. It can read files, write fixes, run queries, commit to git, and update production data. It does this without a human in the loop.</p><p>We run five of them.</p><p><strong>Bug Watcher</strong> polls every three minutes. It watches two tables: user-submitted bug reports and food feedback dislikes. When someone taps the thumbs-down on a food log and writes &#8220;this is way off,&#8221; the bug watcher picks it up, pulls the user&#8217;s chat logs, queries the food item and its change history, searches our observability platform for the processing trace, reads the relevant source code, and writes an investigation report. If the fix is straightforward, a bad reference ratio or a corrupted nutrition value, it fixes it in production and commits the change.</p><p><strong>Accuracy Watcher</strong> runs every three hours. It fetches all food item corrections from the last window: every time a user edited their calories, changed a quantity, or deleted something we got wrong. It groups the corrections by food classification, data source, and type of change. When it spots a pattern, like a cluster of 30%+ calorie corrections on estimated foods from the same source, it traces the issue through our processing pipeline, identifies the upstream bug, and fixes it in the code.</p><p><strong>Error Watcher</strong> runs every thirty minutes. It looks for food items stuck in an error state, meaning the system tried to process them and failed. It groups them by classification, investigates the failure via traces and code, and either recovers the items or fixes the code path that broke.</p><p><strong>Fixer Watcher</strong> polls every three minutes. We have an automated fixer agent that attempts to correct food items when it detects issues. Sometimes the fixer itself fails. The fixer watcher investigates those failures, classifying whether the root cause was a code bug, a data issue, a model hallucination, a search gap, or a timeout. This is meta-debugging: an agent investigating why another agent failed.</p><p><strong>GCloud Watcher</strong> runs every three hours. It pulls error logs from our three Cloud Run services (API, workers, scheduler) via <code>gcloud logging read</code>, classifies the errors with regex patterns, filters out known benign failures (expected auth rejections, user-deleted items, network timeouts), and spawns an investigation for anything new or frequent.</p><h2>What Self-Healing Actually Looks Like</h2><p>The phrase &#8220;self-healing&#8221; gets thrown around loosely. Here&#8217;s what it means in practice, with two real examples from the last 48 hours.</p><p><strong>The scoop problem.</strong> The accuracy watcher&#8217;s 6 AM run analyzed 223 corrections from 38 users. It found that protein powder logged by weight was coming back at absurd values. A user logged 30 grams of protein powder and got 30 calories instead of 140.</p><p>The investigation traced it to our fast path formula for chef recipe ingredients. When a food is stored per-scoop (140 cal per 1 scoop, with a reference ratio indicating 30g per scoop) and a user logs it in grams, the formula was squaring the weight conversion. The physics filter caught the impossible values and fell back to the LLM, which underestimated by a different amount.</p><p>The watcher identified the exact function (<code>try_chef_ingredient_fast_path</code> in <code>fast_paths.py</code>), wrote a cross-unit detection guard, committed the fix, and noted that 253 foods in the database had this broken pattern. Total time from detection to committed fix: about twelve minutes. No human involved.</p><p><strong>The zucchini corruption.</strong> A user reported that 196g of zucchini was showing 98 calories, roughly 3x the correct value. The bug watcher investigated and found something worse than a simple estimation error.</p><p>Seven days earlier, a different user had over-corrected their zucchini entry twice in two minutes. Our user correction propagator, designed to learn from corrections and update shared food records, accepted both corrections. The master zucchini record went from 15 cal/100g (correct, per USDA data) to 50 cal/100g. For a full week, every user who logged zucchini got inflated values. About 301 food items across 165 users were affected.</p><p>The watcher traced the entire corruption timeline through five database events and three observability traces. It identified that the propagator&#8217;s safety guards only blocked large downward corrections (&gt;80% reductions) but had no symmetric guard for upward corrections. It documented the affected user count, recommended a backfill script, and flagged the propagator design gap for human review.</p><p>This is the distinction that matters. The watcher didn&#8217;t blindly auto-fix everything. It fixed the data that was safe to fix (the master food record had already been corrected by a subsequent user). It documented what needed human judgment (the backfill affecting 165 users). And it identified the systemic weakness (asymmetric propagation guards) that caused the problem in the first place.</p><h2>The Constraint Design</h2><p>Giving an AI agent production database access and git commit rights sounds reckless. The interesting engineering is in how you make it not reckless.</p><p>Each watcher spawns Claude Code in headless mode with a whitelist of allowed tools. The agent can read, edit, and write files. It can run specific shell commands: <code>uv run</code>, <code>gcloud</code>, <code>git add</code>, <code>git diff</code>, <code>git commit</code>. It can query our production database via Supabase and search observability traces via Logfire. It cannot delete tables, cannot force-push, cannot modify CI/CD pipelines, cannot access external APIs.</p><p>The prompts are 200+ lines of markdown each. They aren&#8217;t vague instructions like &#8220;investigate bugs.&#8221; They&#8217;re structured investigation playbooks: which tables to query first, what SQL patterns to use, how to navigate the codebase, what qualifies as a safe auto-fix versus what requires human review. The prompt template is the real product. The daemon is just the delivery mechanism.</p><p>Timeouts prevent runaway investigations. Bug and fixer watchers get 15 minutes. Accuracy, error, and GCloud watchers get 30. If Claude hasn&#8217;t finished by then, the process is killed and the item is logged for the next cycle.</p><p>State tracking prevents re-investigation. Each watcher maintains a SQLite database of processed items. If the bug watcher already investigated report #4521, it won&#8217;t investigate it again on the next poll. Reset is simple: delete the SQLite file and everything from today gets re-examined.</p><p>Every investigation produces a markdown report saved to the repo. These aren&#8217;t just logs. They&#8217;re structured documents with severity classification, root cause analysis, affected code paths, evidence (trace IDs, SQL queries, before/after values), and a clear record of what was fixed and what was deferred. When I review them in the morning, I&#8217;m reading a finished investigation, not raw data.</p><h2>The Prompt Is the Product</h2><p>The difference between a watcher that&#8217;s useful and one that generates noise is entirely in the prompt template.</p><p>Our accuracy watcher prompt doesn&#8217;t just say &#8220;analyze these corrections.&#8221; It tells Claude to group changes by food classification and data source first. It explains our processing pipeline: completion agent, chef agent, reference agent, fast paths. It states our core principle: &#8220;fix upstream, not at the gateway.&#8221; It provides the SQL to pull Logfire traces by food item ID. It describes what a &#8220;large correction&#8221; means in context (30%+ calorie change) and how to distinguish between user preference changes and genuine data quality issues.</p><p>We iterated on these prompts for weeks. Early versions produced investigations that were technically correct but useless. Claude would identify the wrong food record but not trace it back to the code that selected it. Or it would find the code bug but not check how many other foods were affected. Each failure mode became a new paragraph in the prompt.</p><p>The prompts encode institutional knowledge. They&#8217;re how we teach a new engineer to investigate a bug, except the engineer runs at 3 AM and doesn&#8217;t get tired.</p><h2>The Economics</h2><p>This runs on a Claude Max subscription. Every headless invocation is included. The bug watcher might spawn 15 investigations in a day. The accuracy watcher runs 8 times. The GCloud watcher, 8 times. All unlimited, fixed cost.</p><p>We explicitly strip the Anthropic API key from the environment before spawning each agent. This forces Claude Code to use the Max subscription rather than per-token billing. At the volume these watchers produce, per-token costs would be significant. Fixed-cost unlimited access makes the whole architecture viable.</p><p>The alternative isn&#8217;t &#8220;don&#8217;t do this.&#8221; The alternative is doing it manually. Reading error logs over coffee. Querying the database by hand. Tracing through code to find why a food item came back at 3x the correct calories. The watchers don&#8217;t do anything a human can&#8217;t do. They do it at 2:47 AM, in twelve minutes, every time.</p><h2>What Goes Wrong</h2><p>The watchers aren&#8217;t magic. They have failure modes.</p><p>False confidence is the main risk. An agent that can write to production and commit code will occasionally be wrong with conviction. Our mitigation is the constrained tool whitelist and the investigation reports. Every action is documented. Every fix includes before/after values. When a watcher makes a bad call, the report makes it easy to find and revert.</p><p>Prompt drift is real. As the codebase evolves, the prompts need to reference current file paths and function names. A prompt that says &#8220;check <code>completion_agent.py</code> line 340&#8221; becomes misleading after a refactor. We treat prompts like code: they get updated alongside the source they reference.</p><p>Scope creep is tempting. When you have an agent that can fix production data, it&#8217;s easy to let it fix things that should require human judgment. The zucchini case is a good example. The watcher could have run the backfill across 165 users. It correctly chose not to, because that decision has blast radius. The prompt explicitly defines what &#8220;safe to auto-fix&#8221; means: single-record data quality issues with high-confidence evidence. Anything broader gets flagged.</p><h2>What This Means for Production AI</h2><p>Most of the conversation about AI agents focuses on capability: what they can do, how smart they are, which benchmarks they pass. The watchers taught us that the interesting problems are about constraint, trust, and feedback loops.</p><p><strong>Constraint design matters more than capability.</strong> Claude Code can do a lot. The value of the watchers comes from limiting what it does. A tightly scoped agent that fixes serving ratios reliably is more valuable than an unconstrained agent that might fix anything.</p><p><strong>Markdown reports are an underrated interface.</strong> The watchers produce human-readable investigation reports, not log files. This means the morning review takes five minutes instead of an hour. When something goes wrong, the reasoning is right there. Structured output for human review is as important as the automation itself.</p><p><strong>Meta-debugging is a real pattern.</strong> The fixer watcher, an agent that investigates why another agent failed, sounds recursive. In practice, it&#8217;s one of the most useful watchers. Automated systems fail in automated ways. Having a second system that classifies those failures by root cause (code bug, data issue, model hallucination, timeout) turns noise into signal.</p><p><strong>Start with your noisiest signal.</strong> We didn&#8217;t build five watchers on day one. We started with the bug watcher because user-reported issues were the most painful feedback loop. Once that worked, we noticed patterns in the data that led to the accuracy watcher. The error and GCloud watchers came from operational pain points that the first two watchers surfaced.</p><p><strong>Headless CLI agents are production infrastructure.</strong> We treat <code>claude -p</code> the same way we treat a cron job or a background worker. It has a defined input, constrained permissions, a timeout, state tracking, and structured output. The fact that the &#8220;worker&#8221; is a language model instead of a Python function is an implementation detail.</p><p>The watchers run every day. Most of the time, they find nothing interesting. But when a serving formula silently breaks at 6 AM and gets fixed by 6:12 AM, before any user notices, that&#8217;s not a demo. That&#8217;s infrastructure.</p>]]></content:encoded></item><item><title><![CDATA[The Investor Update That Builds Itself]]></title><description><![CDATA[How I replaced a monthly slide-deck ritual with a live web page, a Cursor skill, and API calls to six data sources]]></description><link>https://www.actionpotential.co/p/the-investor-update-that-builds-itself</link><guid isPermaLink="false">https://www.actionpotential.co/p/the-investor-update-that-builds-itself</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 02 Mar 2026 11:55:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zqYm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zqYm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zqYm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zqYm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zqYm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zqYm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zqYm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg" width="1168" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A Picasso-style abstract painting of a meditating figure in a desert with missile smoke.&quot;,&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="A Picasso-style abstract painting of a meditating figure in a desert with missile smoke." title="A Picasso-style abstract painting of a meditating figure in a desert with missile smoke." srcset="https://substackcdn.com/image/fetch/$s_!zqYm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zqYm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zqYm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zqYm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e526b4f-75d9-4f04-8466-94251fc678e2_1168x784.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Meditating in war in the style of Picasso.</figcaption></figure></div><p>Every month, I used to spend half a day assembling an investor update.</p><p>Open RevenueCat. Screenshot the MRR chart. Open Supabase. Run a SQL query I&#8217;d half-forgotten. Open Apple Search Ads. Navigate four menus deep to find the CPI. Open a Google Doc. Open Gamma. Start building slides. Realize I formatted it differently from last month. Start over.</p><p>The content of the update was never the bottleneck. The assembly was.</p><p>So I built a system where the update assembles itself.</p><div><hr></div><h2>What I Wanted</h2><p>The end state I had in mind was simple:</p><ol><li><p>One command (or one conversation with an AI agent) that pulls metrics from every data source at once</p></li><li><p>A structured interview about qualitative things the agent can&#8217;t know: product updates, strategic shifts, what surprised me</p></li><li><p>A living web page that renders the data, password-protected for investors</p></li><li><p>The whole thing done in under 30 minutes</p></li></ol><p>Here&#8217;s what I actually built, in enough detail that you could replicate it.</p><div><hr></div><h2>Step 1: The Cursor Skill</h2><p>The foundation is a Cursor/Claude skill. If you&#8217;re not using skills yet, the idea is simple: a markdown file that acts as an instruction set for an AI agent. It describes a workflow, lists the exact shell commands, SQL queries, and API calls to run, and tells the agent what to do with the results.</p><p>My investor update skill lives at <code>alma-growth/skills/investor-update/SKILL.md</code>. Here&#8217;s the structure:</p><pre><code><code>1. Gather Metrics     &#8592; automated, runs in parallel
2. Interview          &#8592; the agent asks me 13 questions
3. Generate Output    &#8592; structured markdown, ready to render
</code></code></pre><p>When I say &#8220;run the investor update skill,&#8221; the agent reads the file and begins. It doesn&#8217;t need further instructions.</p><div><hr></div><h2>Step 2: The Data Sources</h2><p>The metrics layer hits six sources. Here&#8217;s exactly how:</p><h3>RevenueCat &#8212; Subscription Revenue</h3><p>RevenueCat has a clean V2 API. One call to their metrics overview endpoint returns everything useful: MRR, ARR, active subscriptions, active trials, revenue per platform. No scraping, no dashboards.</p><pre><code><code>curl -s -X GET "https://api.revenuecat.com/v2/projects/[project_id]/metrics/overview" \
  -H "Authorization: Bearer $REVENUECAT_API_KEY" \
  -H "Content-Type: application/json"
</code></code></pre><p>The response includes <code>mrr</code>, <code>active_subscriptions</code>, <code>active_trials</code>, and enough to compute ARR on the spot. The MRR split between monthly and annual plans takes one more query &#8212; you cross-reference active subscription counts against known product IDs. No SDK required. Just HTTP.</p><h3>Supabase Production &#8212; User Metrics</h3><p>MAU, DAU, total users, retention funnels. All live in the production database. The Supabase MCP (Model Context Protocol) tool lets the agent query production directly without me opening a SQL editor.</p><p>The retention query I use is slightly involved: it&#8217;s a weekly cohort funnel that traces <code>app_open</code> events through <code>sign_up</code>, <code>activation</code>, and <code>day_7_return</code>. I keep the full query in a references file (<code>references/retention_query.md</code>) so the skill can reference it without bloating the main SKILL.md.</p><p>The MAU query is three lines:</p><pre><code><code>SELECT COUNT(DISTINCT user_id) as mau
FROM food_items
WHERE created_at &gt;= NOW() - INTERVAL '30 days';
</code></code></pre><p>Everything else is variations on that pattern.</p><h3>Apple Search Ads &#8212; ASA Performance</h3><p>ASA has an API, but it requires a signed JWT with a private key and a specific auth flow. I have a Python fetcher script that handles all of that:</p><pre><code><code>cd alma-growth/ad-optimizers/apple-search-ads
python asa_data_fetcher.py --days 30
</code></code></pre><p>Outputs total spend, installs, and CPI for the month. The script handles token generation, pagination, and unit normalization (ASA returns spend in local currency, which I convert).</p><h3>Meta Ads &#8212; Facebook/Instagram</h3><p>The daily ad audit script handles this. It calls the Facebook Business SDK, pulls spend and performance for all active campaigns, and spits out a summary table.</p><pre><code><code>cd alma-growth/ad-optimizers
python daily_ad_audit.py --days 30 --dry-run --no-ai
</code></code></pre><p><code>--dry-run</code> means it won&#8217;t send an email. <code>--no-ai</code> skips the Claude summary step since the investor update skill handles that itself.</p><h3>App Store Connect &#8212; Downloads</h3><p>Apple&#8217;s App Store Connect Reporter API is the oldest and most annoying of the bunch, it requires a Java jar file and a properties file with API credentials. Once that&#8217;s set up, it works:</p><pre><code><code>cd alma-growth/app-store-connect-api
python app_store_connect_reports.py --days 30
</code></code></pre><p>Returns total installs, updates, and platform breakdown for the month.</p><h3>Google Ads</h3><p>Handled by the Meta audit script&#8217;s companion. Spend and click data extracted the same way.</p><div><hr></div><h2>Step 3: The Interview</h2><p>After the metrics are gathered, the agent asks me 13 questions, one at a time:</p><ol><li><p>What product features shipped this month?</p></li><li><p>Any major fixes or reliability improvements?</p></li><li><p>What are users clearly responding to?</p></li><li><p>Did you ship or test any monetization changes?</p></li><li><p>What marketing activities actually happened?</p></li><li><p>Any partnerships signed, paused, or dropped?</p></li><li><p>Total ad spend breakdown by platform?</p></li><li><p>Any team changes?</p></li><li><p>Current team structure?</p></li><li><p>Cash in bank at month end?</p></li><li><p>What went better than expected?</p></li><li><p>What&#8217;s clearly not working or still messy?</p></li><li><p>Top 3 concrete priorities for next month?</p></li></ol><p>These are the things an API can&#8217;t tell you. The agent takes my answers, combines them with the quantitative data, and produces the full update.</p><p>The output is structured markdown. Numbers first, narrative second. Same format every month so investors can scan it without re-learning the layout.</p><p>Note: I use a voice dictation tool to make it easy to just talk out loud as I answer these questions.</p><div><hr></div><h2>Step 4: The Web Page</h2><p>This is where it gets interesting. Instead of building a slide deck, I render the update as a React page.</p><p>It looks like this:</p><p><strong>At login:</strong> Alma logo, a password field, nothing else. Clean.</p><p><strong>Once unlocked:</strong></p><ul><li><p>Hero section with month, tagline, one-line summary</p></li><li><p>Animated metric cards (numbers count up on scroll into view)</p></li><li><p>Month-over-month comparison table</p></li><li><p>Revenue breakdown</p></li><li><p>Ad performance summary by platform</p></li><li><p>Retention funnel table with weekly cohorts</p></li><li><p>Major product releases (icons, titles, descriptions)</p></li><li><p>Monetization strategy section</p></li><li><p>Financial position with cash breakdown</p></li><li><p>Two-column &#8220;Working Well / Needs Work&#8221; reflection</p></li><li><p>Numbered priority list for next month</p></li></ul><p>The entire thing is roughly 520 lines of React and 300 lines of CSS. It doesn&#8217;t use a charting library. Animated numbers are a 40-line custom hook with <code>requestAnimationFrame</code>. The styling uses our existing design tokens.</p><p>Updating it takes about 10 minutes: swap out the numbers, update the lists, commit, push. AWS deploys automatically.</p><div><hr></div><h2>What This Replaced</h2><p>The old workflow involved Gamma.</p><p>If you haven&#8217;t tried <a href="https://gamma.app/">Gamma</a>, it&#8217;s an AI presentation tool that generates slides from text input. It&#8217;s genuinely good. You paste in a text outline and it produces a styled presentation in 30 seconds. For a while, it was the fastest path from &#8220;update notes&#8221; to &#8220;something I can share.&#8221;</p><p>But I kept running into the same friction: my update had specific formatting. I wanted numbers animated. I wanted MoM comparisons always side-by-side. I wanted the same layout, month after month, so investors could scan it in 90 seconds. Gamma would always give me something close but different. I&#8217;d spend time adjusting. The slides would live in a link that expired or required a login. The numbers were static.</p><p>The alternative, building it in HTML and CSS, used to feel like overkill for a two-person startup. It isn&#8217;t anymore.</p><p>With Cursor and a capable model, I described the page I wanted in plain English. The agent built the initial version in about 20 minutes. I gave feedback. Iterated. By the end of the day it was live and doing exactly what I wanted.</p><p>This is a meaningful shift. <strong>The definition of software is changing in front of us.</strong></p><p>Software used to mean: a non-technical founder has an idea, briefs a developer, the developer codes it over days, deploys it, the founder waits. Or alternatively: a non-technical founder uses a no-code/low-code tool (Gamma, Webflow, Glide, Notion), trades customization for speed.</p><p>Those two options still exist. But there&#8217;s a third option now: describe what you want to an AI agent in a coding environment, get the code, ship it. The barrier between &#8220;I want a thing&#8221; and &#8220;the thing exists&#8221; has dropped dramatically.</p><p>I&#8217;m not saying this makes software engineers obsolete. The Cursor agent can&#8217;t architect a complex distributed system without guidance. It makes mistakes. It needs reviewing. But for a specific class of internal tools, dashboards, landing pages, update portals, data visualizations, the iteration loop has compressed from days to hours.</p><p><strong>Gamma is a great product. There&#8217;s still a version of this world where most people use tools like it. But when the raw material (HTML, CSS, JavaScript) is this easy to generate and the deployment pipeline (Git + Vercel) is this frictionless, I find myself asking: what problem is the abstraction layer actually solving?</strong></p><p>The value of software is shifting. Less about encoding behavior that&#8217;s hard to describe. More about describing behavior clearly enough that the agent can encode it for you.</p><div><hr></div><h2>What Still Requires Me</h2><p>A few things the agent gets wrong every time:</p><p><strong>Narrative judgment.</strong> The agent can write &#8220;Coaching 2.0 launched.&#8221; I need to write &#8220;Coaching 2.0 is landing well, unexpected finding is users seem genuinely impressed by the fact that Alma flags its own bugs, treating transparency as a feature.&#8221; That signal came from watching user reactions, not from a database query.</p><p><strong>Prioritization.</strong> The agent can list everything that happened. I need to decide what matters. The SR&amp;ED refund approval is worth mentioning. The specific thing we tried and abandoned is probably not.</p><p><strong>Tone calibration.</strong> Investor updates walk a line. Honest without being alarming. Transparent without being scattered. The agent drafts in the right format. I edit for the right register.</p><div><hr></div><h2>The Result</h2><p>My February update took about 25 minutes from starting the skill to having a live URL.</p><p>The page has animated metrics, a retention funnel table, a side-by-side reflection section, and a priorities list. It&#8217;s password protected. It renders on mobile. The numbers animate on scroll. The brand tokens match the rest of the site.</p><p>The investors see it. They send back questions. I answer. That&#8217;s the loop.</p><p>The slide deck is gone. The assembly ritual is gone. The monthly half-day is now a half-hour.</p>]]></content:encoded></item><item><title><![CDATA[We'll Always Be Designing Chairs]]></title><description><![CDATA[On human restlessness, and why AGI won't be the last word]]></description><link>https://www.actionpotential.co/p/well-always-be-designing-chairs</link><guid isPermaLink="false">https://www.actionpotential.co/p/well-always-be-designing-chairs</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Sun, 22 Feb 2026 19:57:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_XBr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_XBr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_XBr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_XBr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_XBr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_XBr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_XBr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b82d08ad-6ba0-4e29-9f08-4794dbd13bc8_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;:551105,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/188827921?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_XBr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_XBr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_XBr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_XBr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82d08ad-6ba0-4e29-9f08-4794dbd13bc8_1536x2048.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">From the Functional to the Fabulous Exhibit at the Montreal Museum of Fine Arts</figcaption></figure></div><p>There&#8217;s an exhibit at the Montreal Museum of Fine Arts right now that stopped me in my tracks.</p><p>Chairs. Hundreds of them. Spanning centuries of design, laid out like a visual argument for something I couldn&#8217;t quite articulate in the moment.</p><p>A Windsor chair from the 1700s. Thonet&#8217;s bent beech bentwood. Eames molded plywood. Verner Panton&#8217;s single-piece plastic S-curve. Chairs made from steel, rope, recycled materials, algorithms. Chairs designed for posture, for status, for a particular living room in a particular decade. Chairs so uncomfortable they were clearly never meant to be sat in.</p><p>And I kept thinking: why are we still doing this?</p><p>We solved the chair. You need something to sit on. Four legs, a seat, maybe a back. Done. Problem solved centuries ago.</p><p>Except we never stopped.</p><div><hr></div><p>Every generation redesigns the chair from scratch. New materials arrive and designers reach for them immediately. Cultural attitudes shift, toward minimalism, toward maximalism, toward sustainability, toward spectacle, and the chair shifts with them. Ergonomics becomes a field and suddenly the chair is a medical device. The home office becomes a thing and suddenly we need an entirely new category of chair. A new generation of designers decides everything that came before was wrong, starts over, and produces something that makes the previous generation uncomfortable in every sense.</p><p>The chair is never finished. Not because it&#8217;s broken. Because we&#8217;re not.</p><p><strong>Humans are in a perpetual state of discontent and curiosity.</strong> We don&#8217;t optimize and then stop. We optimize, get comfortable with the solution, and then immediately start wondering if the solution was the right question. It&#8217;s not a flaw in our thinking. It&#8217;s the mechanism of how we think.</p><div><hr></div><p>I keep hearing a version of the same fear about AI: <em>if AGI can do this, what&#8217;s left for us?</em></p><p>It&#8217;s a reasonable thing to wonder. If a sufficiently powerful system can produce better design, better writing, better research than any individual human, what does the human add?</p><p>The chair answers this.</p><p>We didn&#8217;t stop designing chairs when mass manufacturing made them cheap and available to everyone. We didn&#8217;t stop when ergonomics research told us exactly what the &#8220;optimal&#8221; seated position was. We won&#8217;t stop when AI can generate ten thousand chair variations in the time it takes a human designer to sketch one.</p><p><strong>Because the chair was never purely about the chair.</strong> It&#8217;s about the conversation a designer is having with the culture they live in. It&#8217;s about the material someone discovered last year that suggests a new form. It&#8217;s about a reaction against what came before, a new idea about what a home should feel like, a problem that didn&#8217;t exist until five minutes ago.</p><p>AGI doesn&#8217;t end that conversation. Nothing ends that conversation. It&#8217;s not a problem to be solved. It&#8217;s an expression of what we are.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OOtY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OOtY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OOtY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OOtY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OOtY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OOtY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a1c25ec-b289-4ffe-adca-9230f4441db4_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;:816286,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/188827921?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OOtY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OOtY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OOtY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OOtY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a1c25ec-b289-4ffe-adca-9230f4441db4_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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The things we keep returning to, the things we never declare finished, are the ones that carry human meaning. Not just utility. Meaning. The chair has to sit right and look right and feel like it belongs in <em>this</em> moment, in <em>this</em> room, to <em>this</em> person. That&#8217;s not a specification you can freeze. It evolves because we evolve.</p><p>The fear of AI replacing human creativity assumes creativity is a function being performed. Something with inputs and outputs that a better system could run more efficiently.</p><p>But standing in that museum, looking at a hundred years of chairs that were each, in their moment, a definitive statement about what a chair should be, I don&#8217;t think that&#8217;s what&#8217;s happening. What I was looking at was evidence of something relentless and unresolvable in us. The drive to keep asking the question, even after you&#8217;ve answered it.</p><p>That doesn&#8217;t go away with better tools. It goes faster.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fv7G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fv7G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fv7G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fv7G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fv7G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fv7G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_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;:552438,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/188827921?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fv7G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fv7G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fv7G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fv7G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bdd281c-bf94-4b22-81c8-a3cb7c78ed0c_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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We&#8217;ll still be designing chairs in fifty years. They&#8217;ll look nothing like what we have now. <strong>Some of them will be made with AI, some of them will be made in reaction to AI, some of them will be made by designers who can&#8217;t explain why they made the choices they made except that it felt right.</strong></p><p>And someone, somewhere, will be standing in a museum looking at all of them, wondering the same thing I wondered.</p><p>Why are we still doing this?</p><p>And the answer will still be: because we can&#8217;t help it. Because that&#8217;s the point.</p>]]></content:encoded></item><item><title><![CDATA[Five Objections to AI I Keep Hearing (And What I Actually Think)]]></title><description><![CDATA[The concerns I think are overstated, and the two I think are real]]></description><link>https://www.actionpotential.co/p/five-objections-to-ai-i-keep-hearing</link><guid isPermaLink="false">https://www.actionpotential.co/p/five-objections-to-ai-i-keep-hearing</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Tue, 17 Feb 2026 16:24:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gc7b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gc7b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gc7b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png 424w, https://substackcdn.com/image/fetch/$s_!gc7b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png 848w, https://substackcdn.com/image/fetch/$s_!gc7b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png 1272w, https://substackcdn.com/image/fetch/$s_!gc7b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gc7b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png" width="926" height="1273" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1273,&quot;width&quot;:926,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1104937,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/188217140?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gc7b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png 424w, https://substackcdn.com/image/fetch/$s_!gc7b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png 848w, https://substackcdn.com/image/fetch/$s_!gc7b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.png 1272w, https://substackcdn.com/image/fetch/$s_!gc7b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec958fda-482c-433b-bff9-33cfdfb77f6e_926x1273.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rose Tinted, Sara Naim</figcaption></figure></div><p>I had a conversation with two friends over the weekend. One works in journalism, the other in design. Both smart, thoughtful people. Neither is anti-technology. But when AI came up, the objections poured out. Electricity. Creativity. Centralized power. Thinking. War.</p><p>I&#8217;ve heard versions of these objections many times now. From friends, from other founders, from strangers on the internet. Some of them I think are overstated. A couple of them keep me up at night.</p><p>Here&#8217;s where I land on each one.</p><h2>1. Electricity and the Environment</h2><p>This is the most common objection I hear, and the one I think is most overstated relative to the actual data.</p><p>Yes, data centers use a lot of electricity. And yes, that number is growing fast. But &#8220;a lot&#8221; needs context. Data centers currently account for about <a href="https://www.iea.org/energy-system/buildings/data-centres-and-data-transmission-networks">1-1.5% of global electricity consumption</a>, projected to reach roughly 3% by 2030. Transport, by comparison, accounts for about <a href="https://www.iea.org/reports/energy-efficiency-2025/transport">30% of global energy demand</a>. Industry consumes another <a href="https://www.iea.org/reports/global-energy-review-2025/electricity">~40% of electricity demand growth</a>. The sectors that are genuinely hard to decarbonize dwarf AI&#8217;s energy footprint by an order of magnitude.</p><p>That doesn&#8217;t mean the concern is irrelevant. Energy use is growing, and the trajectory matters. But I think the medium-term calculus is fairly clear: AI is already being deployed to optimize energy grids, accelerate materials science for better batteries, improve agricultural efficiency, and model climate systems with higher fidelity than we&#8217;ve ever had. These aren&#8217;t theoretical applications. They&#8217;re happening now. The IEA estimates that widespread adoption of AI in end-use sectors could deliver <a href="https://www.iea.org/reports/energy-and-ai/ai-and-climate-change">1,400 megatons of CO2 reductions by 2035</a>, three to four times larger than projected data center emissions over the same period.</p><p>The net energy impact of AI over a 10-year horizon is almost certainly positive. The World Economic Forum published a <a href="https://www.weforum.org/stories/2025/12/net-positive-ai-energy-2030/">framework for &#8220;net-positive AI energy&#8221;</a> specifically arguing this point, with data across 130+ real-world use cases. The short-term costs are real but manageable, and they&#8217;re the kind of problem that engineers and policy makers know how to solve. We&#8217;ve done this before. Every major computing revolution came with an energy conversation. The internet was supposed to consume unsustainable amounts of power. It did consume more power. And then efficiency gains, renewable energy deployment, and better hardware brought the cost curve down.</p><p>I&#8217;d bet the same pattern plays out here.</p><h2>2. Creativity Is Dead</h2><p>This one comes up a lot in my conversations with designers and writers. The fear is that AI-generated content is going to flood every channel with mediocre remixes until nothing feels original anymore.</p><p>I get the concern. But I think it misreads history.</p><p>Every new creative medium has triggered this exact reaction. Photography was supposed to kill painting. Film was supposed to kill theater. Synthesizers were supposed to kill music. Auto-tune was supposed to kill singing. Photoshop was supposed to kill photography. In every single case, the medium got absorbed, the best creators adapted, and the bar for what counted as compelling work shifted.</p><p>That&#8217;s already happening with AI. I&#8217;m seeing creative people lean in and produce work that wouldn&#8217;t have been possible six months ago. New visual styles. New ways of combining mediums. Entirely new creative workflows where the human is directing, curating, and shaping output in ways that feel genuinely novel.</p><p>And for the concern about social media becoming &#8220;fake,&#8221; I&#8217;d push back gently: most of social media was already heavily processed before AI entered the picture. Photoshopped images, filtered videos, ghost-written captions. We already lived in a world of manufactured content. AI gives us more tools, but the underlying dynamic of seeking authenticity and real storytelling was happening regardless. The creators who connect with audiences have always been the ones who feel real. That hasn&#8217;t changed.</p><p>The real shift isn&#8217;t that creativity is dying. It&#8217;s that the barrier to producing decent creative output is dropping to near zero. Which means the thing that differentiates great work from mediocre work is taste, perspective, and editorial judgment. Those are deeply human qualities. If anything, they become more valuable, not less.</p><h2>3. Deep Thinking and Rote Work</h2><p>A friend asked me: &#8220;If AI does all the work, what happens to our ability to think?&#8221;</p><p>It&#8217;s a fair question. There&#8217;s real cognitive science behind the idea that struggling through difficult work builds mental capacity. If you never do the hard thing yourself, you might lose the ability to do it at all.</p><p>But I think this frames it wrong.</p><p>Steve Jobs called the computer <a href="https://www.themarginalian.org/2011/12/21/steve-jobs-bicycle-for-the-mind-1990/">&#8220;a bicycle for the mind&#8221;</a>, inspired by a <em>Scientific American</em> study showing that a human on a bicycle was the most efficient species on the planet in terms of locomotion. The computer removed some of the manual drudgery of calculation and organization, and it freed people to think about harder problems. The calculator did the same thing a generation earlier. Nobody argues that calculators made us worse at math in the ways that matter. They made arithmetic less central and freed us to focus on higher-order mathematical thinking.</p><p>AI is a motorcycle for the mind. It&#8217;s faster, more powerful, and covers more ground. And the question it raises is the same one every previous tool raised: where are you going?</p><p>If you use AI to avoid thinking entirely, that&#8217;s a problem. If you use it as a thought partner, a sparring partner that challenges your assumptions and helps you iterate faster on ideas, it sharpens your thinking. I experience this every day. My best thinking happens in conversation with AI, not because it thinks for me, but because it forces me to articulate what I actually believe and then stress-tests it.</p><p>The real risk isn&#8217;t that AI replaces thinking. It&#8217;s that people choose not to think. But that&#8217;s a human discipline problem, not a technology problem. The people who ground themselves in clear principles, who know what questions they&#8217;re trying to answer, who use AI to go deeper rather than to avoid depth entirely, they&#8217;re going to be dramatically more capable than they were before.</p><p>I&#8217;ll acknowledge that the pace of change makes people nervous. That&#8217;s legitimate. We&#8217;re adapting to a new tool faster than we&#8217;ve adapted to any tool before. But the adaptation pattern is the same: figure out what to delegate, figure out what to own, and lean into the parts that require your judgment.</p><h2>4. Centralization of Power</h2><p>This is where my concerns start to get real.</p><p>The economics of AI are concentrating an extraordinary amount of capability in a very small number of companies. Training frontier models <a href="https://epoch.ai/blog/how-much-does-it-cost-to-train-frontier-ai-models">costs hundreds of millions of dollars</a>, with costs growing at roughly 2.4x per year since 2016 and projected to exceed $1 billion by 2027. The compute infrastructure requires billions more. The talent pool is small and getting smaller relative to demand. The result is that a handful of companies, mostly in one country, are building the systems that will increasingly mediate how knowledge work, creative work, and even governance gets done.</p><p>That&#8217;s concerning on its own. Mix in geopolitics, and it gets more concerning.</p><p>McKinsey estimates that generative AI could add <a href="https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/the-economic-potential-of-generative-ai-the-next-productivity-frontier">$2.6 to $4.4 trillion annually</a> to the global economy, with roughly 75% of that value concentrating in just four functional areas. The IMF projects that <a href="https://www.imf.org/en/Blogs/Articles/2024/01/14/ai-will-transform-the-global-economy-lets-make-sure-it-benefits-humanity">40-60% of jobs in advanced economies will be affected</a> by AI. That value is going to flow disproportionately to the companies that own the models and the infrastructure. If you&#8217;re a small country without sovereign AI capability, you&#8217;re essentially renting your cognitive infrastructure from a foreign corporation. The leverage dynamics there are uncomfortable.</p><p>This is where I see real hope in open source. Open-weight models like Llama, Mistral, DeepSeek, and others are creating an alternative path where capability isn&#8217;t locked behind a single provider. Countries and organizations can run models on their own infrastructure, fine-tune them for their own needs, and maintain some degree of sovereignty over their AI stack.</p><p>But open source alone isn&#8217;t enough. This requires active policy work. Data sovereignty frameworks. Investment in domestic compute infrastructure. Serious thinking about how the economic gains from AI get distributed rather than concentrated. These aren&#8217;t problems that the market will solve on its own. The default trajectory is more concentration, not less.</p><p>I&#8217;ve <a href="https://www.actionpotential.co/p/from-the-trenches-five-pillars-for">written about this in the context of Canada&#8217;s AI strategy</a>, and I think every country needs to be having this conversation. The window for shaping how power gets distributed is now. Once the infrastructure is built and the dependencies are locked in, it becomes much harder to unwind.</p><h2>5. AI in War</h2><p>This is the one that genuinely scares me.</p><p>We already saw what drones did to the calculus of armed conflict. Research from the University of Michigan Press documents how combat drones <a href="https://press.umich.edu/Books/D/Drones-and-Support-for-the-Use-of-Force">reduce the political costs of military action</a> by eliminating military casualties and increasing perceived precision. Politicians who would have faced massive domestic opposition for deploying troops can deploy drones with minimal public scrutiny. As one <a href="https://www.tandfonline.com/doi/full/10.1080/01402390.2019.1643329">study put it</a>: &#8220;to the degree that substituting machines for humans lowers the costs for fighting, conflict will become more frequent, but less definitive.&#8221;</p><p>Now extend that logic to autonomous systems. If the entire apparatus of conflict can be largely automated, what does the threshold for going to war look like? If there&#8217;s no body bag count, no grieving families on the evening news, no political cost at all, what restraint remains?</p><p>We&#8217;ve already seen early versions of this play out. Israel&#8217;s <a href="https://www.972mag.com/lavender-ai-israeli-army-gaza/">Lavender and Gospel AI systems</a> have been used to generate thousands of targeting recommendations in Gaza, with human reviewers reportedly spending <a href="https://www.theguardian.com/world/2024/apr/03/israel-gaza-ai-database-hamas-airstrikes">as little as 20 seconds</a> per target before approving strikes. The Pentagon&#8217;s <a href="https://arxiv.org/html/2405.01859v2">Replicator program</a> is developing AI-powered weapon swarms designed for highly autonomous operations. The line between &#8220;AI-assisted&#8221; and &#8220;AI-directed&#8221; military action is getting blurry, and the pace of deployment is outrunning the pace of governance.</p><p>I don&#8217;t have a clean answer here. I think this is genuinely one of the hardest problems of our generation. The technology exists. Multiple nations are developing it. And the incentive structures push toward deployment, not restraint.</p><p>What I&#8217;ll say is this: the conversation about AI in warfare needs to be happening with the same urgency as the conversation about nuclear proliferation. In December 2024, the <a href="https://www.stopkillerrobots.org/news/161-states-vote-against-the-machine-at-the-un-general-assembly/">UN General Assembly voted 166-to-8</a> to adopt a resolution on lethal autonomous weapons systems. That&#8217;s a start. But resolutions without enforcement mechanisms are paper shields. The potential for AI to lower the barrier to conflict, to enable asymmetric warfare at unprecedented scale, and to remove the human judgment that has historically served as a check on escalation is real and immediate. This isn&#8217;t a hypothetical risk for 2035. It&#8217;s a 2026 problem.</p><h2>Where I Net Out</h2><p>Three of these objections, electricity, creativity, and thinking, I believe are transition costs. Real, but manageable. The pattern of every previous technological revolution suggests we&#8217;ll adapt, and the benefits will substantially outweigh the disruption.</p><p>Two of them, centralized power and AI in warfare, I believe are genuinely existential. Not because the technology itself is inherently dangerous, but because the human systems for governing it are not keeping pace.</p><p>I&#8217;m optimistic about AI. I&#8217;m building with it every day. But optimism without honesty about the risks is just salesmanship. The people dismissing every concern are as wrong as the people who think we should stop building entirely.</p><p>The honest position is somewhere in the middle: lean in, build thoughtfully, and fight like hell on the governance questions that actually matter.</p><div><hr></div><h3>References</h3><ol><li><p><strong>IEA</strong> - <a href="https://www.iea.org/energy-system/buildings/data-centres-and-data-transmission-networks">Data Centres and Data Transmission Networks</a> - Data centers account for ~1-1.5% of global electricity, projected to reach ~3% by 2030.</p></li><li><p><strong>IEA</strong> - <a href="https://www.iea.org/reports/energy-efficiency-2025/transport">Energy Efficiency 2025: Transport</a> - Transport accounts for ~30% of global energy demand.</p></li><li><p><strong>IEA</strong> - <a href="https://www.iea.org/reports/energy-and-ai/ai-and-climate-change">AI and Climate Change</a> - AI could deliver 1,400 Mt CO2 reductions by 2035, 3-4x projected data center emissions.</p></li><li><p><strong>World Economic Forum</strong> - <a href="https://www.weforum.org/stories/2025/12/net-positive-ai-energy-2030/">Net-Positive AI Energy by 2030</a> - Framework arguing AI-enabled savings can exceed AI&#8217;s energy consumption.</p></li><li><p><strong>The Marginalian</strong> - <a href="https://www.themarginalian.org/2011/12/21/steve-jobs-bicycle-for-the-mind-1990/">Steve Jobs: Bicycle for the Mind (1990)</a> - Original PBS/NOVA interview where Jobs explains the analogy.</p></li><li><p><strong>Epoch AI</strong> - <a href="https://epoch.ai/blog/how-much-does-it-cost-to-train-frontier-ai-models">How Much Does It Cost to Train Frontier AI Models?</a> - Training costs growing 2.4x/year, projected to exceed $1B by 2027.</p></li><li><p><strong>McKinsey</strong> - <a href="https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/the-economic-potential-of-generative-ai-the-next-productivity-frontier">The Economic Potential of Generative AI</a> - $2.6-4.4T annual economic potential, 75% concentrated in four areas.</p></li><li><p><strong>IMF</strong> - <a href="https://www.imf.org/en/Blogs/Articles/2024/01/14/ai-will-transform-the-global-economy-lets-make-sure-it-benefits-humanity">AI Will Transform the Global Economy</a> - 40% of global jobs affected, 60% in advanced economies.</p></li><li><p><strong>Walsh &amp; Schulzke</strong> - <a href="https://press.umich.edu/Books/D/Drones-and-Support-for-the-Use-of-Force">Drones and Support for the Use of Force</a> - Research on how drones reduce political costs of military action.</p></li><li><p><strong>Gartzke</strong> - <a href="https://www.tandfonline.com/doi/full/10.1080/01402390.2019.1643329">Blood and Robots: Remotely Piloted Vehicles and the Politics of Violence</a> - &#8220;Conflict will become more frequent, but less definitive.&#8221;</p></li><li><p><strong>+972 Magazine</strong> - <a href="https://www.972mag.com/lavender-ai-israeli-army-gaza/">Lavender: The AI Machine Directing Israel&#8217;s Bombing Spree in Gaza</a> - Investigation into Israel&#8217;s AI targeting systems.</p></li><li><p><strong>The Guardian</strong> - <a href="https://www.theguardian.com/world/2024/apr/03/israel-gaza-ai-database-hamas-airstrikes">Israel Used AI to Identify 37,000 Hamas Targets</a> - Human reviewers spent ~20 seconds per AI-generated target.</p></li><li><p><strong>Bajak et al.</strong> - <a href="https://arxiv.org/html/2405.01859v2">AI-Powered Autonomous Weapons Risk Geopolitical Instability</a> - Pentagon&#8217;s Replicator program and autonomous weapon swarms.</p></li><li><p><strong>Stop Killer Robots / UN GA</strong> - <a href="https://www.stopkillerrobots.org/news/161-states-vote-against-the-machine-at-the-un-general-assembly/">166 States Vote to Adopt LAWS Resolution</a> - December 2024 UN vote on lethal autonomous weapons regulation.</p></li></ol>]]></content:encoded></item><item><title><![CDATA[The $0 Creative Department]]></title><description><![CDATA[How we built a full ad pipeline, from image generation to Meta deployment, with AI and 200 lines of Python]]></description><link>https://www.actionpotential.co/p/the-0-creative-department</link><guid isPermaLink="false">https://www.actionpotential.co/p/the-0-creative-department</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Tue, 10 Feb 2026 20:47:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HQ4I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HQ4I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HQ4I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HQ4I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HQ4I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HQ4I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HQ4I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Summer Salad, In the style of Matisse&quot;,&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="Summer Salad, In the style of Matisse" title="Summer Salad, In the style of Matisse" srcset="https://substackcdn.com/image/fetch/$s_!HQ4I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HQ4I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HQ4I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HQ4I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe16d9d-1ed2-43f1-9b8a-ac26fa809228_1024x1024.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Summer Salad, in the style of Matisse</figcaption></figure></div><p>At <a href="https://alma.food">Alma</a>, we&#8217;re a small team. We don&#8217;t have a creative department. We don&#8217;t have a media buyer. For most of our existence, we didn&#8217;t run paid ads at all.</p><p>In less than a day, we shipped 13 carousel ad campaigns (10 educational advertorials and 3 geo-targeted city guides) totaling 116 carousel cards, each linking to a fully designed landing page with original copy, structured data for SEO, and scroll-depth analytics. The whole pipeline, from concept to live ads, took about two hours per batch.</p><p>No dedicated designer. No copywriter. No agency. No Canva.</p><p>This isn&#8217;t a story about AI replacing jobs. It&#8217;s a story about what becomes possible when the barrier between &#8220;idea&#8221; and &#8220;live campaign&#8221; drops to near zero.</p><h2>The Old Way Was Expensive Enough to Kill Ideas</h2><p>Before this, our ad workflow looked like most early-stage startups:</p><ol><li><p>Have an idea for a campaign</p></li><li><p>Brief a designer (or open Figma yourself)</p></li><li><p>Write copy in a Google Doc</p></li><li><p>Export assets in 4 different aspect ratios</p></li><li><p>Upload to Meta Ads Manager manually</p></li><li><p>Build a landing page (or worse, send traffic to your homepage)</p></li><li><p>Wait days. Repeat.</p></li></ol><p>The real cost wasn&#8217;t money. It was activation energy. Most campaign ideas died in step 2 because the effort-to-test ratio was absurd. You&#8217;d spend a week building something to discover it doesn&#8217;t convert, then start over.</p><p>We needed a system where the cost of testing an idea was close to zero.</p><h2>What We Actually Built</h2><p>The pipeline has four layers, each one a Python script or a React config file:</p><p><strong>1. Image Generation (Programmatic)</strong></p><p>We generate ad creative images programmatically. Not generic stock photos. Structured compositions with our brand system (colors, typography, layouts) applied automatically. For our city guide campaigns, each restaurant gets a card. For our advertorial campaigns, we generate cards around specific nutritional concepts. The visual language is consistent because it&#8217;s code, not a designer&#8217;s memory.</p><p><strong>2. Landing Pages (Config-Driven)</strong></p><p>Every landing page is a React component driven by a JSON-like config object. Want a new advertorial about the protein myth? Write a config with a title, sections, and a CTA. Want a city guide for San Francisco? Write a config with 10 restaurants, their descriptions, highlights, and links. The component handles layout, SEO meta tags, JSON-LD structured data, scroll tracking, and CTA analytics automatically.</p><p>Adding a new page is 15 minutes of writing content. Not design. Not code.</p><p><strong>3. Meta Ads API (Deployment Scripts)</strong></p><p>This is where it gets interesting. Instead of clicking through Ads Manager, we deploy campaigns programmatically:</p><ul><li><p>Create campaign with objective and budget</p></li><li><p>Create geo-targeted ad sets (SF residents see SF restaurants, NYC sees NYC)</p></li><li><p>Upload carousel card images via API</p></li><li><p>Build carousel creatives with UTM-tagged links</p></li><li><p>Create ads and attach them to ad sets</p></li><li><p>Activate or pause with a flag</p></li></ul><p>One Python script. Three cities. Fifteen carousel cards. Geo-targeting, conversion optimization, and budget allocation, all configured in code. Run it, and the ads are live.</p><p><strong>4. Analytics (Closed Loop)</strong></p><p>Every landing page tracks scroll depth, CTA clicks, and page views via PostHog. Every ad link carries UTM parameters that connect Meta spend to on-page behavior. We can see exactly which city, which carousel card, and which scroll depth led to a download.</p><h2>The Two-Hour Campaign</h2><p>Here&#8217;s what the city guide campaign looked like in practice:</p><p><strong>Hour 1:</strong> Write restaurant descriptions for SF, NYC, and LA. Ten restaurants per city. This was the bottleneck, and it was the <em>creative</em> bottleneck, not the <em>production</em> bottleneck. I guided the AI, fact-checked claims, adjusted tone, and shaped the editorial voice. The research, structuring, and first drafts were AI-assisted.</p><p><strong>Hour 2:</strong> Generate carousel images. Write the deploy script. Dry-run. Deploy. Push landing pages to production. Activate ads.</p><p>By the end, we had:</p><ul><li><p>3 SEO-optimized landing pages with 10 restaurants each</p></li><li><p>3 geo-targeted ad sets ($30/day each)</p></li><li><p>18 carousel cards with custom images (title + 4 restaurants + CTA per city)</p></li><li><p>Full analytics pipeline</p></li><li><p>JSON-LD structured data for Google rich results</p></li></ul><p>Total ad spend on creative production: $0.</p><p>But the city guides were just one campaign. Here&#8217;s everything we shipped with this pipeline: 13 carousel campaigns across two categories, all deployed the same way.</p><h2>Every Campaign We Shipped (With the Actual Ad Copy)</h2><p>All of these are live on Meta right now. Each one was conceived, designed, written, and deployed with the same pipeline described above. Title card, content cards, CTA card. All generated programmatically from our brand template system.</p><h3>Educational Carousels (10 campaigns)</h3><p>These use a swipeable format: a gallery-style title card, 7-9 content cards with data and images, and a closing CTA card. Every carousel links to a dedicated advertorial landing page.</p><div><hr></div><p><strong>1. What 2,000 Calories Looks Like</strong> - 9 cards, LEARN_MORE &#8594; <a href="https://alma.food/what-2000-looks-like">alma.food/what-2000-looks-like</a></p><blockquote><p>A Big Mac, fries, and a Coke = 2,000 calories. A full Mediterranean spread with fish, hummus, salad, fruit, and nuts = also 2,000 calories.</p><p>Same number. Wildly different plates.</p><p>Swipe to see what 2,000 calories actually looks like across 7 different eating styles.</p></blockquote><p>Cards: <em>Title &#8594; Fast Food (1 Meal) &#8594; Mediterranean (A Full Day) &#8594; &#8220;Healthy&#8221; Snacking &#8594; Japanese (Dozens of Dishes) &#8594; Pizza Night (3 Slices + Beer) &#8594; Indian Thali (A Feast) &#8594; Mindless Snacking &#8594; CTA</em></p><div><hr></div><p><strong>2. The Protein Myth</strong> - 9 cards, LEARN_MORE &#8594; <a href="https://alma.food/protein-myth">alma.food/protein-myth</a></p><blockquote><p>Granola: 4g protein per serving. Greek yogurt: 17g.</p><p>Almond milk: 1g per cup. Regular milk: 8g.</p><p>Most &#8220;high-protein&#8221; marketing is just marketing.</p><p>Swipe to see the real protein numbers behind 7 common foods.</p></blockquote><p>Cards: <em>Title &#8594; Granola (4g) &#8594; Peanut Butter (7g) &#8594; Quinoa (8g) &#8594; Almond Milk (1g) &#8594; Avocado (4g) &#8594; Protein Bar (10g) &#8594; Hummus (2g) &#8594; CTA</em></p><div><hr></div><p><strong>3. Guess the Calories</strong> - 10 cards, LEARN_MORE &#8594; <a href="https://alma.food/guess-the-calories">alma.food/guess-the-calories</a></p><blockquote><p>That a&#231;a&#237; bowl? 680 calories. The Caesar salad? 520. Your &#8220;healthy&#8221; green smoothie? 450.</p><p>Most people underestimate their food by 40-50%.</p><p>Swipe to see the real numbers. How close can you get?</p></blockquote><p>Cards: <em>Title &#8594; A&#231;a&#237; Bowl (680) &#8594; Caesar Salad (520) &#8594; Trail Mix (700) &#8594; Green Smoothie (450) &#8594; Sushi (850) &#8594; Avocado Toast (550) &#8594; Protein Bar (380) &#8594; Overnight Oats (580) &#8594; CTA</em></p><div><hr></div><p><strong>4. A Love Letter to Food</strong> - 10 cards, DOWNLOAD &#8594; App Store</p><blockquote><p>Bread is 10,000 years old and still the first thing we reach for.</p><p>Honey never spoils. Tomatoes were once thought poisonous. Half the planet eats rice every single day.</p><p>This isn&#8217;t about macros. It&#8217;s about the food itself.</p><p>For people who love food, not to restrict it, but to understand it.</p></blockquote><p>Cards: <em>Title &#8594; Dear Bread &#8594; Dear Eggs &#8594; Dear Rice &#8594; Dear Olive Oil &#8594; Dear Chocolate &#8594; Dear Tomato &#8594; Dear Honey &#8594; Dear Lemon &#8594; CTA</em></p><div><hr></div><p><strong>5. Meal Prep vs. Reality</strong> - 10 cards, DOWNLOAD &#8594; App Store</p><blockquote><p>The overnight oats you planned: layered, beautiful, art. The overnight oats you ate: gray mush from a jar while standing.</p><p>Both counted. Both were 380 calories.</p><p>Alma tracks what you actually eat, not the Pinterest version.</p><p>Swipe to see the plan vs. the reality.</p></blockquote><p>Cards: <em>Title &#8594; Chicken &amp; Quinoa (Plan) &#8594; Desk Lunch (Reality) &#8594; Overnight Oats (Plan) &#8594; Gray Mush (Reality) &#8594; Salmon Salad (Plan) &#8594; Sad Desk Salad (Reality) &#8594; Berry Smoothie (Plan) &#8594; Protein Shake (Reality) &#8594; CTA</em></p><div><hr></div><p><strong>6. The Protein Gap</strong> - 10 cards, LEARN_MORE &#8594; <a href="https://alma.food/the-protein-gap">alma.food/the-protein-gap</a></p><blockquote><p>An egg has 6g of protein. Not 15. A caf&#233; smoothie bowl? 9g. Not 30. Peanut butter toast? 7g. Not 15.</p><p>Most people overestimate protein in common foods by 2-3x.</p><p>Swipe to see how much protein is actually in your food.</p></blockquote><p>Cards: <em>Title &#8594; Egg (6g) &#8594; Yogurt Parfait (12g) &#8594; PB Toast (7g) &#8594; &#8220;Protein&#8221; Smoothie Bowl (9g) &#8594; Salmon Fillet (17g) &#8594; Quinoa Bowl (8g) &#8594; Hummus &amp; Pita (6g) &#8594; Chicken Breast (54g) &#8594; CTA</em></p><div><hr></div><p><strong>7. Hidden Sugar</strong> - 10 cards, LEARN_MORE &#8594; <a href="https://alma.food/hidden-sugar">alma.food/hidden-sugar</a></p><blockquote><p>Your oat milk latte? 28g of sugar. The granola? 24g. The a&#231;a&#237; bowl? 42g, more than a can of Coke.</p><p>WHO recommends under 25g of added sugar per day. Most people hit that before lunch.</p><p>Swipe to see where the sugar is hiding.</p></blockquote><p>Cards: <em>Title &#8594; Oat Milk Latte (28g) &#8594; Granola (24g) &#8594; A&#231;a&#237; Bowl (42g) &#8594; Flavored Greek Yogurt (19g) &#8594; Dried Mango (27g) &#8594; Kombucha (16g) &#8594; Teriyaki Bowl (22g) &#8594; Daily Total: 89g &#8594; CTA</em></p><div><hr></div><p><strong>8. The Serving Size Lie</strong> - 10 cards, LEARN_MORE &#8594; <a href="https://alma.food/serving-size-lie">alma.food/serving-size-lie</a></p><blockquote><p>A &#8220;serving&#8221; of cereal is 3/4 cup. Nobody pours that. A &#8220;serving&#8221; of ice cream is 2/3 cup. Three bites. A &#8220;serving&#8221; of peanut butter is 2 tbsp. A thin film.</p><p>If every serving is double, your 1,800-calorie day is actually 3,400.</p><p>Swipe to see the label vs. what you actually pour.</p></blockquote><p>Cards: <em>Title &#8594; Cereal (160 vs. 530) &#8594; Olive Oil (120 vs. 360) &#8594; Pasta (200 vs. 400) &#8594; Orange Juice (110 vs. 220) &#8594; Peanut Butter (190 vs. 380) &#8594; Ice Cream (230 vs. 520) &#8594; Chips (140 vs. 370) &#8594; Daily Gap: +1,630 &#8594; CTA</em></p><div><hr></div><p><strong>9. Invisible Calories</strong> - 10 cards, LEARN_MORE &#8594; <a href="https://alma.food/invisible-calories">alma.food/invisible-calories</a></p><blockquote><p>Handful of trail mix: 280 cal Afternoon latte: 190 cal Cheese while cooking: 210 cal Glass of wine: 150 cal &#8220;Just a bite&#8221; of the kid&#8217;s food: 130 cal</p><p>Total: 1,175 calories of &#8220;nothing.&#8221;</p><p>Swipe to see the calories you&#8217;re not tracking.</p></blockquote><p>Cards: <em>Title &#8594; Trail Mix at Desk (280) &#8594; Afternoon Latte (190) &#8594; Dark Chocolate (120) &#8594; Cheese While Cooking (210) &#8594; Glass of Wine (150) &#8594; Spoonful of PB (95) &#8594; Kid&#8217;s Leftovers (130) &#8594; Total: 1,175 &#8594; CTA</em></p><div><hr></div><p><strong>10. Same Name, Different Calories</strong> - 10 cards, LEARN_MORE &#8594; <a href="https://alma.food/same-name-different-calories">alma.food/same-name-different-calories</a></p><blockquote><p>&#8220;Caesar salad&#8221; can be 380 or 1,150 calories. &#8220;Pad Thai&#8221; can be 400 or 1,100. &#8220;Turkey sandwich&#8221; can be 350 or 890.</p><p>The name on the menu tells you nothing about the nutrition.</p><p>Swipe to see how much the same dish can vary.</p></blockquote><p>Cards: <em>Title &#8594; Caesar Salad (380 vs. 1,150) &#8594; Burrito Bowl (410 vs. 980) &#8594; Margherita (550 vs. 1,200) &#8594; Pad Thai (400 vs. 1,100) &#8594; Salmon Bowl (450 vs. 920) &#8594; Smoothie Bowl (320 vs. 780) &#8594; Turkey Sandwich (350 vs. 890) &#8594; Average Gap: 594 &#8594; CTA</em></p><div><hr></div><h3>City Guide Carousels (3 campaigns, geo-targeted)</h3><p>Each city gets its own ad set targeted ONLY to people in that metro. Six cards per carousel: title card, four restaurants, CTA card. Each links to a long-form advertorial landing page with the full top-10 list, SEO structured data, and scroll tracking.</p><div><hr></div><p><strong>11. San Francisco</strong> - 6 cards, geo: SF only &#8594; <a href="https://alma.food/healthy-restaurants-san-francisco">alma.food/healthy-restaurants-san-francisco</a></p><blockquote><p>San Francisco has some of the best healthy restaurants in the country.</p><p>From Greens, the vegetarian pioneer with Golden Gate views, to Nopa&#8217;s organic wood-fired kitchen sourcing from 20+ local farms.</p><p>We put together a guide to the 10 best healthy restaurants in SF. Swipe to see our picks.</p></blockquote><p>Cards: <em>Title &#8594; Greens (Fort Mason) &#8594; Nopa (North Panhandle) &#8594; Beloved Caf&#233; (Mission) &#8594; Blue Barn (Marina) &#8594; CTA</em></p><div><hr></div><p><strong>12. New York City</strong> - 6 cards, geo: NYC only &#8594; <a href="https://alma.food/healthy-restaurants-nyc">alma.food/healthy-restaurants-nyc</a></p><blockquote><p>NYC&#8217;s healthy restaurant scene goes way beyond sad desk salads.</p><p>From Eleven Madison Park&#8217;s plant-based fine dining to Dirt Candy&#8217;s mind-bending vegetable tasting menus, healthy food in NYC is actually some of the most exciting food in the city.</p><p>Here are the 10 best healthy restaurants in New York. Swipe to explore.</p></blockquote><p>Cards: <em>Title &#8594; Eleven Madison Park (Flatiron) &#8594; abcV (Flatiron) &#8594; Dirt Candy (Lower East Side) &#8594; Avant Garden (East Village) &#8594; CTA</em></p><div><hr></div><p><strong>13. Los Angeles</strong> - 6 cards, geo: LA only &#8594; <a href="https://alma.food/healthy-restaurants-la">alma.food/healthy-restaurants-la</a></p><blockquote><p>LA practically invented the wellness-dining movement.</p><p>From Crossroads Kitchen, the vegan restaurant that convinced skeptics, to Destroyer, where a 2-Michelin-starred chef makes avocado toast into fine art.</p><p>Here are the 10 best healthy restaurants in LA. Swipe to see our picks.</p></blockquote><p>Cards: <em>Title &#8594; Crossroads Kitchen (Melrose) &#8594; Destroyer (Culver City) &#8594; Caf&#233; Gratitude (Venice) &#8594; Gracias Madre (WeHo) &#8594; CTA</em></p><div><hr></div><p><strong>Total: 13 campaigns. 116 carousel cards. 13 landing pages. $0 in creative production.</strong></p><h2>What This Changes for Early-Stage Teams</h2><p>The implication isn&#8217;t &#8220;fire your designer.&#8221; It&#8217;s more fundamental than that.</p><p><strong>1. You can test 10x more ideas.</strong></p><p>When the cost of going from idea to live ad is two hours and zero dollars, you stop debating which campaign to run. You run all of them. The bad ones die fast. The good ones get budget. This is how a two-person team competes with a company that has a media buying agency.</p><p><strong>2. The landing page IS the ad.</strong></p><p>Most startups send ad traffic to their homepage and wonder why conversion is low. When you can spin up a purpose-built landing page for every campaign in minutes, every ad gets a dedicated destination. Our city guides aren&#8217;t selling Alma directly. They&#8217;re providing genuine value (a restaurant guide) with a soft CTA. The content does the selling.</p><p><strong>3. Iteration is instant.</strong></p><p>Our SF guide started with 4 restaurants. Feedback said &#8220;make it a top 10.&#8221; Twenty minutes later, it was a top 10: researched, written, deployed, and live. Try asking an agency for that turnaround.</p><p><strong>4. The code is the brand guideline.</strong></p><p>When your creative pipeline is code, consistency is automatic. Colors, typography, spacing, tone. They&#8217;re constants in a file, not a PDF that nobody reads. Every new campaign inherits the brand system by default.</p><h2>What Still Requires a Human</h2><p>Let me be honest about where AI falls short in this pipeline:</p><p><strong>Editorial judgment.</strong> AI can research and draft restaurant descriptions. It cannot tell you that Greens Restaurant&#8217;s story about being recognized by the New York Times is the detail that makes the copy compelling. That&#8217;s taste.</p><p><strong>Strategic direction.</strong> The decision to build geo-targeted city guides aimed at health-conscious diners in specific metros: that&#8217;s strategy. AI didn&#8217;t suggest that. We had a hypothesis about local intent and built a fast way to test it.</p><p><strong>Brand voice.</strong> Every piece of copy got edited. Not rewritten. Edited. The difference between AI-generated marketing copy and copy that sounds like your brand is usually 15 minutes of a human with opinions.</p><p><strong>Quality control.</strong> Are these restaurants still open? Is the Michelin star current? Does the website link work? AI gets you 90% there. The last 10% is checking.</p><h2>The Stack</h2><p>For anyone who wants to build something similar:</p><ul><li><p><strong>Landing pages:</strong> React + Vite, config-driven components, deployed via Git push</p></li><li><p><strong>Image generation:</strong> Python scripts with Pillow/HTML rendering</p></li><li><p><strong>Ad deployment:</strong> Facebook Business SDK (<code>facebook-business</code> Python package)</p></li><li><p><strong>Analytics:</strong> PostHog for page events, UTM parameters for attribution</p></li><li><p><strong>Content:</strong> Claude for research and drafting, human for editing and judgment</p></li><li><p><strong>Hosting:</strong> Vercel (or similar) with instant deploys</p></li></ul><p>The total codebase for the ad pipeline is maybe 1,500 lines of Python across the deploy scripts. The landing page component is ~250 lines of React. The config for each campaign is ~100 lines of JavaScript. The image generation (title/CTA cards and content cards) adds another ~500 lines.</p><h2>The Takeaway</h2><p>The most expensive part of marketing at an early-stage startup isn&#8217;t ad spend. It&#8217;s the time between having an idea and knowing if it works.</p><p>We didn&#8217;t build an AI marketing department. We built a pipeline that makes the distance between &#8220;what if we tried...&#8221; and &#8220;here&#8217;s the data&#8221; as short as possible.</p><p>The ads are running. The landing pages are live. Thirteen campaigns, three cities, ten advertorial concepts. If the city guides don&#8217;t convert, we&#8217;ll know by Friday and try something else by Saturday. If &#8220;Invisible Calories&#8221; outperforms &#8220;The Protein Myth,&#8221; we&#8217;ll shift budget in an hour.</p><p>That&#8217;s the actual unlock. Not cheaper creative. Faster learning.</p><div><hr></div><p><em>Curious about what we&#8217;re building? <a href="https://alma.food/">Alma</a> is an AI nutrition coach that actually remembers you. Free to start.</em></p>]]></content:encoded></item><item><title><![CDATA[Building a Coach That Remembers You]]></title><description><![CDATA[Shipping personalized AI without giving it a script]]></description><link>https://www.actionpotential.co/p/building-a-coach-that-remembers-you</link><guid isPermaLink="false">https://www.actionpotential.co/p/building-a-coach-that-remembers-you</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Tue, 03 Feb 2026 05:34:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wZKp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wZKp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wZKp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wZKp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wZKp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wZKp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wZKp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg" width="1456" height="1077" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1077,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Etel Adnan - The New York Times&quot;,&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="Etel Adnan - The New York Times" title="Etel Adnan - The New York Times" srcset="https://substackcdn.com/image/fetch/$s_!wZKp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wZKp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wZKp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wZKp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb257efd3-9b05-4c8f-9341-0dde0203a712_1622x1200.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Untitled, 2012, Etel Adnan</figcaption></figure></div><p>At <a href="https://alma.food">Alma</a>, we&#8217;re on a mission to build the best AI nutrition coach. But a coach that doesn&#8217;t know you is just a chatbot with opinions. Tracking is the foundation, and last year, we hit a wall.</p><p>Users loved the natural language experience. But as we scaled, the cracks showed. The same user might say &#8220;my usual smoothie&#8221; on Monday and &#8220;the green one I had yesterday&#8221; on Tuesday. They&#8217;d track &#8220;chicken stir fry&#8221; and expect Alma to remember the exact recipe they described three weeks ago.</p><p>Our food logging system learned to handle this (we shipped that story <a href="https://www.actionpotential.co/p/shipping-a-multi-agent-system-to">here</a>). But knowing what you eat is only half the battle. The other half? A coach who actually remembers your journey.</p><h2>The Problem with Generic AI Coaching</h2><p>Before we rebuilt the coaching system, every conversation started from scratch:</p><ul><li><p>Users re-explained their preferences (&#8221;I&#8217;m vegan, remember?&#8221;)</p></li><li><p>The AI gave generic advice (&#8221;aim for 0.8g protein per pound&#8221;)</p></li><li><p>No continuity between conversations</p></li><li><p>No proactive engagement based on patterns</p></li></ul><p>It felt like meeting a new nutritionist every time you opened the app. Not because the AI was &#8220;dumb&#8221; - but because we hadn&#8217;t given it the right structure to be helpful.</p><h2>The Core Insight: Map Preferences to Frameworks</h2><p>Our breakthrough came from nutrition psychology research, not prompt engineering.</p><p>We studied evidence-based coaching methodologies:</p><ul><li><p>Precision Nutrition (John Berardi, PhD)</p></li><li><p>Intuitive Eating (Evelyn Tribole &amp; Elyse Resch)</p></li><li><p>Motivational Interviewing in Nutrition</p></li><li><p>Solution-Focused Brief Therapy</p></li><li><p>Behavioral Science (Katy Milkman)</p></li></ul><p>Then we identified two key axes that determined coaching style:</p><ol><li><p><strong>Nutrition experience</strong>: How much do they already know?</p></li><li><p><strong>Feedback style</strong>: How do they want to receive coaching?</p></li></ol><p>This created nine coaching combinations. Each maps to specific research-backed approaches.</p><p><strong>Example: Same data, three different voices</strong></p><p>User logged 6 out of 7 days this week:</p><p><em>Beginner + Celebratory:</em> &#8220;You logged 6 days in a row - that&#8217;s building a real habit! What helped you stay consistent?&#8221;</p><p><em>Experienced + Tactical:</em> &#8220;6/7 days logged. You&#8217;re building momentum. One strategy: set a phone reminder for the day you typically miss.&#8221;</p><p><em>Knowledgeable + Exploratory:</em> &#8220;Your 6/7 logging pattern is solid. Research shows consistency trumps perfection for long-term behavior change. What made the difference between the days you tracked vs the one you didn&#8217;t?&#8221;</p><p>The magic: Users set their preferences once. Every interaction adapts automatically.</p><h2>Three Coaching Experiences</h2><p>We didn&#8217;t build one monolithic chatbot. We built three specialized modes:</p><h3>1. Weekly Check-ins (Proactive Coaching)</h3><p>Every Sunday, the coach reviews your week and sends a personalized check-in. Not generic &#8220;great job!&#8221; messages - specific observations about YOUR patterns.</p><p>It looks at your data, identifies what&#8217;s working and what isn&#8217;t, sets a measurable focus for the week, and creates an opening message that feels like someone spent time with your data.</p><p><strong>User impact</strong>: You wake up Sunday to coaching that feels personal, not algorithmic.</p><h3>2. Nutrition Q&amp;A (On-Demand Intelligence)</h3><p>When you ask questions, the coach combines:</p><ul><li><p>Your actual meal data</p></li><li><p>Curated nutrition research</p></li><li><p>Your stated goals</p></li></ul><p>The result: Evidence-based answers grounded in YOUR context.</p><p>Ask &#8220;How&#8217;s my protein?&#8221; and you get your protein trend visualization plus analysis based on your muscle gain goal and eating patterns - not generic advice from a textbook.</p><h3>3. Natural Conversations (Follow-ups)</h3><p>The coach remembers the conversation. No re-explaining context.</p><p>Sunday: &#8220;Your protein was inconsistent this week...&#8221; Tuesday: &#8220;How&#8217;s protein going?&#8221; Response: &#8220;Since Sunday, you&#8217;ve hit your goal 2/2 days. That&#8217;s the consistency we&#8217;re looking for.&#8221;</p><h2>Memory Without Conversation Logs</h2><p>Here&#8217;s the thing about AI: it doesn&#8217;t actually &#8220;remember&#8221; anything. Context windows don&#8217;t span weeks.</p><p>Our solution: structured memory.</p><p>After every weekly review, the coach saves:</p><ul><li><p>Specific observations (numbers, patterns, dates)</p></li><li><p>What worked and what didn&#8217;t</p></li><li><p>Recommendations given</p></li></ul><p>Next week, it reads its own notes. Just like a human nutritionist would.</p><p><strong>Result</strong>: Week-over-week continuity that feels natural.</p><p>&#8220;Last month I noticed you ate less on weekends. You&#8217;ve improved - now only 100 cal below average vs 500 before.&#8221;</p><h2>Show Progress, Not Spinners</h2><p>We rethought how AI responses should feel.</p><p>Traditional approach: User asks &#8594; Spinner &#8594; Wall of text</p><p>Our approach: User asks &#8594; &#8220;Analyzing your protein intake...&#8221; &#10003; &#8594; Graph appears &#8594; Analysis continues</p><p>When you ask &#8220;How are my macros?&#8221;, you see:</p><ol><li><p>Brief context</p></li><li><p>Graph visualization (appears inline)</p></li><li><p>Personalized analysis</p></li></ol><p>The system orchestrates UI elements, not just text. When it accesses data, visualizations appear at the right moment in the response.</p><p>Users tolerate latency when they see progress. The experience feels interactive, not like waiting for a slow website.</p><h2>Evidence-Based, Not Generic</h2><p>Generic AI gives generic nutrition advice. We built something different.</p><p>When you ask a nutrition question, the system:</p><ol><li><p>Finds relevant research articles and excerpts</p></li><li><p>Analyzes your personal data</p></li><li><p>Synthesizes both into a response</p></li></ol><p><strong>Example</strong>: User (vegetarian): &#8220;Should I take iron supplements?&#8221;</p><p>The coach checks your iron intake from food logs, retrieves research on plant-based iron absorption, considers your dietary preferences, and responds with personalized guidance that references both your data and scientific sources.</p><p>This isn&#8217;t &#8220;retrieve and regurgitate&#8221; - it&#8217;s synthesis.</p><h2>Shipping It: Test Kitchen to Production</h2><p><strong>Phase 1: Test Kitchen</strong> We dogfooded it ourselves and with early supporters for weeks. Found critical bugs, built confidence in the system, and learned what actually mattered to users.</p><p><strong>Phase 2: Fast Feedback Loops</strong> Thumbs down feedback went straight to our inbox. Not buried in a dashboard. Bug reports often got fixed same-day.</p><p>What we learned: Speed matters more than perfection. Users forgave early issues because we fixed them fast.</p><h2>What We Learned</h2><h3>1. Personalization &#8800; Bigger Models</h3><p>We spent more time on the coaching methodology framework than model selection. The right structure beats raw intelligence every time.</p><h3>2. Context Windows &#8800; Memory</h3><p>Real memory is structured, not conversational transcripts. Save observations, not logs.</p><h3>3. Evidence-Based &gt; Generic</h3><p>Grounding responses in research frameworks (Precision Nutrition, Intuitive Eating, etc.) made the coaching feel authoritative. Users trust science + data, not &#8220;AI opinions.&#8221;</p><h3>4. Show Progress, Not Spinners</h3><p>Streaming with visible progress increases perceived speed dramatically. Users tolerate latency when they see work happening.</p><h3>5. Dogfood Relentlessly</h3><p>Internal use caught most critical issues before they reached users. Build for yourself first.</p><h3>6. Ship Gradually, Watch Obsessively</h3><p>Gradual rollout let us catch issues at small scale. Kill switches gave us confidence to move fast.</p><h3>7. Fail Gracefully</h3><p>When the system can&#8217;t answer perfectly, it acknowledges limitations. Partial answers beat cryptic errors.</p><h2>What&#8217;s Next</h2><p>We&#8217;re live with all premium users. Weekly coaching runs automatically every Sunday. Conversations feel natural and contextual.</p><p>Coming improvements:</p><ul><li><p>Proactive pattern detection between check-ins</p></li><li><p>Multi-modal coaching (image-based feedback)</p></li><li><p>Deeper goal management capabilities</p></li></ul><p>The vision: A coach that knows you better than you know yourself. Not because it&#8217;s &#8220;smarter,&#8221; but because it pays attention to patterns you miss.</p><h2>The Takeaway</h2><p>We didn&#8217;t build a chatbot with nutrition opinions. We built a coach that:</p><ul><li><p>Adapts its voice without prompting</p></li><li><p>Remembers your journey through structured notes</p></li><li><p>Shows you data inline, not descriptions</p></li><li><p>Grounds advice in research frameworks</p></li></ul><p><strong>The key insight</strong>: Personalization at scale isn&#8217;t about prompt engineering or bigger models.</p><p>It&#8217;s about:</p><ol><li><p>Mapping user preferences to evidence-based frameworks</p></li><li><p>Building structured memory, not conversation logs</p></li><li><p>Showing progress and data inline as responses stream</p></li><li><p>Failing gracefully when uncertain</p></li></ol><p>Users say it feels like having a personal nutritionist. That&#8217;s not because we built smarter AI - it&#8217;s because we built better architecture around the AI.</p><p>The difference between a chatbot and a coach isn&#8217;t intelligence. It&#8217;s memory, structure, and knowing when to stay silent.</p><div><hr></div><p><em>Curious to try this out? <a href="https://alma.food/">Download Alma</a> and try the premium tier.</em></p>]]></content:encoded></item><item><title><![CDATA[Consuming Davos in 30 Minutes: An Experiment in AI-Assisted Information Synthesis]]></title><description><![CDATA[How I used Anthropic's Opus 4.5 to watch 243 videos I didn't have time for, and what it taught me about the future of knowledge consumption]]></description><link>https://www.actionpotential.co/p/consuming-davos-in-30-minutes-an</link><guid isPermaLink="false">https://www.actionpotential.co/p/consuming-davos-in-30-minutes-an</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 26 Jan 2026 17:38:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jFem!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jFem!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jFem!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png 424w, https://substackcdn.com/image/fetch/$s_!jFem!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png 848w, https://substackcdn.com/image/fetch/$s_!jFem!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png 1272w, https://substackcdn.com/image/fetch/$s_!jFem!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jFem!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png" width="724" height="514.71875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:455,&quot;width&quot;:640,&quot;resizeWidth&quot;:724,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;r/RetroFuturism - Builders of Lunograd (Moon-city in Russian)&quot;,&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="r/RetroFuturism - Builders of Lunograd (Moon-city in Russian)" title="r/RetroFuturism - Builders of Lunograd (Moon-city in Russian)" srcset="https://substackcdn.com/image/fetch/$s_!jFem!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png 424w, https://substackcdn.com/image/fetch/$s_!jFem!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png 848w, https://substackcdn.com/image/fetch/$s_!jFem!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.png 1272w, https://substackcdn.com/image/fetch/$s_!jFem!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63e44e00-96e1-436c-9dd5-2b2e1ec1a30a_640x455.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Builders of Lunograd by Andrei Sokolov</figcaption></figure></div><p>I watched exactly one session from Davos 2026 in full: <a href="https://www.youtube.com/watch?v=02YLwsCKUww">Dario Amodei and Demis Hassabis discussing &#8220;The World After AGI.&#8221;</a> It was fascinating, two of the most important people in AI, disagreeing politely about timelines while agreeing that everything is about to change.</p><p>But here&#8217;s the thing: the World Economic Forum uploaded 243 videos from this year&#8217;s meeting. At an average of 15-20 minutes each, that&#8217;s roughly 60-80 hours of content. I don&#8217;t have 60 hours. I have a company to run, a product to ship, users to support.</p><p>This is the fundamental tension of our information age. The content that matters keeps growing. Our time doesn&#8217;t. For years, we&#8217;ve dealt with this through curation, letting algorithms or editors decide what&#8217;s worth our attention. But curation means missing things. It means trusting someone else&#8217;s judgment about what matters to <em>you</em>.</p><p>So I ran an experiment. What if AI could help me consume all of Davos, not by summarizing it into meaninglessness, but by creating a structured synthesis I could actually engage with?</p><p>Here&#8217;s what happened.</p><h2>The Setup</h2><p>The goal was simple: extract, synthesize, and analyze every significant discussion from Davos 2026. Not summaries. Not bullet points. A comprehensive document that captured who said what, where they agreed, where they disagreed, and what predictions they made.</p><p>The tools:</p><ul><li><p><strong>Claude Opus 4.5</strong> (via Cursor)</p></li><li><p><strong>yt-dlp</strong> for transcript extraction</p></li><li><p><strong>Python</strong> for automation</p></li><li><p><strong>About 15 minutes</strong> of my time, spread across an evening</p></li></ul><p>The process unfolded in four phases.</p><h2>Phase 1: Acquisition</h2><p>First, I needed the transcripts. YouTube auto-generates captions for most videos, and the official WEF playlist had everything in one place.</p><p>I asked Opus 4.5 to write a Python script that would:</p><ol><li><p>Pull all video IDs from the WEF 2026 playlist</p></li><li><p>Extract transcripts using YouTube&#8217;s auto-generated captions</p></li><li><p>Clean up the VTT format (timestamps, duplicates, HTML artifacts)</p></li><li><p>Save each transcript as a markdown file with metadata</p></li></ol><p>The first version didn&#8217;t work. YouTube&#8217;s transcript API has quirks. The script failed silently on videos without English captions. The VTT parser left duplicate lines everywhere.</p><p>Here&#8217;s what the raw output looked like initially:</p><pre><code><code>And our next guest is on the front lines
And our next guest is on the front lines
And our next guest is on the front lines
of the AI revolution. Joining us right
</code></code></pre><p>Classic auto-caption stuttering. Every phrase repeated 2-3 times as the speech recognition refined its guess.</p><p>Opus 4.5 iterated. Added deduplication logic. Implemented yt-dlp as a fallback. Cleaned HTML entities. After three rounds of debugging, the script worked:</p><pre><code><code># Parse VTT format - deduplicate lines
lines = []
seen_lines = set()

for line in content.split('\n'):
    line = line.strip()
    # Skip headers, timestamps, and empty lines
    if not line or line.startswith('WEBVTT') or '--&gt;' in line:
        continue

    # Clean HTML tags and entities
    line = re.sub(r'&lt;[^&gt;]+&gt;', '', line)
    line = line.replace('&amp;gt;', '&gt;').replace('&amp;lt;', '&lt;')

    if line and line not in seen_lines:
        seen_lines.add(line)
        lines.append(line)
</code></code></pre><p><strong>Result: 243 transcripts, totaling roughly 500,000 words of content.</strong></p><h2>Phase 2: Synthesis</h2><p>Now the interesting part. I had half a million words of raw transcripts. I needed structure.</p><p>My prompt to Opus 4.5 was deliberately open-ended:</p><blockquote><p>&#8220;Review all of them in extreme detail and present a synthesis document that&#8217;s detailed and lists out key topics discussed, different positions proposed and forecasts, who said what on each topic.&#8221;</p></blockquote><p>Opus 4.5 began reading transcripts in batches. Not skimming, actually processing the content and building a structured document. The synthesis emerged organically:</p><p><strong>Major themes identified:</strong></p><ul><li><p>AI timelines and capabilities (AGI predictions from Amodei, Hassabis, Musk)</p></li><li><p>The collapse of the international order (Carney, Merz, Zelenskyy)</p></li><li><p>The Greenland crisis (unified European rejection of Trump&#8217;s demands)</p></li><li><p>Energy constraints on AI (Musk&#8217;s solar thesis)</p></li><li><p>Job displacement and transformation (IMF data, Dimon&#8217;s predictions)</p></li><li><p>Middle East dynamics (Qatar PM on Gaza, Iran)</p></li><li><p>European defense and unity (von der Leyen, Macron, Merz)</p></li></ul><p>What struck me was the <em>disagreements</em> Opus 4.5 surfaced. This is what summaries usually lose. The tension. The debate. The places where smart people look at the same facts and reach different conclusions.</p><h2>Phase 3: Probability Analysis</h2><p>Here&#8217;s where it got interesting. I asked Opus 4.5 to do something unusual:</p><blockquote><p>&#8220;Analyze each position and assign probabilities yourself based on your knowledge of human history and tech development.&#8221;</p></blockquote><p>Opus 4.5 searched the web for current data, IEA reports on solar deployment, IMF forecasts, expert surveys on AGI timelines, SpaceX&#8217;s actual progress on rocket reusability. Then it produced probability assessments:</p><p><strong>High Confidence (&gt;75% likely):</strong></p><ul><li><p>40-60% of jobs affected by AI (85-95%)</p></li><li><p>US-China AI duopoly persisting (85-95%)</p></li><li><p>Full SpaceX rocket reusability by 2026 (70-85%)</p></li></ul><p><strong>Medium Confidence (40-75%):</strong></p><ul><li><p>AGI by end of decade (55-65%)</p></li><li><p>Humanoid robots for sale by 2027 (60-75%)</p></li></ul><p><strong>Low Confidence (&lt;40%):</strong></p><ul><li><p>AGI by 2026-2027 (25-35%)</p></li><li><p>Ukraine war ending in 2026 (20-30%)</p></li><li><p>Gaza Phase 2 success (25-40%)</p></li></ul><p><strong>Very Low Confidence (&lt;15%):</strong></p><ul><li><p>More robots than people by 2031 (5-15%)</p></li><li><p>US acquiring Greenland (2-5%)</p></li></ul><p>The reasoning mattered more than the numbers. On Musk&#8217;s prediction of &#8220;more robots than people by 2031&#8221;:</p><blockquote><p>&#8220;Global population: ~8 billion. Current global humanoid deployment: ~2,500. Even with 52% CAGR projected, reaching 8 billion by 2031 would require manufacturing capacity that doesn&#8217;t exist.&#8221;</p></blockquote><p>On AGI timelines:</p><blockquote><p>&#8220;Musk has a track record of aggressive timelines (Full Self-Driving was promised for 2017, 2018, 2019, 2020...). However, expert surveys show median predictions have collapsed from 50 years to ~5 years.&#8221;</p></blockquote><p>This isn&#8217;t Opus 4.5 having opinions. It&#8217;s Opus 4.5 synthesizing available evidence and being explicit about uncertainty. That&#8217;s more useful than false confidence.</p><h2>The Output</h2><p>The final synthesis document runs about 1,000 lines. It includes:</p><ol><li><p><strong>Executive Summary</strong> - Key takeaways in one page</p></li><li><p><strong>16 Thematic Sections</strong> - Deep dives on AI, geopolitics, economics, energy, healthcare</p></li><li><p><strong>Speaker Directory</strong> - Who said what, with their positions and affiliations</p></li><li><p><strong>Prediction Tables</strong> - Every forecast, organized by timeline and topic</p></li><li><p><strong>Agreement/Disagreement Matrix</strong> - Where leaders aligned and diverged</p></li><li><p><strong>Probability Analysis</strong> - Independent assessment of each major prediction</p></li><li><p><strong>Methodology</strong> - How the synthesis was created</p></li></ol><h2>What This Taught Me</h2><h3>1. AI doesn&#8217;t replace consumption&#8212;it changes what consumption means</h3><p>I didn&#8217;t &#8220;watch&#8221; 243 videos. But I engaged with their content more deeply than I would have by skimming headlines or reading summaries written by journalists with their own editorial angles.</p><p>The synthesis preserved nuance. It captured disagreements. It let me drill into specific topics (I spent 20 minutes reading the full Middle East section after the synthesis flagged it as significant).</p><p>This is a new mode of information consumption. Not passive watching. Not algorithmic curation. Active synthesis with AI as a research partner.</p><h3>2. The bottleneck shifted from access to attention</h3><p>I could have watched all 243 videos. They&#8217;re free. They&#8217;re on YouTube. The constraint was never access, it was attention.</p><p>AI doesn&#8217;t give me more hours. It gives me leverage on the hours I have. The 30 minutes I spent on this experiment yielded more insight than 30 minutes of watching random sessions would have.</p><h3>3. Transparency matters more than ever</h3><p>The synthesis document includes methodology. It shows which transcripts were analyzed. It explains how probabilities were calculated. It cites sources.</p><p>This matters because AI-generated content can be confidently wrong. The only defense is transparency about process. If you can&#8217;t see how a conclusion was reached, you can&#8217;t evaluate whether to trust it.</p><h3>4. Human judgment is still the bottleneck</h3><p>Opus 4.5 did the heavy lifting. But I chose what to ask. I decided which threads to pull. I evaluated whether the probability assessments made sense.</p><p>The experiment worked because I knew what I was looking for. &#8220;Synthesize Davos&#8221; is a meaningful prompt because I have context about why Davos matters and what kinds of insights would be useful.</p><p>AI amplifies human judgment. It doesn&#8217;t replace it.</p><h2>The Uncomfortable Question</h2><p>Here&#8217;s what I keep thinking about: what happens when everyone can do this?</p><p>Right now, this feels like a superpower. I have a comprehensive synthesis of Davos 2026 that probably doesn&#8217;t exist anywhere else. I can reference specific quotes, track disagreements between leaders, and evaluate predictions against historical base rates.</p><p>But the tools I used are available to anyone. Opus 4.5 is a subscription. yt-dlp is open source. The methodology is reproducible.</p><p>Within a few years, this kind of synthesis will be table stakes. The question becomes: what do you do with the synthesis? What actions does it inform? What decisions does it improve?</p><p>The value isn&#8217;t in having the information. It&#8217;s in knowing what to do with it.</p><h2>Try It Yourself</h2><p>If you want to replicate this experiment:</p><ol><li><p><strong>Pick a corpus</strong> - A conference, a podcast series, a set of earnings calls</p></li><li><p><strong>Extract transcripts</strong> - yt-dlp for YouTube, Whisper for audio files</p></li><li><p><strong>Prompt for synthesis, not summary</strong> - Ask for structure, disagreements, predictions</p></li><li><p><strong>Request probability assessments</strong> - Force the model to evaluate claims against evidence</p></li><li><p><strong>Iterate on gaps</strong> - Ask follow-up questions about areas that seem thin</p></li></ol><p>The whole process took about 60 minutes of active time, plus overnight processing. The output was a 1,000-line document that would have taken weeks to produce manually.</p><p>That&#8217;s the trade-off we&#8217;re all navigating now. Not whether to use AI for knowledge work, but how to use it well.</p><div><hr></div><h2>Appendix: Key Findings from Davos 2026</h2><p><em>For those who want the conclusions without the methodology:</em></p><h3>AGI Timeline Consensus</h3><p>The most striking finding was the convergence among AI leaders on near-term AGI:</p><ul><li><p><strong>Dario Amodei (Anthropic):</strong> 2026-2027</p></li><li><p><strong>Elon Musk (xAI):</strong> End of 2026 or early 2027</p></li><li><p><strong>Demis Hassabis (DeepMind):</strong> End of the decade (more conservative)</p></li></ul><p>My probability assessment: <strong>25-35% for 2026-2027, 55-65% by end of decade</strong></p><h3>The Collapse of International Order</h3><p>Multiple leaders declared the post-Cold War rules-based order &#8220;over&#8221;:</p><ul><li><p><strong>Mark Carney:</strong> &#8220;This is a rupture, not a transition&#8221;</p></li><li><p><strong>Friedrich Merz:</strong> &#8220;The international order as we knew it is unraveling&#8221;</p></li><li><p><strong>Zelenskyy:</strong> Called Europe&#8217;s response &#8220;Groundhog Day&#8221;</p></li></ul><p>My probability assessment: <strong>75-85% that US-led order is collapsing</strong> (this is already observable)</p><h3>Energy as AI&#8217;s Binding Constraint</h3><p>Elon Musk&#8217;s most interesting prediction wasn&#8217;t about robots, it was about power:</p><blockquote><p>&#8220;Chip production will exceed electrical power capacity by late 2026... The constraint on AI is not chips, it&#8217;s electricity.&#8221;</p></blockquote><p>He noted China is deploying 1,000+ GW of solar annually while the West falls behind.</p><p>My probability assessment: <strong>75-85% that energy becomes the primary AI bottleneck</strong></p><h3>Job Transformation Scale</h3><p>The IMF presented sobering data:</p><ul><li><p>40% of global jobs affected by AI</p></li><li><p>60% in advanced economies</p></li><li><p>Low-wage workers 14x more likely to need occupational changes</p></li></ul><p>Jamie Dimon predicted fewer JPMorgan employees in 5 years.</p><p>My probability assessment: <strong>85-95% that 40-60% of jobs are affected</strong> (note: &#8220;affected&#8221; &#8800; &#8220;eliminated&#8221;)</p><h3>European Defense Surge</h3><p>In response to Trump&#8217;s pressure and the Ukraine war:</p><ul><li><p>Germany committing to 5% GDP defense spending (up from 2%)</p></li><li><p>&#8364;90B EU support package for Ukraine</p></li><li><p>New trade deals (Mercosur, India negotiations)</p></li></ul><p>My probability assessment: <strong>30-40% that Europe actually reaches 5%</strong> (historically, commitments exceed delivery)</p>]]></content:encoded></item><item><title><![CDATA[Shipping a Multi-Agent System to Production Without Breaking Everything]]></title><description><![CDATA[How we rebuilt our core food logging system and rolled it out to 100% of users in two months]]></description><link>https://www.actionpotential.co/p/shipping-a-multi-agent-system-to</link><guid isPermaLink="false">https://www.actionpotential.co/p/shipping-a-multi-agent-system-to</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 19 Jan 2026 18:31:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xe-N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xe-N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xe-N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xe-N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xe-N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xe-N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xe-N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg" width="905" height="522" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:522,&quot;width&quot;:905,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Khaldoun Chichakli, Old Damascus Sunset in Derwichieh Street, 2000, Watercolor on paper, 28.2 x 44.5 cm&quot;,&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="Khaldoun Chichakli, Old Damascus Sunset in Derwichieh Street, 2000, Watercolor on paper, 28.2 x 44.5 cm" title="Khaldoun Chichakli, Old Damascus Sunset in Derwichieh Street, 2000, Watercolor on paper, 28.2 x 44.5 cm" srcset="https://substackcdn.com/image/fetch/$s_!xe-N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xe-N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xe-N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xe-N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccff52c2-bfa6-4e36-ac42-73767b515661_905x522.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Khaldoun Chichakli, <em>Old Damascus Sunset in Derwichieh Street</em>, 2000</figcaption></figure></div><p>At <a href="https://alma.food">Alma</a>, we&#8217;re on a mission to build the best AI nutrition coach. But a coach that doesn&#8217;t know what you&#8217;re eating is just a chatbot with opinions. Tracking is the foundation, and last year, we hit a wall.</p><p>Users loved the natural language experience. &#8220;Two eggs and a banana for breakfast&#8221; beats tapping through databases. But as we scaled, the cracks showed. The same user might say &#8220;my usual smoothie&#8221; on Monday and &#8220;the green one I had yesterday&#8221; on Tuesday. They&#8217;d track &#8220;chicken stir fry&#8221; and expect Alma to remember the exact recipe they described three weeks ago. They wanted a system that felt like a personal nutritionist who&#8217;d been working with them for years.</p><p>Our original system couldn&#8217;t do this. It was good at parsing text into food items. It wasn&#8217;t good at understanding context, history, or the messy reality of how people actually talk about food.</p><p>So we rebuilt it from scratch. This post isn&#8217;t about the architecture of the new system. It&#8217;s about how we shipped it without breaking everything.</p><h2>The Problem with Shipping AI</h2><p>We were going to be making a change to the core flow in our app, food logging. We couldn&#8217;t just flip a switch. We couldn&#8217;t just flip a switch.</p><p>The challenge: how do you know if a fuzzy, subjective system is actually better? Users don&#8217;t file bug reports when their chicken breast shows 165 calories instead of 185. They just quietly lose trust.</p><p>Our north star was <strong>correction-free logs</strong>: the percentage of tracked foods where users made no changes. If someone logs &#8220;chicken breast&#8221; and doesn&#8217;t edit the result, we assume we got it right.</p><p>Obviously 100% is impossible. People change their minds. They realize they had 6 ounces, not 4. But the rate tells us something, and the <em>types</em> of corrections tell us more.</p><h2>Phase 1: The Test Kitchen</h2><p>Before any real users saw the new system, we built a &#8220;Test Kitchen&#8221; feature flag. Internal team members and a handful of early supporters could opt into the new system while everyone else stayed on the old one.</p><p>We used it obsessively. Every meal, every day. When something broke (and things broke horribly in the early days) we caught it before it touched real users.</p><p>The bugs we found in Test Kitchen would have been disasters in production:</p><ul><li><p>Cloning the wrong meal when users had similar-named items</p></li><li><p>Creating recipes with absurd ingredient quantities (2000g of salt)</p></li><li><p>Unit conversion failures that turned a cup of rice into a kilogram</p></li></ul><p>Each bug became a test case. By the time we started the real rollout, we had hundreds of edge cases covered.</p><h2>Phase 2: The Gradual Rollout</h2><p>Once Test Kitchen felt stable, we started routing production traffic:</p><p><strong>Week 1</strong>: 10% of requests to the new system <strong>Week 2</strong>: 25% <strong>Week 3</strong>: 50% <strong>Week 4</strong>: 75% <strong>Week 5</strong>: 100%</p><p>At each stage, we monitored obsessively. We built a feedback system that could dial up or down. After any food log, users might see a simple thumbs up/down toast. We kept the frequency low enough to avoid annoyance but high enough for statistical significance.</p><p>The key was having kill switches at every level. If something went wrong, we could dial back to 0% in seconds.</p><h2>Phase 3: The Automated Auditor</h2><p>This is where it gets interesting.</p><p>We built a cron job that runs every three hours. It uses Anthropic&#8217;s Claude Opus 4.5 to audit everything that happened since the last run:</p><ol><li><p><strong>New food records</strong>: Identifies impossible nutrition values (&gt;900 cal/100g for non-fats), all-zero entries, macro-to-calorie mismatches, and data entry typos</p></li><li><p><strong>Serving data</strong>: Catches decimal placement errors where 118g gets entered as 1.18g (a 100x error that would destroy calorie accuracy)</p></li><li><p><strong>User corrections</strong>: Analyzes large edits to understand if users are fixing legitimate data issues that should propagate back to source data</p></li><li><p><strong>A/B test comparison</strong>: Tracks performance differences between the old and new systems during the rollout</p></li></ol><p>The auditor doesn&#8217;t just report. It acts. High-confidence issues (&gt;90% confidence) get auto-fixed. Questionable ones get flagged for human review. Every Monday, I get a summary email with the week&#8217;s findings.</p><p>Here&#8217;s what the decision model looks like:</p><ul><li><p><strong>keep</strong>: Food data is correct</p></li><li><p><strong>soft_delete</strong>: Food data is clearly wrong and should be removed</p></li><li><p><strong>fix</strong>: Food data can be corrected automatically</p></li><li><p><strong>review</strong>: Uncertain, needs human verification</p></li></ul><p>The conservative thresholds matter. Auto-delete only happens at 95% confidence. We&#8217;d rather flag something for review than silently corrupt user data.</p><h2>What the Auditor Caught</h2><p>During the rollout, the auditor surfaced issues we never would have found manually:</p><p><strong>Dry vs. cooked values</strong>: The system was sometimes returning nutrition for dry rice instead of cooked rice. 350 calories vs 130 calories for the same portion. The auditor detected the pattern and we fixed the underlying logic.</p><p><strong>Decimal drift in servings</strong>: A batch of food servings had reference ratios off by 10x due to a unit conversion bug. The auditor caught it within 3 hours and auto-fixed 47 records before users noticed.</p><p><strong>Systematic overcounting</strong>: One edge case in recipe handling was consistently adding 15-20% extra calories. The auditor&#8217;s calorie distribution analysis flagged the anomaly.</p><p>The automation wasn&#8217;t about removing humans from the loop. It was about making sure humans saw the right things at the right time. I didn&#8217;t need to manually review 10,000 food logs. I needed to see the 12 that looked suspicious.</p><h2>The Feedback Loop</h2><p>Thumbs-down feedback with text comments went straight to my inbox. Not to a queue. Not to a dashboard I&#8217;d check weekly. My inbox.</p><p>This created urgency. When someone wrote &#8220;this is way off, I had a small salad not 800 calories,&#8221; I saw it within minutes. Often I could trace the issue, fix it, and deploy before the user&#8217;s next meal.</p><p>The tight loop changed how we thought about bugs. They weren&#8217;t tickets to be prioritized. They were problems affecting real people right now.</p><h2>The Numbers</h2><p>The whole process, from first commit to 100% rollout, took about two months. In my previous life at larger companies, a change to a core flow like this would have been a multi-quarter-long effort.</p><p>What made it fast:</p><ol><li><p><strong>Dogfooding</strong>: Using it ourselves daily meant we felt problems before we measured them</p></li><li><p><strong>Automated auditing</strong>: The three-hour cycle meant issues surfaced in hours, not days</p></li><li><p><strong>Gradual rollout with kill switches</strong>: We could dial back instantly if something went wrong</p></li><li><p><strong>Tight feedback loops</strong>: Thumbs down to my inbox to fix deployed, often within hours</p></li></ol><p>The new system now handles 100% of food logging. Correction-free rates are up. More importantly, the types of queries that used to fail (temporal references, complex recipes, modifications to previous meals) now work.</p><h2>Lessons for Shipping AI</h2><p>If you&#8217;re building AI systems that touch user data:</p><p><strong>Instrument everything from day one.</strong> We couldn&#8217;t have done the gradual rollout without feature flags that let us route traffic precisely. Build this infrastructure before you need it.</p><p><strong>Automate the audit, not the judgment.</strong> The LLM auditor surfaces issues. Humans decide what to do about edge cases. The 90% confidence threshold for auto-fix exists because we&#8217;d rather be slow and right than fast and wrong.</p><p><strong>Make feedback painful.</strong> Routing complaints to my inbox instead of a dashboard created accountability. When you feel the friction of user problems, you fix them faster.</p><p><strong>Correction-free rate is a lagging indicator.</strong> By the time you see it drop, users have already had bad experiences. Watch leading indicators: error rates, unusual values, processing times.</p><p><strong>Ship incrementally, monitor obsessively.</strong> 10% traffic for a week tells you more than a month of internal testing. Real users do things you never imagined.</p><p>The auditor cron job is still running. Every three hours, it checks our work. Most runs find nothing. But when they find something, we know within hours instead of weeks.</p><p>That&#8217;s the difference between shipping AI and shipping AI responsibly.</p>]]></content:encoded></item><item><title><![CDATA[Simulating Months of Coaching in Minutes]]></title><description><![CDATA[Testing AI behavior before it reaches real users]]></description><link>https://www.actionpotential.co/p/simulating-months-of-coaching-in</link><guid isPermaLink="false">https://www.actionpotential.co/p/simulating-months-of-coaching-in</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Thu, 15 Jan 2026 15:47:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NIkc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NIkc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NIkc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NIkc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NIkc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NIkc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NIkc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg" width="1200" height="900" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:900,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Contemporain Syrian art Safwan Dahoul -Blog Graphiste, Sculptures, Photos,  Ver et Vie&quot;,&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="Contemporain Syrian art Safwan Dahoul -Blog Graphiste, Sculptures, Photos,  Ver et Vie" title="Contemporain Syrian art Safwan Dahoul -Blog Graphiste, Sculptures, Photos,  Ver et Vie" srcset="https://substackcdn.com/image/fetch/$s_!NIkc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NIkc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NIkc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NIkc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb460acb-31df-4404-a506-24eb3bbeb2c6_1200x900.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Safwan Dahoul - Syrian painter - Acrylic on canvas</figcaption></figure></div><p>I built something fun this week: a simulation that stress-tests our AI nutrition coach across different user types over weeks of interactions. Compressed into minutes.</p><p>At Alma, we&#8217;ve learned there&#8217;s no universal approach to coaching. Some users want data and optimization. Others need encouragement and low-pressure nudges. The promise of AI is adapting to each one. But how do you know if it actually does?</p><p><strong>The Setup</strong></p><p>Six synthetic users, each representing a pattern from our real data. The Optimizer who logs religiously and asks technical questions. The Struggler who engages sporadically and needs celebration over metrics. The Weekend Warrior whose tracking falls apart every Saturday.</p><p>Each persona interacts with our coach daily. Logs meals. Receives weekly check-ins. Responds based on their personality. Four simulated weeks, about 20 minutes of runtime.</p><p><strong>What Broke</strong></p><p>The coach was excellent at pattern recognition. It spotted that one user was eating 500 calories under target. Mentioned it week one. And week two. And week three. Same observation, no escalation.</p><p>It could see the problem. It never pushed to solve it.</p><p>Another user had a weight loss goal but muscle gain in their profile. The coach noticed the tension. Mentioned it repeatedly. Never resolved it.</p><p>Classic middle-manager behavior. Flag issues, don&#8217;t own solutions.</p><p><strong>The Fix</strong></p><p>The changes weren&#8217;t smarter models or better prompts. They were operational:</p><p><em>If the same issue appears two weeks in a row, change your approach. Don&#8217;t observe&#8212;propose action.</em></p><p><em>If goal and profile contradict for more than two weeks, force the conversation.</em></p><p>Escalation logic. The kind of thing you&#8217;d put in a manager&#8217;s expectations, not a software spec.</p><p><strong>Why This Matters</strong></p><p>When building products involving psychology and behavior, you used to ship and wait. Run A/B tests. Iterate slowly.</p><p>Now you can build synthetic users from real patterns and watch months unfold before anything goes live. The simulation won&#8217;t catch everything. But it catches obvious issues that would take weeks of production data to surface.</p><p>If you&#8217;re building something similar, I&#8217;d be curious to compare notes.</p><div><hr></div><h2><strong>Technical Details</strong></h2><p>For those interested in building something similar, here&#8217;s how the system works under the hood.</p><p><strong>The Stack</strong></p><ul><li><p><strong>Coach Agent</strong>: Built with PydanticAI, a framework for building production AI agents with type safety and dependency injection. The agent has ~40 tools for reading user data, adjusting goals, scheduling check-ins, and generating personalized content.</p></li></ul><ul><li><p><strong>Coach Model</strong>: Claude Opus 4.5 via AWS Bedrock. We chose Opus for the weekly reviews because they require nuanced pattern recognition across days of data and personalized communication that matches user preferences. The system prompt is around 1,800 lines covering tone, escalation rules, tool usage, and examples.</p></li></ul><ul><li><p><strong>User Simulator</strong>: Claude Sonnet 4.5 via the Anthropic API. Generates realistic food logs and check-in responses based on persona configurations. Sonnet is fast enough for the volume of interactions and good enough at roleplaying consistent personalities.</p></li></ul><ul><li><p><strong>Database</strong>: PostgreSQL via Supabase. The simulation writes real records (users, meals, food items, goals, streaks) so the coach agent queries actual data, not mocks.</p></li></ul><p><strong>Persona Architecture</strong></p><p>Each persona is a dataclass with ~20 parameters:</p><p>@dataclass</p><p>class PersonaConfig:</p><p> name: str</p><p> nutrition_experience: NutritionExperience <em># just_starting, some_experience, knowledgeable</em></p><p> feedback_style: FeedbackStyle <em># celebrate_wins, straight_to_point, deep_dives</em></p><p> engagement_level: float <em># 0.0-1.0, probability of logging any given day</em></p><p> weekend_drop: float <em># how much engagement drops on weekends</em></p><p> target_adherence: float <em># how close they stick to calorie goals</em></p><p> response_rate: float <em># probability of responding to coach check-ins</em></p><p> question_style: str <em># technical, emotional, practical</em></p><p><em># ... etc</em></p><p>The personas were derived from analyzing coaching preferences and engagement patterns in our production database. We queried users by feedback style, looked at their logging consistency, and built archetypes from the clusters.</p><p><strong>Simulation Flow</strong></p><ol><li><p>Create a test user in the database with the persona&#8217;s demographics and preferences</p></li></ol><ol><li><p>For each simulated week:</p></li></ol><ul><li><p>Generate 7 days of food logs based on persona&#8217;s engagement and eating patterns</p></li></ul><ul><li><p>Insert meals and food items into the database</p></li></ul><ul><li><p>Run the coach&#8217;s run_weekly_review() with a reference_date parameter (this was key&#8212;without it, the coach uses date.today() and all the date math breaks)</p></li></ul><ul><li><p>Fetch the coach&#8217;s outputs: review notes, scheduled check-ins, focus messages</p></li></ul><ul><li><p>Use Sonnet to generate user responses to each check-in based on persona</p></li></ul><ol><li><p>Generate a markdown report with all interactions</p></li></ol><p><strong>The Date Problem</strong></p><p>The trickiest part was time simulation. Our coach agent calls date.today() in about 15 places&#8212;for calculating week boundaries, scheduling check-ins, querying recent meals.</p><p>We added a reference_date parameter that propagates through the system:</p><p>async def run_weekly_review(</p><p><em>self</em>,</p><p><em>user_id</em>: UUID,</p><p><em>reference_date</em>: Optional[date] = None, <em># For simulations</em></p><p>) -&gt; CoachResult:</p><p> today = reference_date or date.today()</p><p><em># ... all date calculations use `today`</em></p><p>This lets you run a &#8220;weekly review&#8221; for any arbitrary date, and the coach sees the world as if that date were today.</p><p><strong>Runtime</strong></p><ul><li><p>4 weeks &#215; 1 persona &#8776; 4-5 minutes (mostly waiting on Opus)</p></li></ul><ul><li><p>4 weeks &#215; 6 personas &#8776; 25 minutes</p></li></ul><ul><li><p>Cost: roughly $3-5 per full simulation run</p></li></ul><p><strong>Output</strong></p><p>Each simulation produces:</p><ul><li><p>A JSON file with raw data (every meal, every check-in, every response)</p></li></ul><ul><li><p>A markdown report summarizing each week&#8217;s interactions</p></li></ul><ul><li><p>Aggregate metrics: engagement rate, streak length, check-in response rate</p></li></ul><p>The reports made it easy to spot patterns across personas. The Struggler got gentler messaging (good). The Optimizer got the same undereating observation four weeks in a row (bad).</p><p><strong>What&#8217;s Next</strong></p><p>The current system is manual, you run it when you want to test something. The interesting evolution is continuous simulation: a background process that periodically generates synthetic interactions based on recent user patterns and flags drift in coach behavior before real users experience it.</p><p>If you&#8217;re building agent simulations and want to compare approaches, reach out.</p>]]></content:encoded></item><item><title><![CDATA[Building Organizations, Not Software]]></title><description><![CDATA[The code you write is now an org chart]]></description><link>https://www.actionpotential.co/p/building-organizations-not-software</link><guid isPermaLink="false">https://www.actionpotential.co/p/building-organizations-not-software</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 15 Dec 2025 12:26:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0H8m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0H8m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0H8m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0H8m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0H8m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0H8m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0H8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg" width="1200" height="900" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:900,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Etel Adnan Captured the Light of Many Suns&quot;,&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="Etel Adnan Captured the Light of Many Suns" title="Etel Adnan Captured the Light of Many Suns" srcset="https://substackcdn.com/image/fetch/$s_!0H8m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0H8m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0H8m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0H8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc453d4f1-8dbe-4a4e-a71e-3dd1897dacc5_1200x900.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Etel Adnan, &#8220;Untitled&#8221; (2014), oil on canvas (&#169; ADAGP, Paris and DACS, London 2023; photo &#169; White Cube; photo by Jack Hems)</figcaption></figure></div><p>Six months into building with AI agents, you realize something strange. You&#8217;re not debugging code anymore. You&#8217;re having the same conversation you&#8217;d have about Sarah in accounting taking on too much, or whether the sales team&#8217;s process documentation has gotten out of control.</p><p>The software you&#8217;re building has started acting like a company. Not metaphorically. Literally. It has roles that need definition. Handoffs that break down. Documentation that bloats. Responsibilities that blur. Performance that varies by personality fit.</p><h2>When Your Prompts Become Employee Handbooks</h2><p>You start simple. One agent, one job, maybe 150 words of instructions. It works beautifully. Then you add features.</p><p>A month later, those instructions are 800 words. Three months after that, 2,000. By month six, you&#8217;re looking at a 3,500-word prompt with nested conditionals, historical notes about edge cases, and sections you&#8217;re afraid to delete because you can&#8217;t remember why they&#8217;re there.</p><p>This is the employee handbook problem. Every company starts with simple values and clear principles. Then reality intrudes. Someone makes a mistake, you add a policy. Five years in, nobody reads the handbook because it&#8217;s 400 pages of accumulated anxiety.</p><p>But here&#8217;s what makes it different with agents: you can actually fix it. Run an audit with a powerful model. Feed it your bloated prompt along with performance logs, and ask it to identify what&#8217;s redundant, what&#8217;s contradictory, what&#8217;s still relevant. Then have it rewrite the whole thing. Clean. Focused. Current.</p><p>The catch is testing. You need queries that represent what this agent actually does, edge cases included. Run the old prompt against them, run the new prompt, compare outputs. If the new version handles everything the old one did but with 1,200 words instead of 3,500, you ship it.</p><p>This is science fiction for anyone who&#8217;s managed real documentation. But with agents, you can do it in an afternoon. The discipline isn&#8217;t in the rewriting. It&#8217;s in knowing when to do it.</p><h2>The Moment You Need to Split the Team</h2><p>Your main agent was handling everything fine. Customer questions, product recommendations, order processing, basic troubleshooting. Then the quality starts slipping. Response times increase. Accuracy drops.</p><p>Your first instinct is capability. Better model, longer context window. But that&#8217;s like trying to make one person great at sales, engineering, and customer support simultaneously. The problem isn&#8217;t capability. It&#8217;s that doing it well requires different mindsets that don&#8217;t coexist easily.</p><p>So you split it. Customer service becomes three agents. One for questions, one for transactions, one for escalations. Each gets focused instructions, clear boundaries, better performance.</p><p>And immediately, you&#8217;ve created a new problem: who decides who does what? You need routing logic. Context handoffs. Escalation paths. Congratulations. You&#8217;ve just invented middle management.</p><p>It&#8217;s the orchestration layer, the routing service, the context manager. But it&#8217;s doing exactly what middle management does: making sure the right work gets to the right place, ensuring context doesn&#8217;t get lost, handling escalations when something doesn&#8217;t fit the normal flow.</p><p>The teams that get this right think about agent boundaries the way good organizations think about role definitions. Clear responsibilities. Obvious handoff points. Minimal overlap.</p><p>The teams that get it wrong create agent sprawl. Dozens of narrow agents with unclear boundaries and complex routing logic. It feels productive because you keep adding agents. But you&#8217;re not adding capability. You&#8217;re adding organizational complexity.</p><h2>Hiring Decisions Disguised as Technical Choices</h2><p>Which model do you use for which agent? In traditional software, this would be a technical question. Speed versus memory. Cost versus capability.</p><p>With agents, you&#8217;re making hiring decisions.</p><p>Some models are fast but sloppy. Others are slow and meticulous. Some are creative and surprising. Others are reliable and boring. None of these traits are better or worse. They&#8217;re different. And they fit different roles.</p><p>You wouldn&#8217;t put the fast-and-loose model in charge of financial calculations. You wouldn&#8217;t use the slow-and-perfect model for real-time chat. Not because they can&#8217;t technically do the job, but because their personalities don&#8217;t match what the role needs.</p><p>The best teams maintain role profiles. Not just &#8220;this agent does X,&#8221; but &#8220;this agent does X, and based on testing, it needs a model that&#8217;s conservative, verbose, and consistent even if it&#8217;s slower.&#8221;</p><p>Every choice is a tradeoff. The creative model that makes your content generation brilliant is the same one that sometimes goes completely sideways. You&#8217;re building a team. And team composition matters in ways that software composition never did.</p><h2>The Reorg You Can Actually Execute</h2><p>All these problems mirror organizational problems perfectly. But the solutions are completely different. Because unlike real organizations, you can actually fix this stuff.</p><p>Documentation bloated? Audit and rewrite it. Agent boundaries causing friction? Restructure. Model not fitting the role? Replace it. No six-month change management process. No HR involvement. Just test and deploy.</p><p>This is both the advantage and the trap. Real organizations develop stability because change is painful. That friction provides something valuable: time to learn what actually works.</p><p>When you can reorganize your agents every Tuesday, you might. And you&#8217;ll spend so much time optimizing structure that you never develop the institutional knowledge that comes from stability.</p><p>The teams doing this well aren&#8217;t the ones changing fastest. They&#8217;re the ones who&#8217;ve figured out when to restructure and when to let things settle.</p><h2>What This Actually Means</h2><p>We&#8217;re moving from building mechanisms to building organizations. From writing deterministic logic to designing coordinated behavior. Your system architecture is now organizational architecture. Your technical documentation is now operating procedures.</p><p>Most people are still applying software engineering principles to what are actually management problems. Treating agent systems like distributed services instead of like small companies.</p><p>The people who figure this out first will build things that work fundamentally differently. Not just more capable, but more coherent. Not just automated, but genuinely intelligent in how the pieces work together.</p><p>Because the future isn&#8217;t just AI that can execute tasks. It&#8217;s AI that can work together the way good organizations do. Clear roles, clean handoffs, appropriate specialization, living documentation, and the judgment to know when to restructure and when to let things be.</p><p>Whether you&#8217;re ready or not, you&#8217;re not just an engineer anymore. You&#8217;re a founder. And the company you&#8217;re building just happens to be made of code.</p>]]></content:encoded></item><item><title><![CDATA[What Does It Look Like When Your Job Is Done For You?]]></title><description><![CDATA[We&#8217;re building the tools but not the discipline to use them]]></description><link>https://www.actionpotential.co/p/what-does-it-look-like-when-your</link><guid isPermaLink="false">https://www.actionpotential.co/p/what-does-it-look-like-when-your</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 08 Dec 2025 13:23:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!H-YH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H-YH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H-YH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H-YH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H-YH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H-YH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H-YH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg" width="1400" height="1050" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1050,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BOMB Magazine | Jennie C. Jones by Jared Quinton&quot;,&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="BOMB Magazine | Jennie C. Jones by Jared Quinton" title="BOMB Magazine | Jennie C. Jones by Jared Quinton" srcset="https://substackcdn.com/image/fetch/$s_!H-YH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H-YH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H-YH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H-YH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F674dae81-e3ef-437a-a7a4-79594d7e88c2_1400x1050.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Jennie C. Jones, <em>Fractured Crescendo, Rest</em>, 2019</figcaption></figure></div><p>The conversation about AI and work keeps circling the same questions. Will it take jobs? Which jobs? How fast? But there&#8217;s a more interesting question that almost nobody&#8217;s asking: if AI does your core tasks, what are you actually supposed to do?</p><p>Not in the abstract future. Right now. Because for a lot of knowledge workers, this isn&#8217;t hypothetical anymore. The tools already exist to automate much of what fills their days. The question isn&#8217;t whether the tech can do it. It&#8217;s what happens when it does.</p><h2>The Obvious Answer Doesn&#8217;t Work</h2><p>The natural response is: you do higher-level work. Strategy instead of execution. Creativity instead of production. Thinking instead of doing.</p><p>But this breaks down fast. Most jobs aren&#8217;t structured that way. They&#8217;re not a neat pyramid with thinking at the top and doing at the bottom. They&#8217;re a mix. And critically, a lot of the thinking happens through the doing. You don&#8217;t really understand a problem until you&#8217;re elbow-deep in trying to solve it.</p><p>When the doing goes away, something strange happens. You don&#8217;t automatically get better at thinking. You often get worse at it, because you&#8217;ve lost the feedback loop that made your thinking good in the first place.</p><h2>What Executives Already Know</h2><p>Here&#8217;s what&#8217;s interesting: this problem is already solved in one place. Executives don&#8217;t execute. They set direction, ask questions, and watch metrics. When something&#8217;s off, they dive into the details just enough to understand what&#8217;s broken, then pull back out.</p><p>This is exactly the position most knowledge workers are moving into with AI. You&#8217;re not in the weeds by default anymore. You&#8217;re overseeing execution, checking if it&#8217;s working, and only going deep when you need to course-correct.</p><p>The skills that matter are the same ones executives need. Knowing which metrics actually matter. Asking the right questions to surface problems early. Understanding causation well enough to know when correlation is misleading. Having enough domain knowledge to spot when something looks wrong, even if you can&#8217;t immediately articulate why.</p><p>The hard part is that most people weren&#8217;t trained for this. Executives get there gradually, building this muscle over years. But AI is compressing that timeline. You go from doing everything yourself to overseeing it much faster than the typical career path allows.</p><h2>Why AI Management Needs To Be A Real Thing</h2><p>Right now, most people using AI tools are doing one of two things. Either they&#8217;re micromanaging every output, essentially doing the work twice. Or they&#8217;re trusting blindly and catching mistakes too late.</p><p>Neither works at scale. The first defeats the purpose. The second is dangerous.</p><p>The gap is management discipline. We need frameworks for oversight that aren&#8217;t just &#8220;check everything&#8221; or &#8220;hope for the best.&#8221; We need metrics that actually tell you if AI is performing well on what matters, not just whether it completed tasks.</p><p>Everyone&#8217;s focused on making AI better at doing tasks. Faster models, better reasoning, longer context windows. But almost nobody&#8217;s working on the actual hard problem: how do you manage AI effectively?</p><h2>What Makes This Different</h2><p>Managing AI is harder than managing people in some ways, easier in others.</p><p>Harder because AI fails in unpredictable ways. People make mistakes, but you can usually spot patterns in how they fail. AI can be perfect for 1000 iterations and then completely miss something obvious on 1001. You need different error detection systems.</p><p>Harder because AI doesn&#8217;t push back. A good employee will tell you when a request doesn&#8217;t make sense or when they need more context. AI just does what you ask, even if it&#8217;s the wrong thing. You lose that feedback loop.</p><p>Easier because you can instrument everything. With people, you can&#8217;t watch their every move without destroying trust. With AI, you can log every input and output, measure every decision, A/B test every approach. The data is there. We just don&#8217;t know what to do with it yet.</p><p>Easier because iteration is fast. If you realize your approach isn&#8217;t working, you can restructure it immediately. No reorganization, no hurt feelings, no adjustment period.</p><h2>The Patterns That Work</h2><p>Some patterns are starting to emerge from people doing this well:</p><p><strong>Staged verification.</strong> Don&#8217;t check everything, but don&#8217;t trust blindly. Check strategically at decision points. Like code review but for reasoning.</p><p><strong>Output metrics that matter.</strong> Not &#8220;did AI complete the task&#8221; but &#8220;did this move us toward the goal.&#8221; Most AI tools measure completion. Almost none measure impact.</p><p><strong>Failure cataloging.</strong> When AI gets something wrong, documenting the pattern matters more than fixing the instance. People who do this build mental models of how their AI fails, which makes them much better at catching it.</p><p><strong>Appropriate delegation.</strong> Knowing which tasks can be fully automated versus which need human checkpoints versus which AI shouldn&#8217;t touch. This varies by domain and by person&#8217;s risk tolerance, but getting it right is the difference between force multiplication and costly mistakes.</p><p><strong>Feedback loops.</strong> The best AI users have tight loops between output and refinement. They don&#8217;t just accept results. They use bad outputs to improve their prompts, their processes, their understanding of what AI can and can&#8217;t do.</p><h2>Why This Needs To Become A Discipline</h2><p>Right now everyone&#8217;s learning this independently. Trial and error. Sharing tips on Twitter. But this is too important to leave to informal knowledge transfer.</p><p>We need actual research on what works. We need frameworks that generalize across domains. We need training that teaches people how to think about AI management, not just how to write better prompts.</p><p>Think about how project management became a discipline. Or how DevOps emerged as a real field with principles and practices. AI management needs the same thing. Not just best practices, but a coherent theory of how to oversee AI work effectively.</p><h2>What Changes</h2><p>I think we&#8217;ll see new roles emerge. Not &#8220;AI managers&#8221; in the HR sense, but people who specialize in designing AI workflows, building verification systems, and catching failure patterns.</p><p>We&#8217;ll see new tools built specifically for AI oversight. Not just better AI, but better ways to monitor, measure, and manage what AI produces. We&#8217;ll see organizations restructure around this. Teams that used to be organized around execution will reorganize around verification and direction-setting. The skill mix will shift.</p><p>And we&#8217;ll see education catch up. Right now business schools teach management but not AI management. Engineering schools teach AI but not how to deploy it responsibly at scale. Someone will bridge that gap.</p><h2>The Real Work</h2><p>The people who struggle aren&#8217;t the ones who can&#8217;t think strategically. They&#8217;re the ones who can&#8217;t resist diving back into execution mode, or who don&#8217;t trust the output enough to let go. They end up doing the work twice: once by AI, once by themselves to check it.</p><p>The people who thrive are the ones who can genuinely shift into that executive mode of thinking. Set clear direction, define success metrics, spot when things are off, intervene surgically when needed.</p><p>If your job is being done for you, the answer isn&#8217;t to find more tasks. It&#8217;s to figure out what you should be thinking about instead. And to build the systems that let you know whether what&#8217;s being done is actually working.</p><p>That&#8217;s the real work now. And we&#8217;re just starting to figure out how to do it well.</p>]]></content:encoded></item><item><title><![CDATA[How Agents Turn Quiet Work into Collaboration]]></title><description><![CDATA[A continuation of The Rise of Agent Mediated Networks]]></description><link>https://www.actionpotential.co/p/how-agents-turn-quiet-work-into-collaboration</link><guid isPermaLink="false">https://www.actionpotential.co/p/how-agents-turn-quiet-work-into-collaboration</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 01 Dec 2025 12:32:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0Oor!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Oor!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Oor!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!0Oor!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!0Oor!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!0Oor!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Oor!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4003092,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/180335522?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0Oor!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!0Oor!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!0Oor!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!0Oor!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09b466b-2d44-4a9c-8610-2a90916a792d_1536x1024.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AI-generated painting inspired by Lawren Harris, original photo includes our dog Basha</figcaption></figure></div><p>A few weeks ago, I wrote about <a href="https://www.actionpotential.co/p/the-rise-of-agent-mediated-networks">agent mediated networks</a>, how AI agents could solve the cold start problem that kills most networks before they begin. The theory was clean: let agents create baseline value when the network is empty, then evolve into connectors as the community grows.</p><p>But theory needs examples. So here&#8217;s one.</p><p>There&#8217;s a moment in every library that feels oddly intimate. You look up from your notes, make brief eye contact with someone across the room, and wonder: <em>What are they working on? Would they find this interesting?</em> Then you both look down again. The moment passes. The connection never happens.</p><p>Most interesting collaborations die this way, not from conflict, but from silence.</p><h2>Why knowledge tools optimize for isolation</h2><p>We&#8217;ve built incredible tools for solo thinking. <a href="https://obsidian.md/">Obsidian</a>, <a href="https://roamresearch.com/">Roam</a>, <a href="https://www.notion.com/">Notion</a>; they&#8217;re all designed to help you capture, connect, and develop ideas on your own. They&#8217;re personal knowledge gardens, carefully tended in private.</p><p>But knowledge doesn&#8217;t actually grow best in isolation. It grows in conversation. In collision. When someone working on protein folding accidentally sparks an insight for someone studying urban planning. When a startup founder&#8217;s half-formed thesis meets a researcher&#8217;s overlooked dataset.</p><p>The challenge is that these collisions are nearly impossible to orchestrate. You can&#8217;t browse through everyone&#8217;s research notes looking for resonance. You can&#8217;t announce &#8220;I&#8217;m thinking about X&#8221; to thousands of people and hope the right person notices.</p><p>The signal-to-noise ratio makes it impossible.</p><h2>A workspace that notices patterns across researchers</h2><p>Imagine a workspace that works like this:</p><p>You log in and continue where you left off. You&#8217;re researching urban density patterns, or perhaps sketching out a thesis on decentralized identity systems. An AI agent helps you think through it, asks clarifying questions, surfaces relevant concepts, helps you connect dots.</p><p>But here&#8217;s what&#8217;s different: <strong>your agent isn&#8217;t just helping you. It&#8217;s also noticing.</strong></p><p>It sees that someone else, three time zones away, is exploring complementary ideas about mobility patterns in cities. Another person is building something that could solve a problem you mentioned last week. A researcher just published notes that challenge an assumption you&#8217;re working from.</p><p>The agent doesn&#8217;t interrupt you. It doesn&#8217;t flood you with notifications. Instead, it does something more subtle: it extends a quiet invitation.</p><p><em>&#8220;There are two others exploring ideas adjacent to yours. Would you like to me to introduce you?&#8221;</em></p><h2>How this solves the cold start problem</h2><p>This is agent mediated networks in practice. The agent solves the cold start problem by making the space useful even when you&#8217;re alone. It&#8217;s your thinking partner, your research assistant, your sounding board. You get value immediately.</p><p>But as more people arrive, the agent&#8217;s role evolves. It starts seeing patterns humans can&#8217;t. It notices that three people are circling the same problem from different angles. It identifies researchers whose questions align with another person&#8217;s hypotheses. It spots the quiet genius whose work keeps influencing others, even though they rarely speak up.</p><p>Then it does what humans do poorly at scale: <strong>it makes thoughtful introductions.</strong></p><p>Not &#8220;here are 47 people also interested in AI.&#8221; But &#8220;here&#8217;s someone whose research directly challenges your assumption in Section 3. Here&#8217;s someone building the exact infrastructure you said you wished existed. Here are two people who could form a powerful collaboration if they knew each other existed.&#8221;</p><h2>What the agent actually sees (and how it matches)</h2><p>The agent doesn&#8217;t just match keywords. It understands context:</p><ul><li><p><strong>Your thinking process</strong>, not just your conclusions. If you&#8217;re iterating on an idea about decentralized systems, the agent knows you&#8217;re exploring, not settled.</p></li><li><p><strong>Complementary gaps</strong>. It notices when Person A has the question and Person B has the framework that could answer it.</p></li><li><p><strong>Collaborative potential</strong>. It looks for overlapping missions, not just overlapping topics. Two people studying urban planning might have nothing to talk about. But an urban planner exploring food systems and an agricultural researcher exploring city logistics? That&#8217;s a conversation worth having.</p></li><li><p><strong>Contribution patterns</strong>. Some people prefer to build. Others prefer to advise. The agent learns what kind of collaboration each person actually wants.</p></li></ul><p>When the agent suggests a connection, it does the work humans find exhausting: <strong>it prepares the introduction</strong>. It creates a shared document highlighting where your thinking overlaps, where it diverges, and what you might explore together. It sets up the talking points so the first conversation doesn&#8217;t start from zero.</p><h2>What changes when researchers can discover each other this way</h2><p><strong>For researchers</strong>: You&#8217;re no longer publishing into the void, hoping someone stumbles onto your work. The agent actively connects your ideas to people who can build on them.</p><p><strong>For founders</strong>: You&#8217;re not searching for co-founders or collaborators through cold LinkedIn messages. The agent surfaces people whose thinking has been quietly aligned with yours for months.</p><p><strong>For the curious</strong>: You&#8217;re not overwhelmed by endless feeds. The agent brings you only what deepens your current exploration or gently nudges you toward an adjacent idea that might spark something new.</p><p>The network becomes smarter as it grows. Each person&#8217;s research makes the agent better at understanding patterns. Each successful collaboration teaches it what kinds of connections create value. The community improves the agent, and the agent amplifies the community.</p><h2>Design principles worth considering</h2><p>The core principle: <strong>respect the work.</strong></p><p>The agent never interrupts deep focus. It waits for natural pauses. It suggests, never demands. It knows that sometimes the most valuable thing is solitude.</p><p>When it does make an introduction, it&#8217;s transparent about why. No black box recommendations. You can see the reasoning. You can say no. You can adjust what kinds of connections you want to receive.</p><p>And critically: <strong>your work stays yours</strong>. Notes remain private unless you choose to share specific pieces. The agent learns from patterns, not by reading your private thoughts out loud to others.</p><h2>Why this matters now</h2><p>We&#8217;re drowning in content but starving for connection. Everyone&#8217;s publishing, but no one&#8217;s collaborating. We have tools for broadcast and tools for privacy, but few tools for the delicate space in between where ideas can meet without pressure, where curiosity can find company without commitment.</p><p>Agent mediated networks make this possible. They bring the intimacy of a small research group to the scale of the internet. They let you think alone but discover together.</p><p>The Quiet Room (toying with this name) is what happens when you take the cold start problem seriously. When you build a network that&#8217;s useful from day one because the agent gives you value before anyone else arrives. And then, as the community forms, the agent&#8217;s role shifts from companion to connector.</p><p>It&#8217;s the library that finally whispers introductions.</p><p>And every great collaboration begins with someone noticing you&#8217;re both working on something that matters.</p><div><hr></div><p><em>The hardest networks to build are the ones worth building. The Quiet Room is an experiment in making that beginning a little less brutal.</em></p>]]></content:encoded></item><item><title><![CDATA[The Damascus Robotics Club]]></title><description><![CDATA[What happens when determined builders finally get the tools they deserve]]></description><link>https://www.actionpotential.co/p/the-damascus-robotics-club</link><guid isPermaLink="false">https://www.actionpotential.co/p/the-damascus-robotics-club</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Mon, 24 Nov 2025 14:31:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GZeH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GZeH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GZeH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GZeH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GZeH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GZeH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GZeH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg" width="1080" height="486" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:486,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:71201,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/179749372?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!GZeH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GZeH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GZeH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GZeH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05875482-2549-4970-bccb-6bc242359a90_1080x486.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My visit with the Damascus Robotics Club, Oct 2025</figcaption></figure></div><p>For years, the students at Damascus University&#8217;s Robotics Club learned to code without access to GitHub. They had to use VPNs just to reach basic documentation. Import restrictions meant getting electronics required finding friends traveling through Lebanon. Currency controls made online purchases impossible.</p><p>So they adapted. They found workarounds for every blocked pathway. They built informal networks to get components. They learned software engineering while being locked out of the platforms most engineers depend on.</p><p>When you can&#8217;t take the standard path, you get good at finding new ones. When every step requires problem-solving, that becomes your default. The kind of resourcefulness this produces, the instinct to treat obstacles as engineering problems rather than reasons to stop, is what separates people who build things from people who wait for better conditions.</p><h3>Coming Home</h3><p>I visited Syria recently for the first time in 17 years. What struck me most wasn&#8217;t what these students had been through. It was how forward-looking they were.</p><p>They weren&#8217;t thinking about constraints. They were excited about what they could finally build. After years of blocked pathways, the barriers were lifting, and everyone I met was focused on the future.</p><p>That kind of optimism is rare. It&#8217;s what you see in the best builders everywhere, but here it was stronger because these students had spent so long waiting for their chance.</p><p>I&#8217;m committed to supporting this. Not out of obligation, but because this is exactly the kind of determination that deserves to be accelerated. When you meet people who&#8217;ve already proven they&#8217;ll figure it out regardless, the question isn&#8217;t whether to help. It&#8217;s how to remove friction most effectively.</p><h3>What Happens Next</h3><p>The regime that created these restrictions is gone. GitHub is accessible. Import bans have lifted. The obstacles haven&#8217;t disappeared entirely, but the ceiling just got much higher.</p><p>This is the interesting moment: when people who proved they could learn and build despite everything finally get access to proper tools. Determination doesn&#8217;t fade when conditions improve. It compounds. Students who spent years working around constraints don&#8217;t slow down when friction disappears. They accelerate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rsUK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rsUK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rsUK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rsUK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rsUK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rsUK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg" width="1080" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103081,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/179749372?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rsUK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rsUK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rsUK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rsUK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd886557-1d93-4d26-8090-c67ce816a99e_1080x810.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Spending few hours talking about startups and tech</figcaption></figure></div><h3>Two ways to remove friction between their determination and what comes next</h3><p>If you&#8217;re an academic, hardware hacker, or engineer in North America, there are two ways to be part of this:</p><p><strong>Hardware: </strong>Old microcontrollers, obsolete sensors, robotics kits gathering dust in your lab, what&#8217;s outdated to you is a significant upgrade from informal smuggling networks. Getting electronics into Syria is still complex but doable.</p><p><strong>Knowledge: </strong>Years of isolation from international research networks means these students are brilliant self-learners but missing the compound knowledge that spreads through lab conversations. An hour or two in a virtual working session connects them to the wider world of what&#8217;s possible.</p><p>You&#8217;re not rescuing anyone. You&#8217;re investing in people who&#8217;ve already proven they&#8217;ll figure it out. You&#8217;re just removing friction between their determination and what they build next.</p><p>Reach out if you want to be part of what happens when resilience meets opportunity.</p>]]></content:encoded></item><item><title><![CDATA[The Rise of Agent Mediated Networks]]></title><description><![CDATA[Agents that learn from the crowd and personalize for the individual.]]></description><link>https://www.actionpotential.co/p/the-rise-of-agent-mediated-networks</link><guid isPermaLink="false">https://www.actionpotential.co/p/the-rise-of-agent-mediated-networks</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Sun, 16 Nov 2025 22:46:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IOkl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IOkl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IOkl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IOkl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IOkl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IOkl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IOkl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg" width="1417" height="707" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:707,&quot;width&quot;:1417,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Sky of the Seven Valleys' by Ala Ebtekar and 'Looking, Dwelling,  Leaving' by Khalid Jauffer at The Third Line &#8226; SELECTIONS ARTS MAGAZINE&quot;,&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="The Sky of the Seven Valleys' by Ala Ebtekar and 'Looking, Dwelling,  Leaving' by Khalid Jauffer at The Third Line &#8226; SELECTIONS ARTS MAGAZINE" title="The Sky of the Seven Valleys' by Ala Ebtekar and 'Looking, Dwelling,  Leaving' by Khalid Jauffer at The Third Line &#8226; SELECTIONS ARTS MAGAZINE" srcset="https://substackcdn.com/image/fetch/$s_!IOkl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IOkl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IOkl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IOkl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff70e001a-8b16-4ffb-b12e-31758d3111d3_1417x707.jpeg 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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#8216;The Sky of the Seven Valleys&#8217; by Ala Ebtekar</figcaption></figure></div><h3><strong>Why the Beginning Is Always Brutal</strong></h3><p>The hardest part of building a network has always been the beginning. It feels like showing up early to a party and realizing no one else is there. Networks behave the same way. They only become useful once enough people have already arrived. Andrew Chen put it clearly. A network without a dense early cluster is not low value. It is zero.</p><p>This is why most networks fail. You need people to create value, but you need value to attract people. When you start, you have neither. You are, in Chen&#8217;s phrase, nothing.</p><h3><strong>How Founders Used To Fake Momentum</strong></h3><p>The first workaround was almost embarrassingly manual. Paul Graham told founders to do things that do not scale. Reddit filled itself with fake accounts. Tinder threw events. Airbnb photographed apartments by hand. The point was simple. Pretend long enough for real use to appear. It was brute force momentum creation.</p><h3><strong>The New Way to Start a Network</strong></h3><p>Now we have a computational version of the same trick. You do not need to fake the early community yourself. You can let an AI agent do it. Call this agent bootstrapping.</p><p>An agent gives the first user something networks have never offered before, a baseline of value independent of scale. Even if the place is empty, the agent can make it feel alive. It can take a small amount of content and make it feel curated. Personalized filtering works especially well when content is sparse and diverse. Scraps start to feel intentional.</p><p>Most early communities die because newcomers feel ignored. Humans miss questions, reply too slowly, or forget to welcome people. An agent never does. It greets everyone, answers everything, and gives feedback that feels specific. It buys time until the humans arrive.</p><h3><strong>What Happens When the Agent Starts Shaping the Community</strong></h3><p>Once the network forms, the agent&#8217;s role changes. It stops simulating and starts shaping. As more people join, it sees more data, learns richer patterns, and uncovers links no individual would notice. Value stops growing linearly. It compounds.</p><p>Every network has a hard side, the users whose presence determines whether the whole thing works. Drivers in marketplaces. High quality sellers. Desirable matches. The agent can study their needs in real time and adjust the experience around them. Entire teams used to do this manually.</p><p>Communities also rely on two forms of attachment. People need to feel connected to the group&#8217;s ideas, and they need to feel connected to each other. Humans build these bonds unevenly. The agent can notice when they are forming too weakly or too narrowly and intervene. It can revive dormant members, surface shared interests, and highlight contributions at the moments that matter.</p><h3><strong>When the Community Makes the Agent Smarter</strong></h3><p>At this stage a new dynamic appears. The agent is not only helping the users. The users are helping the agent. The more people join, the more the agent understands. And the better the agent becomes, the more reason people have to stay. The result is a loop where the community sharpens the agent, and the agent amplifies the community.</p><p>It becomes a kind of shared intelligence. Each user receives a personal, high resolution experience, almost like a concierge in an old New York club. The advice is good because it reflects years of accumulated patterns from everyone who passed through.</p><p>For <a href="https://alma.food">Alma</a>, this becomes powerful. Instead of showing whatever restaurants are trending nearby, the agent could map your entire diet history. It could compare your habits and goals with people who eat like you and aim for the same outcomes. It could see what actually helped them and use that to guide you. The recommendations become deeply personal.</p><p>It would feel like a version of Google Maps built not for the general public, but for people whose behavior mirrors yours. A rating system shaped by your cohort rather than the world at large. A map that understands what someone like you will likely love.</p><h3><strong>How Agents Keep Shared Data Clean</strong></h3><p>Shared datasets used to be a liability. Crowdsourcing was a polite word for chaos. Open contributions produced noise. Strict moderation slowed everything down. Communities swung between disorder and gatekeeping.</p><p>An agent changes this. It can absorb contributions at any scale, filter out junk instantly, merge duplicates, and maintain consistency. The dataset becomes something the entire community can improve without degrading its quality. The more people contribute, the smarter the system becomes. And the smarter it becomes, the more value it can return to everyone.</p><h3><strong>Why the Hard Part Is Deciding What the Agent Wants</strong></h3><p>The real danger is not technical. It is philosophical. If an agent optimizes only for engagement, it will push the community into unhealthy shapes. It will strengthen small clusters and weaken the connections between them. You get activity without resilience.</p><p>Communities that last rely on norms that feel legitimate. They make people feel the place is worth protecting. These norms are relational. Agents must support them rather than erode them.</p><h3><strong>Open Source Agents?</strong></h3><p>What if the internal knowledge and directives of the agent organizing the community was publicly available and possibly editable by the members of the community itself? It could introduce a really unique dynamic worth considering.</p><p>Agent mediated communities are coming. The question is what kind of agents we choose to create.</p>]]></content:encoded></item><item><title><![CDATA[Hardware’s Second Act: What Canada Must Do Now]]></title><description><![CDATA[Insights from the Mila AI x Robotics Panel on Deep Tech, Sovereignty, and the Return of Hardware]]></description><link>https://www.actionpotential.co/p/hardwares-second-act-what-canada</link><guid isPermaLink="false">https://www.actionpotential.co/p/hardwares-second-act-what-canada</guid><dc:creator><![CDATA[Rami]]></dc:creator><pubDate>Wed, 12 Nov 2025 14:51:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hnbP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hnbP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hnbP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hnbP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hnbP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hnbP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hnbP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3497771,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.actionpotential.co/i/177434003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hnbP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hnbP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hnbP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hnbP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6e7176-ca85-416d-92c9-e4ddb5926960_1536x1024.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AI generated image inspired by the great Canadian artist Jean-Paul Riopelle</figcaption></figure></div><p>We&#8217;re living through a hard pivot, literally.</p><p>For two decades, &#8220;hardware is hard&#8221; was startup gospel. It scared off founders. It scared off investors. It got buried under layers of software and SaaS multiples. But something&#8217;s changed. Hardware is having a second act. And this time, it might stick.</p><p>At the recent <strong>Mila AI x Robotics Panel</strong>, we dug into what&#8217;s driving this shift, why Canada is still behind, and what needs to happen now. Here&#8217;s a distillation of the discussion.</p><div><hr></div><h2><strong>1. Why Hardware Momentum Is Building Again</strong></h2><p>Three things are colliding:</p><ul><li><p><strong>Global trade is fragmenting.</strong> Re-shoring isn&#8217;t optional anymore. Supply chain resilience is national strategy now.</p></li><li><p><strong>Actuation tech is finally catching up.</strong> We&#8217;ve had 20 years of research; control systems are mature enough to build on.</p></li><li><p><strong>AI adds flexibility.</strong> The software layer, especially with LLMs, means you can build adaptive, context-aware hardware with smaller teams.</p></li></ul><p>If the first wave of IoT felt clunky, this next wave is starting to feel agile.</p><div><hr></div><h2><strong>2. Manufacturing as Strategy, Not Just Output</strong></h2><p>We talked a lot about irrationality. Because re-shoring isn&#8217;t efficient, it&#8217;s protective.</p><p>You&#8217;re going to see countries duplicate manufacturing capacity for things they don&#8217;t even need, just to reduce dependency. That creates opportunity: the smart bet is on <strong>versatile, adaptable manufacturing hubs</strong> that can spin up across verticals.</p><p>But founders need to understand the new game:</p><ul><li><p>Read the geopolitical tea leaves.</p></li><li><p>Build early bridges with new trading partners.</p></li><li><p>Government focus on &#8220;dual-use&#8221; is promising, but not everything can, or should, be dual-use.</p></li></ul><div><hr></div><h2><strong>3. Hardware Sovereignty Is About Optionality</strong></h2><p>I built a proudly &#8220;Made in Canada&#8221; product with PUSH. And the hard truth? Visibility into prototyping, design, and manufacturing support hasn&#8217;t improved much since then.</p><p>Hardware sovereignty isn&#8217;t about making everything at home. It&#8217;s about <strong>pivotability</strong>: being able to switch suppliers or fix bottlenecks without your entire business collapsing.</p><p>What we need:</p><ul><li><p>A clear map for founders: prototyping hubs, design shops, shortlists of vendors.</p></li><li><p>Government-backed identification of critical supply chain gaps, and support to fix them domestically.</p></li></ul><div><hr></div><h2><strong>4. Fixing the Capital Stack for Hardware</strong></h2><p>Hardware takes time. It&#8217;s expensive. It&#8217;s messy. That means <strong>capital chains have to be longer and stronger</strong>.</p><p>What works:</p><ul><li><p>Start simple. Nail consumer demand before asking for millions.</p></li><li><p>Early signs of pull matter way more than polish.</p></li><li><p>Canadian investors need to start taking real bets, not charity, but conviction. We need an <em>Eclipse Ventures</em> for Canada. Now.</p></li></ul><p>Also:</p><ul><li><p>Banks and government need to plug the working capital gap.</p></li><li><p>DARPA-style competitions and fast-lane procurement would go a long way.</p></li></ul><div><hr></div><h2><strong>5. What Would a Thriving Ecosystem Actually Look Like?</strong></h2><p>Here&#8217;s the vision:</p><ul><li><p>A flagship consumer hardware company built and scaled from Canada.</p></li><li><p>High-tech, frictionless manufacturing hubs where a founder can get a quote in 24 hours and a prototype in a week.</p></li><li><p>Real FOMO. Like San Francisco. 30+ events a week, constant collisions. We need that grassroots movement here.</p></li></ul><div><hr></div><h2><strong>Final Thought: Build Like It&#8217;s Wartime</strong></h2><p>If we want to compete, we have to act like it matters. That means bold policy. Real infrastructure. A culture of experimentation. Canada doesn&#8217;t need to own every piece but we do need to <strong>own the ability to pivot</strong>.</p><p>This moment won&#8217;t come back.</p><p>Let&#8217;s not waste the second act.</p>]]></content:encoded></item></channel></rss>