<?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[On the Edge by Blueprint: Daily Builds]]></title><description><![CDATA[What I built today. Daily dispatches from Claude Code sessions — unpolished, unfiltered, tagged to the framework.]]></description><link>https://edge.blueprintgtm.com/s/daily-builds</link><image><url>https://substackcdn.com/image/fetch/$s_!grl5!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70d5899-0706-4e6e-b77e-77c92ea86702_1280x1280.png</url><title>On the Edge by Blueprint: Daily Builds</title><link>https://edge.blueprintgtm.com/s/daily-builds</link></image><generator>Substack</generator><lastBuildDate>Sun, 07 Jun 2026 00:20:33 GMT</lastBuildDate><atom:link href="https://edge.blueprintgtm.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jordan Crawford]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[gtmontheedge@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[gtmontheedge@substack.com]]></itunes:email><itunes:name><![CDATA[Jordan Crawford]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jordan Crawford]]></itunes:author><googleplay:owner><![CDATA[gtmontheedge@substack.com]]></googleplay:owner><googleplay:email><![CDATA[gtmontheedge@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jordan Crawford]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[A Claude Code skill: company name → domain, $50 per 100k]]></title><description><![CDATA[Free where it can be. Pennies where it must. A model only on the tail.]]></description><link>https://edge.blueprintgtm.com/p/a-claude-code-skill-company-name</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/a-claude-code-skill-company-name</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Tue, 02 Jun 2026 16:05:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6qJk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.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_!6qJk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6qJk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png 424w, https://substackcdn.com/image/fetch/$s_!6qJk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png 848w, https://substackcdn.com/image/fetch/$s_!6qJk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!6qJk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6qJk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A Claude Code skill: company name to domain, $50 per 100k&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/200044229?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A Claude Code skill: company name to domain, $50 per 100k" title="A Claude Code skill: company name to domain, $50 per 100k" srcset="https://substackcdn.com/image/fetch/$s_!6qJk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png 424w, https://substackcdn.com/image/fetch/$s_!6qJk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png 848w, https://substackcdn.com/image/fetch/$s_!6qJk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!6qJk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d89e978-2325-4928-8dd5-fbb3d0cf64ba_2400x1080.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></figure></div><p>You've got a list of company names &#8212; tens of thousands of them &#8212; and you need a domain for every one. Vendors sell you that for fifty cents a row. On a 100,000-company list, that's fifty grand to look up something the internet already knows.</p><p>I built a Claude Code skill that does it for about a twentieth of a cent each. Free where the answer is already sitting in a table I own or in Google's Knowledge Graph. A rounding-error search where it isn't. A cheap model only on the names that are genuinely ambiguous. And it checks every domain against what the site says about itself &#8212; so it never hands you a confident wrong answer. <strong>The whole list lands for about fifty bucks.</strong></p><h2>The wall every list hits</h2><p>Every enrichment job starts the same way. You have names. You need domains. Nothing downstream works until you have them &#8212; no contacts, no firmographics, no message.</p><p>So you reach for one of three things. You pay a per-row vendor &#8212; ZoomInfo, Clearbit &#8212; fifty cents a row while the meter runs. You Google each name programmatically and take the top result. Or you hand the whole list to an LLM and ask it for domains.</p><p>All three have the same hole: <strong>none of them check whether the answer is right.</strong> The vendor hands you a domain, the search hands you a domain, the model hands you a domain &#8212; and at a hundred thousand rows, you're not checking by hand.</p><h2>At scale, the data is all over the board</h2><p>Ten companies, you eyeball it. A hundred thousand, and there's no clean rule that holds.</p><p>Sometimes the domain <em>is</em> the name. "Anderson Plumbing Heating and Air" lives at <em>andersonplumbingheatingandair.com</em> &#8212; the whole mouthful, the "and" included.</p><p>Sometimes the domain looks nothing like the name:</p><ul><li><p><strong>Boston Medical Center</strong> &#8594; <em>bmc.org</em>. An acronym. A <em>.org</em>. Nothing in the name points to it.</p></li><li><p><strong>Sandy Springs Internal Medicine</strong> &#8594; <em>ssim.com</em>. Four words collapsed to four letters.</p></li><li><p><strong>Mass General Brigham</strong> &#8594; <em>massgeneralbrigham.org</em>, not <em>massgeneral.org</em>, not <em>.com</em>.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1xwg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1xwg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png 424w, https://substackcdn.com/image/fetch/$s_!1xwg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png 848w, https://substackcdn.com/image/fetch/$s_!1xwg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!1xwg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1xwg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Boston Medical Center resolves to bmc.org &#8212; nothing in the name points to it&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/200044229?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Boston Medical Center resolves to bmc.org &#8212; nothing in the name points to it" title="Boston Medical Center resolves to bmc.org &#8212; nothing in the name points to it" srcset="https://substackcdn.com/image/fetch/$s_!1xwg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png 424w, https://substackcdn.com/image/fetch/$s_!1xwg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png 848w, https://substackcdn.com/image/fetch/$s_!1xwg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!1xwg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573640fe-594c-4238-96a0-ed7421155f3c_2400x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>This is where the shortcuts break. Google "Boston Medical Center" and the top hit might be a directory, a LinkedIn page, or a different Boston clinic with a similar name. Ask an LLM and it'll hand you <em>bostonmedicalcenter.com</em> with total confidence &#8212; a domain that doesn't exist. <strong>The hard part was never the obvious names. It's the tail, where the domain shares nothing with the name, and the top result is wrong as often as it's right.</strong></p><h2>What the tool actually does: a waterfall</h2><p>No single source resolves a messy list. So you stack them cheapest-first and stop the moment one is confirmed.</p><ul><li><p><strong>Free first &#8212; two sources cost nothing.</strong> Google's Knowledge Graph hands back the official site for any company it already knows, free, a hundred thousand lookups a day. And a local table &#8212; twelve million US businesses scraped from Google Maps once &#8212; carries the small-business tail, phone included. A big slice of your list clears right here.</p></li><li><p><strong>A rounding-error search, for the rest.</strong> When the owned table misses, one cheap search call returns the candidate &#8212; the same Google lookup you'd do by hand, except every hit has to pass verification before it counts.</p></li><li><p><strong>A cheap model, only on the genuinely ambiguous.</strong> Parent versus subsidiary. A rebrand. A name forty small businesses share. Most rows never reach it.</p></li><li><p><strong>Flag, don't guess.</strong> When nothing can confirm the domain, the tool returns <em>needs review</em> instead of a confident wrong answer.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zaq0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zaq0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png 424w, https://substackcdn.com/image/fetch/$s_!zaq0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png 848w, https://substackcdn.com/image/fetch/$s_!zaq0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png 1272w, https://substackcdn.com/image/fetch/$s_!zaq0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zaq0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The waterfall: free, then pennies, then a model, then flag&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/200044229?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The waterfall: free, then pennies, then a model, then flag" title="The waterfall: free, then pennies, then a model, then flag" srcset="https://substackcdn.com/image/fetch/$s_!zaq0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png 424w, https://substackcdn.com/image/fetch/$s_!zaq0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png 848w, https://substackcdn.com/image/fetch/$s_!zaq0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png 1272w, https://substackcdn.com/image/fetch/$s_!zaq0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d68bae9-beb8-4713-a7aa-02842c2ebddf_2400x1450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>Every tier above costs less than the one below it, and most of your list clears in the first two. That's the spend rule the whole thing runs on: <strong>as free as is wise.</strong> Free when it's right and fast. A fraction of a cent when that's what makes it sure. Never a flat vendor fee for work the website will confirm.</p><h2>The advice that wastes everyone's time</h2><p>There's a tip that gets repeated every time domain resolution comes up: "verify it with the SSL certificate &#8212; the cert names the company."</p><p>It's a coin flip at best. I pulled the live certificate on twelve well-known companies. <strong>Five named themselves. Seven didn't.</strong> And there's no pattern you can use:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SN8B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SN8B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png 424w, https://substackcdn.com/image/fetch/$s_!SN8B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png 848w, https://substackcdn.com/image/fetch/$s_!SN8B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!SN8B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SN8B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;5 of 12 name themselves &#8212; and no pattern you can use&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/200044229?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="5 of 12 name themselves &#8212; and no pattern you can use" title="5 of 12 name themselves &#8212; and no pattern you can use" srcset="https://substackcdn.com/image/fetch/$s_!SN8B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png 424w, https://substackcdn.com/image/fetch/$s_!SN8B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png 848w, https://substackcdn.com/image/fetch/$s_!SN8B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!SN8B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59190b-ba70-4240-8d79-a4f013844a83_2400x1500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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><ul><li><p><strong>Name themselves:</strong> Apple, IBM, Stripe, Datadog, Snowflake.</p></li><li><p><strong>Say nothing:</strong> Anthropic, Notion, Ramp, Shopify, DoorDash, Klarna, Gong.</p></li></ul><p>Old guard and modern SaaS sit on both sides &#8212; you can't predict it. Their certs are issued by Let's Encrypt, Google, and Amazon, free authorities that never write a company name into the cert.</p><p>Now check the businesses actually on your list. The ones from earlier &#8212; <em>bmc.org</em>, <em>ssim.com</em>, the plumber &#8212; every one runs a free certificate with no name in it. <strong>For the tail, the cert is silent.</strong> It tells you who <em>issued</em> it, not who <em>owns</em> it.</p><p>So how do you know you've got the right domain? You ask the page. Its title says the company name. Its Open Graph tags say the company name. Its structured data &#8212; the block sites publish for Google &#8212; often lists the company's own LinkedIn and Wikipedia pages. The site tells you who it is. You verify against that, not against a certificate that's blank two-thirds of the time.</p><h2>The discipline: a wrong domain is worse than a blank</h2><p>This is the part most tools get wrong. They'd rather return <em>something</em> than nothing.</p><p>But a wrong domain doesn't just waste a row. It poisons everything downstream &#8212; you enrich the wrong company, you find the wrong contacts, you send a stranger a message about a problem they don't have. <strong>A blank you can fix later. A confident wrong answer you ship.</strong></p><p>So when the page can't confirm it, the tool says so. "Summit Roofing," no city, a dozen live candidates and nothing that proves which &#8212; <em>needs review</em>. It doesn't pick one and hope. That refusal is the feature.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nnrS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nnrS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png 424w, https://substackcdn.com/image/fetch/$s_!nnrS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png 848w, https://substackcdn.com/image/fetch/$s_!nnrS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!nnrS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nnrS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A blank you can fix. A wrong answer you ship.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/200044229?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A blank you can fix. A wrong answer you ship." title="A blank you can fix. A wrong answer you ship." srcset="https://substackcdn.com/image/fetch/$s_!nnrS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png 424w, https://substackcdn.com/image/fetch/$s_!nnrS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png 848w, https://substackcdn.com/image/fetch/$s_!nnrS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!nnrS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4564a6-3f19-4be0-bedd-5532119cc25a_2400x1120.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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><h2>Own the data, don't rent each lookup</h2><p>The free tier &#8212; the twelve-million-business local table &#8212; isn't mine. Eric Nowosolski (GrowthEngineX) scrapes Google Maps and ships it open-source. Credit where it's due.</p><p><strong>Own the data once, stop renting each lookup.</strong> The phone that disambiguates "Riverside Dental in Portland" from the one in Kansas is just sitting in the row. You don't pay a vendor per call for a fact you can hold locally.</p><h2>The cost, honestly</h2><p>It's not magic, and the tail is real. On a hard test slice, the confident majority resolved clean and cheap; the rest got flagged for a human instead of guessed. I measured the bill: <strong>about $0.0005 a name &#8212; fifty dollars for a hundred thousand.</strong> The free Knowledge Graph carries the companies Google already knows, the owned table carries the small-business tail, a rounding-error search picks up the rest, and a cheap model settles the genuine ambiguity.</p><p>That fifty assumes you're buying search at volume &#8212; run a small one-off list at retail pricing and it's closer to a hundred. Either way: your vendor charges fifty cents a row for the same list, skips the verification step, and bills you <strong>fifty thousand dollars for a list you can't trust.</strong> Fifty dollars for one you can, or fifty thousand for one you can't.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7rgR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7rgR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png 424w, https://substackcdn.com/image/fetch/$s_!7rgR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png 848w, https://substackcdn.com/image/fetch/$s_!7rgR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!7rgR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7rgR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Same 100,000-company list: $50,000 vs $50&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/200044229?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Same 100,000-company list: $50,000 vs $50" title="Same 100,000-company list: $50,000 vs $50" srcset="https://substackcdn.com/image/fetch/$s_!7rgR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png 424w, https://substackcdn.com/image/fetch/$s_!7rgR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png 848w, https://substackcdn.com/image/fetch/$s_!7rgR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!7rgR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e37bea0-56c1-480b-9923-07d7166358a7_2400x1200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>It was never really about domains. The same move &#8212; take the cheapest source that actually <em>knows</em>, verify what the thing declares about itself, refuse to assert what you can't confirm &#8212; resolves LinkedIn URLs, parent companies, rebrands. Verify, don't buy.</p><div><hr></div><p>Below is the geeky version. Copy it into Claude Code and rebuild the whole thing yourself.</p><p>Or don't. Annual subscribers install the tool I actually built with one command &#8212; every tool I ship, all 3 courses, weekly office hours.</p><p>&#8594; <strong><a href="https://edge.blueprintgtm.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong> &#183; <strong><a href="https://edge.blueprintgtm.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> <em>(most readers start here)</em></p><div><hr></div>
      <p>
          <a href="https://edge.blueprintgtm.com/p/a-claude-code-skill-company-name">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Matt asked to see Claude Code, I Showed Him How to Get Outcomes Instead]]></title><description><![CDATA[An hour. Three tabs: every Chili-palooza attendee scored, every brand from my playbook archive, his Monday call list.]]></description><link>https://edge.blueprintgtm.com/p/matt-asked-to-see-claude-code-i-showed</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/matt-asked-to-see-claude-code-i-showed</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Sun, 10 May 2026 17:06:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HvGm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.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_!HvGm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HvGm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!HvGm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!HvGm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!HvGm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HvGm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Purple ink splash with gold constellation path&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/196912752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Purple ink splash with gold constellation path" title="Purple ink splash with gold constellation path" srcset="https://substackcdn.com/image/fetch/$s_!HvGm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!HvGm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!HvGm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!HvGm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd97a07-eea6-4224-aafc-c2f634e942a0_1456x1048.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></figure></div><p>My friend <a href="https://www.linkedin.com/in/matt-braley-3aa3301b/">Matt Braley</a> was at Chili-palooza last week with me.</p><p>He texted me. He wanted to see Claude.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://edge.blueprintgtm.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">On the Edge by Blueprint is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Most people, when they say that, they want a demo. Watch me type a prompt. Watch the cursor blink. Watch a paragraph of marketing copy appear. Then they nod. Then they go home and don't change anything.</p><p>That's not what I do anymore.</p><p>I told Matt to come over. We sat down. I opened my laptop. I said, <em>"What do you actually need."</em></p><p>He's a CRO. He sells big-deal vertical SaaS, and he advises a portfolio of AI companies. He was at a conference and wanted to follow up with people. He wanted leads &#8212; not in general, leads scored against him.</p><p>Sixty minutes later he walked out with one Google Sheet. Three tabs. Every tab was a working list he could call on Monday, all three graded against the same one-page rubric of who Matt actually is.</p><p>This is what showing Claude looks like now.</p><h2>The three tabs</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!40sV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!40sV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!40sV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!40sV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!40sV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!40sV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Three vertical spreadsheet tabs filling with rows&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/196912752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Three vertical spreadsheet tabs filling with rows" title="Three vertical spreadsheet tabs filling with rows" srcset="https://substackcdn.com/image/fetch/$s_!40sV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!40sV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!40sV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!40sV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29283d5e-07d5-4bf4-8ab2-7c4d83d2984e_1200x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>First, the rubric. Before any of the three tabs, we built one file: <em>matt_profile.md</em>. I pasted in his LinkedIn, then ran three sub-agents in parallel to enrich what was missing &#8212; his AI advisor portfolio, his investor network from Stage 2 Capital, his exit history at EngageSmart. The output was a one-page profile of who Matt is, who he's already talking to, and what kind of person it would be a waste of his time to meet.</p><p>Every score on every tab grades against that file. Same rubric, three populations. That's the only reason any of this means anything.</p><h3>Every attendee at the conference, scraped and enriched</h3><p>Matt sent a screenshot. Some WhatsApp group from the conference had dropped a link: <em>&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.lovable.app</em>. Chili-palooza had built a Lovable app that listed every attendee &#8212; name, company, title, LinkedIn URL, all alphabetized A through Z.</p><p>Claude OCR'd the URL out of the screenshot. Loaded the Lovable app. Walked every letter section A&#8211;Z. Pulled 138 attendees into a CSV with name, title, company, and LinkedIn.</p><p>Then enrichment. For every attendee Claude pulled the full LinkedIn profile via RapidAPI &#8212; work history, location, headline, photo. Then the company side: what the company does, headcount, funding stage. Then FullEnrich for cell phone and personal email on every row.</p><p>That's one tab. 138 humans, every one of them with a phone, an email, a LinkedIn, a company description, and a photo. Matt didn't make this. He didn't pay for this. Chili-palooza handed him an A&#8211;Z directory and we turned it into a contactable spreadsheet in about fifteen minutes.</p><h3>Every Series A&#8211;D vertical SaaS startup that raised in the last year</h3><p>This tab has nothing to do with the conference. This tab is about the rest of Matt's year.</p><p>I host 501 public go-to-market playbooks at <a href="https://playbooks.blueprintgtm.com">playbooks.blueprintgtm.com</a>. Every one is a real vertical SaaS deal I've worked or modeled &#8212; the company, the segment, the pain, the data signal. Three years of pattern library.</p><p>I asked Claude: take all 501. Filter to the ones where the company itself raised Series A through D in the last twelve months &#8212; that's Matt's investing band. Find the CEO, the founder, the CRO, the president. Find their email. Find their phone. Score every one of them against Matt's same rubric.</p><p>It's an eight-stage pipeline. Each stage writes a checkpointed CSV so I can re-run any step. Stage 1 loads the 501. Stage 2 hits Exa for funding news on every domain and uses GPT-4o-mini to extract the round and date &#8212; 501 in, 54 out. Stage 3 resolves each surviving domain to LinkedIn via Blitz. Stage 4 runs Blitz's waterfall to find every CEO, Founder, CRO, and President &#8212; 169 contacts stacked across the 54 companies. Stage 5 enriches each contact's LinkedIn profile via RapidAPI. Stage 6 finds email and cell phone for all 169 &#8212; Blitz first, FullEnrich on the misses. Stage 7 grades every one with Sonnet 4.6 against Matt's rubric &#8212; fit score, fit band, the talking point. Stage 8 writes a tab on the same Google Sheet.</p><p>Matt's not getting a list. He's getting an ordered queue. The top is the call he should make Monday morning. The bottom is the people he should skip. Every row already has the talking point. He doesn't have to think about it. He has to dial.</p><h3>Every conference attendee scored against Matt &#8212; five swarm agents, six minutes</h3><p>Back to the 138 attendees. Out of 138 people, who should Matt actually walk up to.</p><p>This is where I stopped touching the keyboard and let agents do it. Blueprint Swarm: five Opus sub-agents in parallel, each one given Matt's profile and a chunk of the attendee list. The job for each sub-agent &#8212; read this attendee's LinkedIn, read Matt's rubric, score the fit 1&#8211;10, label it high/medium/low, write the reason, write a one-line conversation starter Matt could literally say to them at the bar.</p><p>Five agents, 138 attendees. About six minutes wall-clock.</p><p>Output: 33 <strong>high</strong>, 65 <strong>medium</strong>, 40 <strong>low</strong>. Every row had a paragraph of reasoning and a tailored opener. <em>"Curious how you're thinking about attribution for AI-driven outbound at Upside &#8212; at EliseAI we're wrestling with how to credit pipeline when an agent is doing 80% of the touches. Where does Upside draw the line?"</em> That kind of opener. Specific to that human, written by an agent that had read both their LinkedIn and Matt's bio.</p><p>Then Claude built a mobile-responsive HTML leadbook out of it. Photos, filters by tier, click-to-call, click-to-email, the conversation starter visible right on the card. Modeled after a leadbook I'd built for a previous client. Published it live with the publish-html skill so Matt could open it on his phone walking into the next session.</p><p>That's the third tab &#8212; same data, ranked, with the talking point.</p><h2>What this is not</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RMOZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RMOZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!RMOZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!RMOZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!RMOZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RMOZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;An empty stage versus a laptop staying on with a working list&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/196912752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An empty stage versus a laptop staying on with a working list" title="An empty stage versus a laptop staying on with a working list" srcset="https://substackcdn.com/image/fetch/$s_!RMOZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!RMOZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!RMOZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!RMOZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd9254a-3716-4167-bbc6-f2303e16e50f_1200x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>This is not a demo.</p><p>A demo is when you show someone the tool and they leave with a story. <em>"Jordan showed me Claude. It was cool."</em></p><p>This is when you show someone the tool and they leave with the work. <em>"Jordan and I built three lists. I'm calling forty of these people on Monday."</em></p><p>The difference is whether the thing you made survives the meeting.</p><p>Most demos don't. The screen goes dark. The slides go away. Nothing changes on Monday. &#8592; OPUS LOVES THIS FUCKING PATTERN! </p><p>What we did survives because Matt has it on his laptop. He has the GitHub repo &#8212; I invited his <em>braley-ai</em> handle so he owns the code. He has the Google Sheet shared to his email. He has a published HTML leadbook on his phone. He has a license to re-run the whole pipeline next time he goes to a conference.</p><p>The asset doesn't depend on me being in the room.</p><h2>The hour</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p-ZG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p-ZG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!p-ZG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!p-ZG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!p-ZG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p-ZG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Two people side by side at a laptop while the agent builds&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/196912752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two people side by side at a laptop while the agent builds" title="Two people side by side at a laptop while the agent builds" srcset="https://substackcdn.com/image/fetch/$s_!p-ZG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!p-ZG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!p-ZG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!p-ZG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d801274-9186-4e99-9f16-345fb524ed0a_1200x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>I want to be specific about the hour.</p><p>We didn't write any code by hand. I didn't pull up a notebook. We didn't open a Python file together.</p><p>I told Claude what we were doing. Claude scraped the Lovable app. Claude built the enrichment pipeline. Claude spun up the swarm. Claude wrote the HTML leadbook. Claude built the eight-stage playbook pipeline. Claude pushed every output to the same Google Sheet and to a published page.</p><p>I sat next to Matt the whole time and narrated. <em>"OK now we're scraping the directory. Now we're enriching contact data. Now the swarm is reading his profile. Now we're scoring 138 people against him in parallel."</em></p><p>Matt didn't need to learn anything. He needed to see the shape of it.</p><p>That's what showing Claude is. You sit next to someone. You tell the agent what you both want. The agent builds the thing. The other person watches the shape of the work and goes, <em>"Oh. That's how this is supposed to feel."</em></p><h2>Why I'm writing this down</h2><p>Because most of you, when somebody asks to see your tool, you still do a demo.</p><p>Stop.</p><p>Ask them what they need. Build it while they watch.</p><p>If you can't build it in an hour, your tool isn't ready. If you can build it in an hour and you're still doing slide decks, your job isn't selling &#8212; it's stalling.</p><p>The shift is small and total. Demos are about you. Builds are about them. One ends with a thank-you email. The other ends with three tabs, a published leadbook, and 169 vertical SaaS CEOs already scored against your rubric.</p><p>Matt's calling forty people on Monday. He didn't see Claude. He used it.</p><p>That's the only version of "showing Claude" I do anymore.</p><div><hr></div><h2>What Annual Adds</h2><p>This one was free. Paid gets the build. Annual gives you the tools that run it.</p><ul><li><p><strong>Every tool I ship.</strong> Edge Copilot installs to your Claude Code &#8212; talk to all my knowledge, every method, every data source. Current: Edge Copilot, AutoClaygent, Agent 7, Who to Target and What to Say, Blueprint Cloud, Technology Finder, Video List Extractor, Competitor Monitor. Whatever ships next is included.</p></li><li><p><strong>All 3 courses:</strong> GTM Engineer, Pain-Qualified Segments, The Inversion.</p></li><li><p><strong>Weekly office hours.</strong></p></li></ul><p>Run <em>/edge install agent-swarm</em> once your license key arrives &#8212; the swarm I used to score Matt's 138 attendees drops into your Claude Code in one command.</p><p>License key hits your email.</p><p><strong>&#8594; </strong><a href="https://edge.blueprintgtm.com/annual">Go annual &#8212; $2,499/yr</a> &#183; <a href="https://edge.blueprintgtm.com/subscribe">Start at $50/mo</a> <em>(most readers start here)</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://edge.blueprintgtm.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">On the Edge by Blueprint is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Here's How I Automated My Entire Substack]]></title><description><![CDATA[The full automation stack behind every post on On the Edge.]]></description><link>https://edge.blueprintgtm.com/p/heres-how-i-automated-my-entire-substack</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/heres-how-i-automated-my-entire-substack</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Sun, 03 May 2026 18:09:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6_4V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>May 3, 2026 &#183; Build log</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6_4V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6_4V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!6_4V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!6_4V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!6_4V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6_4V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png" width="728" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:728,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;40+ scripts&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="40+ scripts" title="40+ scripts" srcset="https://substackcdn.com/image/fetch/$s_!6_4V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!6_4V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!6_4V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!6_4V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df5f343-b8d1-48bd-aca5-c2b4dffc9fad_1456x1048.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></figure></div><p>Every post you've read on this Substack was touched by six separate systems before it reached your inbox. Not one of them is Substack's editor.</p><p>I didn't plan it this way. It started with a session capture hook &#8212; a script that fires at the end of every Claude Code session and logs what I built. That was March. By May I had 40+ scripts, 5 sub-skills, a 458-entry knowledge corpus, and a publishing pipeline that bypasses Substack's own tools because they can't render images correctly.</p><p>The whole thing runs for about fifty cents a post.</p><p>This is what's behind the curtain.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yH3W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yH3W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png 424w, https://substackcdn.com/image/fetch/$s_!yH3W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png 848w, https://substackcdn.com/image/fetch/$s_!yH3W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png 1272w, https://substackcdn.com/image/fetch/$s_!yH3W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yH3W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png" width="1200" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;$0.50 per post&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="$0.50 per post" title="$0.50 per post" srcset="https://substackcdn.com/image/fetch/$s_!yH3W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png 424w, https://substackcdn.com/image/fetch/$s_!yH3W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png 848w, https://substackcdn.com/image/fetch/$s_!yH3W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png 1272w, https://substackcdn.com/image/fetch/$s_!yH3W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4726c74b-45ed-485e-b4d4-2c332075f8dc_2400x960.png 1456w" sizes="100vw"></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><h2>The six systems</h2><p><strong>1. Session capture.</strong> A hook fires every time I close a Claude Code session &#8212; any session, any project, anywhere on my machine. It reads the transcript, extracts what tools I used, what files I touched, what topics I worked on. Tags everything to a taxonomy. Appends to a daily log. When enough sessions pile up on the same topic, the queue tells me I have material for a post.</p><p>I don't decide what to write about. The capture system tells me.</p><p><strong>2. Voice enforcement.</strong> Three files govern everything that sounds like me. A style guide extracted from 20+ transcript recordings. An anti-patterns list with 18 categories of words and patterns I never use &#8212; "game-changer," "leverage," "dive into," "unlock," all dead on arrival. And a translation map that catches internal jargon before it leaks into prose.</p><p>Every draft runs through automated grep checks before it gets near Substack. If it catches "methodology" or a bare CLI flag in narrative text, the draft blocks. No exceptions.</p><p><strong>3. Headline optimization.</strong> Every title scores on six axes: Specificity, Action Promise, Pattern Interrupt, Identity Signal, Curiosity Gap, Readability. The system generates 3-4 alternatives with subtitles and SEO titles, then runs demand research through Serper and Exa &#8212; what people actually search for, what questions they ask, how saturated the topic is on Substack.</p><p>Cost: four cents per research run. The 33-character rule is enforced automatically. Gmail mobile truncates there. If the first 33 characters of your title don't stand alone, you've already lost the open.</p><p><strong>4. Image generation.</strong> Every post gets images &#8212; no exceptions. One per 200-300 words. Half are AI-generated via Gemini (concept illustrations in the calligraphy aesthetic you see on every hero). Half are programmatic &#8212; HTML templates screenshotted through headless Chrome. Quote cards, stat cards, framework diagrams.</p><p>I built the programmatic pipeline because Gemini can't reliably produce stat cards with correct numbers. Turns out an HTML template with Playwright is more reliable than a diffusion model for data visualization. Who knew.</p><p><strong>5. Publishing pipeline.</strong> Substack's MCP tool can't render images. Its markdown-to-ProseMirror conversion puts image types in the wrong field and leaves critical attributes null. Images show up as raw text.</p><p>So I reverse-engineered the ProseMirror JSON schema and built a direct API publisher. It converts markdown to the exact node structure Substack expects. Uploads images to Substack's CDN, builds the JSON document, PUTs it directly to the API.</p><p>The auth is self-refreshing. A wrapper script pulls the session cookie from Chrome on every launch. No credentials stored on disk. No rotation. Sign in once in your browser, the pipeline handles the rest.</p><p><strong>6. Knowledge corpus.</strong> 458 entries organized in four layers &#8212; Resources, Ideas, Context, Evidence. Nine kinds of page. Every entry carries structured metadata with tier gating, bitemporal validity, and a closed vocabulary of 13 relationship types.</p><p>This is what Edge Copilot reads when subscribers ask it questions. The corpus is the brain. The Substack is the mouth.</p><h2>The numbers</h2><ul><li><p><strong>40+ scripts</strong> &#8212; Python, TypeScript, shell</p></li><li><p><strong>5 sub-skills</strong> &#8212; content generation, headline optimization, image generation, session capture, Slack recaps</p></li><li><p><strong>458 wiki entries</strong> &#8212; the Corpus behind Edge Copilot</p></li><li><p><strong>$0.50 per post</strong> &#8212; Whisper transcription + Gemini images + headline research</p></li><li><p><strong>$0.04 per headline research run</strong> &#8212; Serper autocomplete + Exa semantic search</p></li><li><p><strong>6 API keys</strong> &#8212; Anthropic, OpenAI, Google AI, Serper, Exa, Substack (cookie-based)</p></li></ul><p><em>&#8212; Written by Claude Opus 4.6, Approved by Jordan</em></p><div><hr></div><p>Below is how every piece connects &#8212; the architecture, the pipeline order, the APIs, the costs. Enough to understand the system. Not enough to clone it.</p><p>If you're a fellow Substack creator and want the actual repo, DM me on LinkedIn. This isn't part of the annual subscription. It's a separate conversation.</p><p>&#8594; <a href="https://edge.blueprintgtm.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a> &#183; <a href="https://edge.blueprintgtm.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a><em> (most readers start here)</em></p><div><hr></div>
      <p>
          <a href="https://edge.blueprintgtm.com/p/heres-how-i-automated-my-entire-substack">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Could We Have Seen the Churn Coming?]]></title><description><![CDATA[A parallel agent swarm read 1,200 dead accounts against five hypotheses. 19% were never in the target market.]]></description><link>https://edge.blueprintgtm.com/p/could-we-have-seen-the-churn-coming</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/could-we-have-seen-the-churn-coming</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Wed, 29 Apr 2026 17:50:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xYes!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.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_!xYes!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xYes!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!xYes!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!xYes!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!xYes!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xYes!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Agent swarm against churned accounts&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160568?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Agent swarm against churned accounts" title="Agent swarm against churned accounts" srcset="https://substackcdn.com/image/fetch/$s_!xYes!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!xYes!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!xYes!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!xYes!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd73730-1e50-4858-af60-347f7f8c29c6_1456x1048.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></figure></div><p><em>April 7, 2026 &#183; Build log</em></p><p>A vertical SaaS company has 1,200 churned accounts sitting in their CRM. Dead customers. Money that walked out the door. The CRO wants to know one thing before the board meeting: could we have seen any of this coming?</p><p>Not from internal usage data. Not from NPS scores. From the stuff anyone can pull up in a browser &#8212; public company registrations, Google profiles, BBB filings, LinkedIn, socials.</p><p>If the answer is yes, the churn problem isn't a churn problem. It's a qualification problem that got missed at the top of funnel.</p><p>So I pointed a swarm of research agents at it. All parallel. Each agent taking a single account and running it against the same five hypotheses &#8212; is this the right type of operator, is there a specific pain the product actually solves, are the stakeholders multi-seat or a one-person show, is there a real decision-maker on the deal, and does the company's age and operating footprint match the customers who stay. Validate or invalidate each one with public evidence. Write the findings as structured records. Move on.</p><p>Here's the tension. If I'm wrong &#8212; if churn really is random or driven by stuff you can only see post-sale &#8212; then this whole exercise is theater. The board gets a pretty report. Nothing changes. Sales keeps selling the wrong people and the bucket keeps leaking.</p><p>If I'm right, the sales team has been qualifying on vibes for years and nobody noticed.</p><p>The swarm came back. 19% of the churned accounts weren't even the right kind of operator. Not close. Wrong business registration category, wrong service model, the kind of miss you can spot in under a minute of browser research. That's sales closing deals they shouldn't have pitched.</p><p>Six signals survived the cut. Specific pain present. Multi-stakeholder engagement on the deal. Side-job operators versus full-time. Decision-maker absent from the call history. Deal velocity. Company age. Two signals I wanted to matter didn't &#8212; public review volume barely moved the churn rate, and whether they were switching from a named competitor barely moved it either. Cut them both. If it's not predictive, it doesn't belong in front of a board.</p><p>Then the report broke.</p><p>I'd handed the synthesis to Claude Opus in the afternoon. Clean HTML, charts, the whole thing. Opened it up in the evening and four signal bars were showing 0.0%. Opus was emitting percentages in a format the renderer didn't understand. Classic. I stopped trusting the synthesis layer and pulled the bar values directly from the raw per-account CSV. Bars came back.</p><p>The second problem was worse. The report listed churned account names in a recovery section with no way to actually act on them. A name in a PDF doesn't help a CS rep on Monday morning. So I embedded the underlying tables straight into the HTML as base64-encoded CSVs. One per archetype. One per closed-lost reason. One per risk tier. Every bucket with a count got a download button next to it. Each row carries the ICP score, the signals in plain English &#8212; switching from a named competitor, multi-stakeholder engagement &#8212; and the risk factors. Not codes. Not internal gate IDs. Words a human can read.</p><p>Last pass was the language audit. Opus had been helpful and creative, which is to say it had editorialized all over the thing. "ARR destroyed." "Ghost company." Names for the gating logic that read like internal Slack jokes. None of that goes in front of a board. I wrote a sanitizer that runs at render time. "Destroyed" becomes "lost to churn." Internal nicknames become plain descriptions of what the check actually does. If a board member has to ask what a word means, I've already lost them.</p><p>Shipped to a password-protected URL an hour before the meeting. The conservative-gate scenario pressure-tests next. If the model holds up when a skeptical CFO tries to poke holes in it, the sales team gets a new qualification checklist on Monday and 19% of their pipeline stops existing.</p><p>That's the right outcome. Smaller pipeline. Better close rate. Customers who actually stay. The board's job this week is to figure out if they believe it.</p><p>The lesson I keep relearning: a synthesis layer is a narrator. Narrators embellish. When the output is going to an executive audience, pull the numbers from the source, never from the narrator's summary.</p><p><em>&#8212; Written by Claude Opus 4.7, Approved by Jordan</em></p><div><hr></div><p>Below is the geeky version. Copy it into Claude Code and rebuild the whole thing yourself.</p><p>Or don't. Annual subscribers install the tool I actually built with one command &#8212; every tool I ship, all 3 courses, weekly office hours.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> <em>(most readers start here)</em></p><div><hr></div>
      <p>
          <a href="https://edge.blueprintgtm.com/p/could-we-have-seen-the-churn-coming">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Repo Was a Junk Drawer]]></title><description><![CDATA[Cleaning up a monorepo, breaking Vercel, and the one message that killed a draft.]]></description><link>https://edge.blueprintgtm.com/p/the-repo-was-a-junk-drawer</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/the-repo-was-a-junk-drawer</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Mon, 27 Apr 2026 20:33:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KA9G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.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_!KA9G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KA9G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!KA9G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!KA9G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!KA9G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KA9G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Repo cleanup&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Repo cleanup" title="Repo cleanup" srcset="https://substackcdn.com/image/fetch/$s_!KA9G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!KA9G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!KA9G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!KA9G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ba36e89-ee04-4976-b1c1-6be29ee1a443_1456x1048.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></figure></div><p><em>April 5, 2026 &#183; Build log</em></p><p>The repo looked like a junk drawer.</p><p>A dozen directories at the root with no organizing principle. Duplicate skill folders. A dead worker project sitting there like a ghost. Loose PNG files. A stray interview-prep HTML file parked next to the Vercel configs. I'd been meaning to clean it up for weeks.</p><p>You know the feeling. It's the codebase equivalent of that drawer in your kitchen with the batteries, the takeout menus, and one rubber band. You keep opening it. You keep closing it. You keep not dealing with it.</p><p>Today I dealt with it.</p><p>I kicked off three research agents in parallel &#8212; one auditing structure, one auditing Vercel deployments, one auditing symlinks. They came back with a full inventory. The plan wrote itself. Two buckets for skills &#8212; enrichment and blueprint. Four new top-level directories for tools, knowledge, infrastructure, and assets. One rule for the products with brand names: those stay at the root, where they belong.</p><p>Then I executed the moves in logical chunks.</p><p>Here's where it got ugly.</p><p>One of the subdirectories had a hidden Git directory tucked inside it. Which means it wasn't tracking as part of the monorepo at all. It was a repo hiding inside a repo, pretending to be a folder. I stripped it, added it back as a Git subtree, and wired the symlink so Claude Code could find the skill. That took three tries. The first two, I had the subtree pointing at the wrong ref. Git does not care about your feelings when you do this.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QlxU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QlxU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png 424w, https://substackcdn.com/image/fetch/$s_!QlxU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png 848w, https://substackcdn.com/image/fetch/$s_!QlxU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png 1272w, https://substackcdn.com/image/fetch/$s_!QlxU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QlxU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png" width="2400" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:600,&quot;width&quot;:2400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Pull quote: It was a repo hiding inside a repo, pretending to be a folder&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Pull quote: It was a repo hiding inside a repo, pretending to be a folder" title="Pull quote: It was a repo hiding inside a repo, pretending to be a folder" srcset="https://substackcdn.com/image/fetch/$s_!QlxU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png 424w, https://substackcdn.com/image/fetch/$s_!QlxU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png 848w, https://substackcdn.com/image/fetch/$s_!QlxU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png 1272w, https://substackcdn.com/image/fetch/$s_!QlxU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a412465-87cf-43be-a20d-20a8b3830c06_2400x600.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The marketing site problem hit right after the push. When I'd committed the marketing site nested inside the Blueprint Cloud project, the Next.js compiler decided the marketing pages were Blueprint Cloud routes. Vercel build broke. Red everywhere.</p><p>The fix: untrack it, move it to the repo root as a first-class product directory next to the other brand-name products, and guard it in gitignore so nobody nests it again. Then I updated the project docs so the next person &#8212; probably me, in three weeks, with no memory of today &#8212; knows why it lives there and why it's manual-deploy-only.</p><p>That was session one. Session two was this thing. On the Edge.</p><p>The design question was simple and hard: how do you make a Substack sound like me and not like a polished pundit blog? I've read those. You've read those. They all sound the same because they all start with "In today's rapidly evolving landscape" and end with three bullet points nobody will remember.</p><p>The answer was to start at the capture layer, not the writing layer.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Za7U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Za7U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png 424w, https://substackcdn.com/image/fetch/$s_!Za7U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png 848w, https://substackcdn.com/image/fetch/$s_!Za7U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png 1272w, https://substackcdn.com/image/fetch/$s_!Za7U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Za7U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png" width="2400" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:600,&quot;width&quot;:2400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Pull quote: The answer was to start at the capture layer, not the writing layer&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Pull quote: The answer was to start at the capture layer, not the writing layer" title="Pull quote: The answer was to start at the capture layer, not the writing layer" srcset="https://substackcdn.com/image/fetch/$s_!Za7U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png 424w, https://substackcdn.com/image/fetch/$s_!Za7U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png 848w, https://substackcdn.com/image/fetch/$s_!Za7U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png 1272w, https://substackcdn.com/image/fetch/$s_!Za7U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc875d4c-d55d-499e-8537-dc607c028c79_2400x600.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>I built a Claude Code hook that fires every time a session ends. It reads the transcript, tags the work against a <a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f">taxonomy tree I'd mapped out</a>, and writes the session into a daily log. A queue file holds readiness scores so I can see which topics are warming up. Then the principles file &#8212; no fabrication, clients are sacred, information ink. A section and topic tree. An anti-patterns file pulled straight from transcript analysis, so the thing knows what I'd never say. <a href="https://www.linkedin.com/in/kylecnorton/">Kyle Norton</a> got his own page (I ripped all he has ever said &#8212; and gave it to him so he could use it.)</p><p>The notification rule: stay quiet unless five sessions pile up on the same topic, or eight total. I do not need another tool pinging me.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0mpO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0mpO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png 424w, https://substackcdn.com/image/fetch/$s_!0mpO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png 848w, https://substackcdn.com/image/fetch/$s_!0mpO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!0mpO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0mpO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png" width="2400" height="1200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1200,&quot;width&quot;:2400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Flow diagram: The Capture System&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Flow diagram: The Capture System" title="Flow diagram: The Capture System" srcset="https://substackcdn.com/image/fetch/$s_!0mpO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png 424w, https://substackcdn.com/image/fetch/$s_!0mpO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png 848w, https://substackcdn.com/image/fetch/$s_!0mpO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!0mpO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d1626c-5397-48bb-b875-3ee088485b2b_2400x1200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>Then came the unlock. And it came from one message.</p><p>I'd written a first draft that morning about pain segments. It read fine. It sounded like me. It was also completely made up &#8212; a composite campaign with invented numbers, the kind of thing that sounds real but isn't. I was about to ship it.</p><p>Then I got a note from Jacob: <em>"Last week I ran two campaigns. Same ICP. One got 1.2% positive replies. The other got 11.4%."</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hc3t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hc3t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png 424w, https://substackcdn.com/image/fetch/$s_!Hc3t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png 848w, https://substackcdn.com/image/fetch/$s_!Hc3t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png 1272w, https://substackcdn.com/image/fetch/$s_!Hc3t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hc3t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png" width="2400" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:600,&quot;width&quot;:2400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;11.4 percent positive reply rate&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="11.4 percent positive reply rate" title="11.4 percent positive reply rate" srcset="https://substackcdn.com/image/fetch/$s_!Hc3t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png 424w, https://substackcdn.com/image/fetch/$s_!Hc3t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png 848w, https://substackcdn.com/image/fetch/$s_!Hc3t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png 1272w, https://substackcdn.com/image/fetch/$s_!Hc3t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb78b2b77-96ea-4b1f-9941-90e44c046cbc_2400x600.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Real numbers. Real campaigns. And my draft had nothing to do with either one.</p><p>I deleted it.</p><p>That's the rule now, baked into the capture layer: never invent the scenario. Write from what actually happened or don't write. The next pain-segment post goes out when there's a real session to anchor it to. Not before.</p><p>A Substack that invents the example proves you're a writer. A Substack that only writes what actually happened proves you're a practitioner. Those are different products. Only one is worth reading.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-wAQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-wAQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png 424w, https://substackcdn.com/image/fetch/$s_!-wAQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png 848w, https://substackcdn.com/image/fetch/$s_!-wAQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png 1272w, https://substackcdn.com/image/fetch/$s_!-wAQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-wAQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png" width="2400" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:800,&quot;width&quot;:2400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Comparison: Two types of Substacks&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Comparison: Two types of Substacks" title="Comparison: Two types of Substacks" srcset="https://substackcdn.com/image/fetch/$s_!-wAQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png 424w, https://substackcdn.com/image/fetch/$s_!-wAQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png 848w, https://substackcdn.com/image/fetch/$s_!-wAQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png 1272w, https://substackcdn.com/image/fetch/$s_!-wAQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb11d3f-fd71-4ac6-91f2-0836890d9523_2400x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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><em>&#8212; Written by Claude Opus 4.7, Approved by Jordan</em></p><div><hr></div><p>Below is the geeky version. Copy it into Claude Code and rebuild the whole thing yourself.</p><p>Or don't. Annual subscribers install the tool I actually built with one command &#8212; every tool I ship, all 3 courses, weekly office hours.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> <em>(most readers start here)</em></p><div><hr></div>
      <p>
          <a href="https://edge.blueprintgtm.com/p/the-repo-was-a-junk-drawer">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Analysis Was Done. Then I Noticed Zero Call Transcripts.]]></title><description><![CDATA[How I caught a 2,400-account analysis running on pure CRM metadata before it shipped.]]></description><link>https://edge.blueprintgtm.com/p/the-analysis-was-done-then-i-noticed</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/the-analysis-was-done-then-i-noticed</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Mon, 27 Apr 2026 00:16:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!54Mk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.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_!54Mk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!54Mk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!54Mk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!54Mk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!54Mk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!54Mk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Build log hero&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160289?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Build log hero" title="Build log hero" srcset="https://substackcdn.com/image/fetch/$s_!54Mk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!54Mk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!54Mk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!54Mk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ab21cfd-417e-405d-b552-560e2c450d12_1456x1048.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></figure></div><p><em>March 26, 2026 &#183; Build log</em></p><p>"Wait, wait, wait. You have zero call transcripts."</p><p>That was me, mid-session, staring at a finished churn analysis. Three years of customer data. 2,400-plus accounts classified. Churn patterns, active health, deal counts, all split by tier. The agents had run. The report script had opened. Every dossier looked complete.</p><p>Then I scrolled. Five customer voice snippets per account. No transcripts. None.</p><p>The whole thing was CRM metadata wearing a costume.</p><p>Here's the thing. We had 72,000-plus call recordings sitting in the database. Over 500 megabytes of actual human conversations. Churned customers explaining why they left. Champions describing botched onboardings. The reason we pulled those recordings in the first place. And the agents had ignored all of it, because the dossiers they were reading from had five snippets stapled on top of CRM fields and called it a day.</p><p>It's like hiring a detective, handing them the suspect's LinkedIn, and asking them to solve the murder.</p><p>So I killed it. Started over.</p><p>A parallel session had been doing the right thing in the background &#8212; enriching every dossier with the actual call transcripts. While that ran, I wrote four new agent definitions: a churn forensics pass, an active health pass, a churn classifier, and an auditor that sits on top of the whole thing. Plus a batch preparation script and a status monitor. Nothing fancy. Just the plumbing to <a href="https://edge.blueprintgtm.com/p/i-built-a-swarm-to-read-every-call">fan work out across a lot of agents and catch them when they lie</a>.</p><p>Before I launched eight hundred-plus agents, I tested three accounts by hand.</p><p>One rich account with sixteen transcripts. Confidence score came back at 0.92. Eighteen verbatim quotes. A full story about a champion who got burned by onboarding. That's what good looks like.</p><p>One metadata-only account. Confidence: 0.35. The auditor correctly flagged it as a data quality disaster &#8212; 167 timeline entries misattributed from other accounts. The agent didn't try to make something up. It said "this is broken" and moved on.</p><p>One thin account with almost nothing. Confidence: 0.15. Output: "Unknown / Insufficient Data." No fabrication. No hallucinated insight. Just silence, which is exactly what I wanted.</p><p>All three passed. Ship it.</p><p>The final swarm: over eight hundred agents across two tracks. Churn forensics on one slice of accounts. Active health on another. Originally I'd assigned the thinnest accounts to Haiku to save money. I was wrong about that. A thin account deserves the <em>best</em> read of whatever scraps exist, not the cheapest. A thin dossier is harder to read well, not easier. I reassigned everything to Opus and launched in waves of ten.</p><p>If I'd shipped that first version to the client, the deck would have read clean. Charts, percentages, churn reasons ranked by frequency. It would have been convincing. And every conclusion would have been built on structured field data from a CRM nobody trusts, instead of the seventy-thousand-plus recordings of customers actually telling us what happened.</p><p>That's the failure mode with agent work. The output looks done. The files exist. The JSON is valid. The dashboard renders. You have to actually read what went in.</p><p>One quick aside from later that night. I pulled up the agent-swarm skill and spent thirty minutes writing plain-English copy for it &#8212; ten numbered steps, a three-sentence pitch. Not for a report. Just so I could explain to someone why fanning out across parallel Opus agents with a mandatory auditor beats one giant context window trying to hold everything. The short version: you test on three before you fan out to eight hundred, and the auditor catches the fabrications before they hit your output.</p><p>Next up: wait for the remaining batches to land, run synthesis across the full account list, and read the damn transcripts this time.</p><p><em>&#8212; Written by Claude Opus 4.7, Approved by Jordan</em></p><div><hr></div><p>Below is the geeky version. Copy it into Claude Code and rebuild the whole thing yourself.</p><p>Or don't. Annual subscribers install the tool I actually built with one command &#8212; every tool I ship, all 3 courses, weekly office hours.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> <em>(most readers start here)</em></p><div><hr></div>
      <p>
          <a href="https://edge.blueprintgtm.com/p/the-analysis-was-done-then-i-noticed">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Phase That Wasn't There]]></title><description><![CDATA[Five working pipeline phases. A conspicuous hole at the front. Here's what I found when I went looking.]]></description><link>https://edge.blueprintgtm.com/p/the-phase-that-wasnt-there</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/the-phase-that-wasnt-there</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Wed, 22 Apr 2026 22:54:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3c7f66b4-d7af-4725-8233-18bd5f9ebb6c_1456x1048.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_!h9wu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h9wu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!h9wu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!h9wu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!h9wu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h9wu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Phase 0 architecture&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160258?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Phase 0 architecture" title="Phase 0 architecture" srcset="https://substackcdn.com/image/fetch/$s_!h9wu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!h9wu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!h9wu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!h9wu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc61ad7b-98f9-464e-ba77-17da2dec82e5_1456x1048.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></figure></div><p><em>March 24, 2026 &#183; Build log</em></p><p>Every vertical I've built this year started the same dumb way. Fire departments. Chiropractic software buyers. 3PL logistics. Each time I'd sit down and hunt for data sources by hand. Score them in my head. Pick an anchor. Hope I picked right.</p><p>Three builds. Three different patterns. Zero shared code.</p><p>My pipeline had six phases on paper. Five of them worked. The sixth &#8212; the one at the very front, source discovery &#8212; was an empty file and some comments in a doc. The most important decision in the entire system was getting made on vibes.</p><p>I didn't want to just build it. I wanted to see the hole from the outside first.</p><p>So I asked Claude to explain the whole pipeline back to me in plain English. The six-phase arc. The dual-file schema &#8212; canonical for salespeople, enriched for everything else. The sub-agents. Then the question that mattered: what's not built?</p><p>Phase 0. No scorer. No registry. No build planner. Nothing.</p><p>Here's what bugged me. I <em>had</em> done source discovery. Three times. It just lived in my head and in three different codebases that didn't talk to each other. The fire department work ran through ten phases and about eighty-nine scripts, all anchored to a national incident registry. The chiropractic build used Google Maps plus a federal provider registry with address-based fuzzy matching. The logistics work needed multi-attempt domain resolution &#8212; fuzzy first, then <strong><a href="https://serper.dev/">Serper</a></strong>, then <a href="https://exa.ai/">Exa</a>, then <a href="https://www.openwebninja.com/">OpenWebNinja</a> &#8212; because single-pass resolution shits the bed on messy company names.</p><p>Same shape every time. A scored anchor source, a universal entry point, a plan. I just kept rebuilding it from scratch like an idiot.</p><p>I sent three agents in parallel to read the three old builds and tell me what they had in common. Patterns came back fast. Every successful build had the same implicit structure &#8212; I'd just never externalized it.</p><p>So I built Phase 0 that afternoon. A schema module for the constants &#8212; source categories, access methods, pipeline phases. A source-discoverer sub-agent. A scorer with a four-criteria rubric: coverage, website presence, data quality, cost. Plus a registry, a field mapper, a build planner, a research adapter, and an init.</p><p>Four verification tests. All four passed on the first real run.</p><p>The national fire incident registry scored 70 and ranked first &#8212; which is exactly right, because that's the anchor I'd actually used when I built that vertical by hand. The scorer matched my intuition on the one build I knew cold. That's the only way you trust a scorer the first time you turn it on: you make it explain a build you already understand, and you check whether it agrees with you.</p><p>Here's the part that actually mattered, and I almost missed it.</p><p>My first instinct was to treat Phase 0 as a one-time thing &#8212; the step you run when you start a new vertical. That's wrong. This needs to run for <em>everything</em>. Every re-run. Every refresh. Every time the data landscape shifts under a vertical I already built. Data sources disappear. New ones show up. Costs change. Coverage changes. If Phase 0 is only the kickoff, you've frozen the pipeline to whatever was true the day you launched it.</p><p>The source registry isn't a kickoff step. It's the universal front door. Updated all four architecture docs to say so before I closed the laptop.</p><p>Next up: Phase 1 ingestion. Pull the winning anchor into the canonical companies file and kick off the enrichment waterfall. But that's tomorrow.</p><p>The thing I keep re-learning: the build that matters is usually the one that turns a pattern you keep repeating into a thing that repeats itself.</p><p><em>&#8212; Written by Claude Opus 4.7, Approved by Jordan</em></p><div><hr></div><p>Below is the geeky version. Copy it into Claude Code and rebuild the whole thing yourself.</p><p>Or don't. Annual subscribers install the tool I actually built with one command &#8212; every tool I ship, all 3 courses, weekly office hours.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> <em>(most readers start here)</em></p><div><hr></div>
      <p>
          <a href="https://edge.blueprintgtm.com/p/the-phase-that-wasnt-there">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The $148 Scrape That Found 34,677 Customers]]></title><description><![CDATA[And the $0 one that found 80 Jira tenants. Why they can't swap.]]></description><link>https://edge.blueprintgtm.com/p/the-148-scrape-that-found-34677-customers</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/the-148-scrape-that-found-34677-customers</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Wed, 22 Apr 2026 22:40:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/03d56eb8-7095-493e-aa5b-86d95cbb51d5_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>April 22, 2026 &#183; Build log</em></p><p>Last year I ran the same question against two SaaS vendors: who uses this thing?</p><p>Jira: 80+ confirmed customer tenants. Three hours. $0.</p><p>Jane App, a patient-portal EHR: 34,677 practice domains across sixteen platforms. One afternoon. $148 all in.</p><p>Different cost. Different tools. Different technique entirely. And if I'd tried Jira's technique on Jane App, I'd have gotten zero. Vice versa.</p><p>That's the most expensive lesson in vendor-customer discovery, so learn it off my dime: <strong>silver bullets are vendor-architecture-dependent.</strong> Before you write a scraper, you have to diagnose what kind of vendor you're hunting.</p><p><strong>Family A &#8212; the embed trick.</strong> EHR vendors ship JavaScript and iframes that practices paste into their own websites. The embed is the product. Jane App's value to a practice is the booking widget that lives on <em>yourclinic.com/book</em> &#8212; the practice doesn't move to <em>janeapp.com</em>, they integrate Jane's code into their site.</p><p>That means every Jane App customer's website contains Jane's code in its HTML source. Every one. PublicWWW indexes 516 million pages of HTML. Query: <em>"cdn.janeapp.com"</em>. Get back every site that loads Jane's script. Thirty queries across sixteen EHR platforms cost $148 and returned 34,677 domains at 80%+ precision.</p><p><strong>Family B &#8212; the tenant trick.</strong> Jira Cloud doesn't embed in customer sites. Every Jira customer gets their own subdomain: <em>acme.atlassian.net</em>, <em>beta-corp.atlassian.net</em>, fifty thousand of them. PublicWWW finds zero of those tenants. It finds Atlassian's own marketing site and some blog posts that link to <em>acme.atlassian.net</em>. Not customers.</p><p>What works: Common Crawl has crawled the web 121 times. Each crawl writes a CDX index listing every URL it hit. Query all 121 indices for **.atlassian.net*. You get a noisy list of candidate subdomains.</p><p>Then the dagger. Atlassian returns a specific HTTP header on 404s for tenants that don't exist: <em>atl-missing-tcs: true</em>. For tenants that DO exist, that header is absent. Run a HEAD probe against each candidate. Binary 1/0 confirmation. No false positives, no false negatives. Three hours, 80+ confirmed tenants. $0.</p><p><strong>Family C &#8212; the logo wall.</strong> Most enterprise B2B vendors display customer logos on a <em>/customers</em> or <em>/case-studies</em> page. Near-100% precision because the vendor's legal team approved every logo. Crawl the page once, extract names from alt-tags, resolve to domains. Marketing teams can't help themselves.</p><p>Here's the asymmetry. PublicWWW query for <em>"atlassian.net"</em> returns Atlassian's own marketing pages. Not customers. Customers don't embed Atlassian's HTML &#8212; they ARE Atlassian, at a subdomain Atlassian itself hosts. Family B HEAD probes against Jane App sweep for **.janeapp.com* subdomains Jane doesn't use. Generic 404 with no signature header. Zero. Family C scrape on a vendor without a customer page &#8212; zero.</p><p>The scraper isn't broken. The scraper is matched to the wrong architecture. The fix isn't more queries, better regex, or a more expensive tool. The fix is diagnosis first.</p><p>That's the whole lesson. Three families. Ask which one applies before you write anything. Yes to "does it embed in customer HTML?" &#8594; Family A. Yes to "does it host customers at subdomains with a tell?" &#8594; Family B. Yes to "does it publish a customer page?" &#8594; Family C. No to all three &#8594; you need a swarm, not a silver bullet.</p><p>Diagnose first. Scrape second.</p><p><em>&#8212; Written by Claude Opus 4.7, Approved by Jordan</em></p><div><hr></div><p>Below is the geeky version. Copy it into Claude Code and build the whole thing yourself.</p><p>Or don't. Annual subscribers don't build it. They type the vendor name into Claude Code and the tool shows up.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> <em>(most readers start here)</em></p><div><hr></div>
      <p>
          <a href="https://edge.blueprintgtm.com/p/the-148-scrape-that-found-34677-customers">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How I built Edge Copilot to Put Jordan in Your Terminal]]></title><description><![CDATA[Every /edge call was starting from scratch. Eleven hours later, the skill had memory.]]></description><link>https://edge.blueprintgtm.com/p/how-i-built-edge-copilot-to-put-jordan</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/how-i-built-edge-copilot-to-put-jordan</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Wed, 22 Apr 2026 18:58:13 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/79898c6c-cab2-478d-b8df-de22a7251306_1456x1048.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_!LuR6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LuR6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!LuR6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!LuR6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!LuR6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LuR6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Corpus constellation&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160915?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Corpus constellation" title="The Corpus constellation" srcset="https://substackcdn.com/image/fetch/$s_!LuR6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!LuR6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!LuR6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!LuR6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb0f377-17ea-417b-864b-26fd14b38c43_1456x1048.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></figure></div><p><em>April 13, 2026 &#183; Build log</em></p><p>Here's the thing nobody tells you about shipping an AI product: the problem isn't the model. The problem is memory.</p><p>Every time a subscriber typed <em>/edge</em> into their terminal, Claude was starting from scratch. No sense of what I'd written. No sense of what I'd built. No sense of the years of actual work sitting on my desktop. Just a menu of six commands and a shrug.</p><p>That's a search bar with extra steps. That's not me in your terminal.</p><p>So I read a Karpathy gist yesterday about LLM-maintained wikis. Raw sources stay immutable. The model keeps a set of structured pages. A schema file governs the rules. Read it twice. Thought: that's the thing. Not a vector store. Not a RAG pipeline. A wiki with a contract.</p><p>Then one idea compounded four times before I slept.</p><p><strong>First compound: the schema.</strong> Before writing a single page, I needed to know what a page even was. I pushed four research agents at the problem in parallel &#8212; one mapping how other people have solved it (Obsidian, MemGPT, Graphiti), one grounded in my actual transcripts and articles, one pressure-testing what a single pattern page should look like, one arguing about how tools should live alongside concepts.</p><p>They came back with the taxonomy I wanted. I named it RICE &#8212; Resources, Ideas, Context, Evidence. Nine kinds of entries. Thirteen ways they connect. Three tiers &#8212; free, paid, annual &#8212; baked into the page itself, not bolted on at the API. Pages never get deleted, only invalidated. That last rule matters more than it sounds: the wiki gets to be wrong on purpose, because wrong-and-visible teaches better than missing.</p><p><strong>Second compound: it had to actually work end to end.</strong> I walked the full subscriber flow &#8212; register, email, install, verify, lookup &#8212; and hit two bugs that would have burned everyone. The subscriber sync was regenerating user IDs on every run, which meant every license key died every time the cron fired. Silent, recurring, catastrophic. The fix was obvious once I saw it. The lesson wasn't: anything that runs on a schedule and touches identity should be a read-then-update, never a blind write. I've shipped that bug three times in different products this year. Locking it in as a pattern now.</p><p><strong>Third compound: the voice layer caught me leaking.</strong> A parallel session flagged that I was letting internal vocabulary into subscriber prose &#8212; schema words like "entities" and "primitives" and numbered section IDs. Words that mean something to me and nothing to a reader. If your internal nouns reach the reader, you've built a database, not a product.</p><p>So I wrote a translation map. Every internal noun gets a reader-facing substitute. "Entity" becomes "page." A grep check runs before publish. Three places the leak gets caught before anyone sees it. This is the boring work that separates a thing I built for myself from a thing someone else can use.</p><p><strong>Fourth compound: fill it, then change the interaction.</strong> I ran a six-pass sweep across my active work &#8212; verticals, data sources, tools, patterns, people &#8212; and wrote the whole thing into the wiki. That part was mechanical.</p><p>The part that wasn't mechanical: the old <em>/edge</em> was a menu. You picked a command. You got a thing. The new <em>/edge</em> is presence. You type anything &#8212; a question, a project, a half-formed idea &#8212; and the skill reads what you're working on, finds the closest page in what I've written, pulls the content into Claude's context, applies it to your situation, quotes me directly, ends with one sharpening question.</p><p>Pull. Reason. Apply. Not "here's a link to an article." More like &#8212; what would I say if I were reading over your shoulder right now.</p><p>There's also a watch mode. Flip it on and the skill fires on every tool call you make, checks what you're doing against the wiki, writes a one-line hint into your status bar if you're touching something I've already solved. Ambient, not interruptive. The terminal itself becomes the reminder.</p><p>I rate-limited it hard. 50 full-page fetches per subscriber per day. Auto-kill at 100 requests in 10 minutes, because somebody was always going to try to scrape it. These limits aren't about cost &#8212; they're about forcing the skill to be selective. If you can pull everything, you pull everything, and then nothing is signal. The cap makes the skill choose.</p><p>Here's the shift that matters, at least to me: subscribers aren't searching anymore. They're being remembered to.</p><p>Search is a question you ask. Memory is a voice that shows up when you need it. Those are different products. One gives you a list of blue links. The other pulls an opinion into the room you're already in.</p><p>Every RAG pipeline I've seen tries to make search feel like memory by stapling a chat interface on top. It doesn't work. The model is still retrieving strings and hoping they're relevant. The subscriber is still the one doing the reasoning.</p><p>A wiki with a contract inverts it. The model maintains the pages. The pages know what tier they are. The skill knows when to surface them. The subscriber just works, and the right context shows up on its own.</p><p>That's what I'd been trying to build for months and couldn't name. A gist from Karpathy named it in one read.</p><p><em>&#8212; Written by Claude Opus 4.7, Approved by Jordan</em></p><div><hr></div><p>Below is the geeky version. Copy it into Claude Code and rebuild the whole thing yourself.</p><p>Or don't. Annual subscribers install the tool I actually built with one command &#8212; every tool I ship, all 3 courses, weekly office hours.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> <em>(most readers start here)</em></p><div><hr></div>
      <p>
          <a href="https://edge.blueprintgtm.com/p/how-i-built-edge-copilot-to-put-jordan">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Supabase Key Was in the Source Code]]></title><description><![CDATA[One security fix, one junk-data purge, and a 100x coverage jump on a vertical SaaS detection build.]]></description><link>https://edge.blueprintgtm.com/p/the-supabase-key-was-in-the-source</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/the-supabase-key-was-in-the-source</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Fri, 17 Apr 2026 22:29:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a47ced71-8fb1-4ea1-b3b5-1ef734d49909_1456x1048.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_!RIEy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RIEy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!RIEy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!RIEy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!RIEy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RIEy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Build Log 2026-04-01 hero&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Build Log 2026-04-01 hero" title="Build Log 2026-04-01 hero" srcset="https://substackcdn.com/image/fetch/$s_!RIEy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!RIEy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!RIEy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!RIEy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ee1663c-b339-4275-bfe4-ddb672500c34_1456x1048.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></figure></div><p><em>April 1, 2026 &#183; Build log</em></p><p>Opened Claude Code and found a Supabase service key hardcoded as a fallback in 3 Python files inside a client repo. Not in an env file &#8212; in the source code, committed, visible to every collaborator on the project. Anyone with read access could upload anything to my Supabase storage. The fix took about 20 minutes: strip the hardcoded values, commit, push. But the key was still in git history. So I had Supabase disable the legacy JWT keys entirely and issued new ones. Then updated <em>~/.env</em> locally, Vercel env vars, and Modal secrets. One incident, five places to patch. Lesson: fallback values in source code are just hardcoded secrets with extra steps.</p><p>While that was in flight, I ran a playbook audit on <em>playbooks.blueprintgtm.com</em>. The domain search index had grown to 615 entries, and a chunk of them were junk &#8212; 28 "Not a Match" rejection pages, empty stubs with "No messages generated" in the play sections, and auto-generated test entries. Pulled all 615 through a content checker, removed 106 bad entries, brought the index down to 509. Also found 2 empty stubs in the showcase catalog &#8212; both had the framework scaffolding but zero plays &#8212; and removed them. Catalog went from 503 to 501.</p><p>The longer session was a technology detection build for a vertical SaaS client. The problem: a database of ~32K records had only 6.3% coverage on which technology each account was running. I knew the data was there &#8212; 55,097 scraped web pages sitting on disk from an earlier crawl. The original keyword scan had missed most of it because the fingerprints were too shallow. So I wrote <em>enrich_tech_scan_scraped.py</em>: a regex scanner that runs 22 vendor fingerprint configs against every local file. Each vendor config has primary keywords, secondary keywords, URL patterns, and known customer page structures. No API calls, no cost, just pattern matching against what we already had.</p><p>The real win came from a different script &#8212; an async subdomain prober. One vendor's customer portals all follow a predictable URL pattern &#8212; a department identifier as the subdomain. I had a list of ~196K department identifiers. The probe fired a HEAD request per identifier, filtered out DNS errors (no portal) from HTTP 200s (live portal). Ran at 211 requests per second. Result: 705 confirmed portals, up from 6-9 known. That's a 100x increase in coverage for a single vendor, in under an hour of compute time. The regex scan was still running through state directories &#8212; I/O bound, reading 55K small JSON files &#8212; so I committed all 4 scripts and let it finish overnight.</p><p>Next: run the scan to completion, merge all sources, and see what combined coverage looks like across those 32K records.</p><div><hr></div><h2>What Annual Adds</h2><p>This is what I built today. Annual subscribers run the same tools.</p><ul><li><p><strong>Every tool I ship.</strong> Edge Copilot installs to your Claude Code &#8212; talk to all my knowledge, every method, every data source. Current: Edge Copilot, AutoClaygent, Agent 7, Who to Target and What to Say, Blueprint Cloud. Whatever ships next is included.</p></li><li><p><strong>All 3 courses:</strong> Who to Target and What to Say, Agent 7, AutoClaygent.</p></li><li><p><strong>Weekly office hours.</strong></p></li></ul><p>License key hits your email after you upgrade.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong></p>]]></content:encoded></item><item><title><![CDATA[I Went to the Pool. The Swarm Did the Work.]]></title><description><![CDATA[Rule-based shipped fast. AI found what the rules missed &#8212; and doubled the at-risk bucket.]]></description><link>https://edge.blueprintgtm.com/p/i-went-to-the-pool-the-swarm-did</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/i-went-to-the-pool-the-swarm-did</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Fri, 17 Apr 2026 02:35:38 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f24439a4-1813-4602-8a00-73c1e66fc702_1456x1048.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_!p_w7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p_w7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!p_w7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!p_w7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!p_w7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p_w7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec54094d-27fe-4654-a763-43456572257b_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Build Log 2026-04-03 hero&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160514?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Build Log 2026-04-03 hero" title="Build Log 2026-04-03 hero" srcset="https://substackcdn.com/image/fetch/$s_!p_w7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!p_w7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!p_w7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!p_w7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec54094d-27fe-4654-a763-43456572257b_1456x1048.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></figure></div><p><em>April 3, 2026 &#183; Build log</em></p><p>Left Claude Code running and went to the pool. That's the sentence that describes most of April 3.</p><p>Before I left, I handed off a clean task: find the updated Blueprint Swarm skill, run the full pipeline, publish the playbooks. No subprocess calls, no Anthropic API &#8212; just the Agent tool, the way the swarm is designed to run. The orchestrator picked it up from there.</p><p>First thing it did: pull fresh revenue data from the CRM. Prep the full active account base across classification batches. Then run a rule-based pass first to get the playbooks published fast &#8212; three playbooks shipped to playbooks.blueprintgtm.com before the AI agents even finished their first wave. That's the lazy phase. Get something out the door while the better work runs in parallel.</p><p>The better work: AI agents on the same batches. The comparison was instructive. Rule-based put about a third of the at-risk accounts in the "Engage or Lose" bucket &#8212; accounts showing silent disengagement signals. The AI put roughly twice as many there. The rules were miscategorizing those accounts as product issues or payment problems because they pattern-matched on keywords. The AI read the full context and recognized the difference between a keyword and a root cause. The "Engage or Lose" bucket doubled in size. The playbooks got republished with the corrected distribution.</p><p>Then the swarm stayed running through the night &#8212; hundreds of batches of churned account forensics, five accounts per batch. Peak throughput hit sub-4 minutes per batch. One consistent pattern across the entire run: CRM labels were symptom labels, not root-cause labels. An account tagged "Charges and Fees" turned out to be a bankruptcy. An account tagged "Product" was a sales misrepresentation. An account tagged "Unresponsive" was a ghost that had never activated. The AI flagged the mismatch every time; the rules would have just inherited the bad label.</p><p>Next: run the same pass over active accounts and see if the pattern holds.</p><div><hr></div><h2>What Annual Adds</h2><p>This is what I built today. Annual subscribers run the same tools.</p><ul><li><p><strong>Every tool I ship.</strong> Edge Copilot installs to your Claude Code &#8212; talk to all my knowledge, every method, every data source. Current: Edge Copilot, AutoClaygent, Agent 7, Who to Target and What to Say, Blueprint Cloud. Whatever ships next is included.</p></li><li><p><strong>All 3 courses:</strong> Who to Target and What to Say, Agent 7, AutoClaygent.</p></li><li><p><strong>Weekly office hours.</strong></p></li></ul><p>License key hits your email after you upgrade.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong></p>]]></content:encoded></item><item><title><![CDATA[Six Research Agents Before One Line of Code]]></title><description><![CDATA[Building the thing subscribers install into their own Claude Code &#8212; without architecting it wrong]]></description><link>https://edge.blueprintgtm.com/p/six-research-agents-before-one-line</link><guid isPermaLink="false">https://edge.blueprintgtm.com/p/six-research-agents-before-one-line</guid><dc:creator><![CDATA[Jordan Crawford]]></dc:creator><pubDate>Fri, 17 Apr 2026 01:47:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cb285146-15c7-4507-896a-9f7763ead864_1456x1048.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_!a5Kh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a5Kh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!a5Kh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!a5Kh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!a5Kh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a5Kh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Build Log 2026-04-12 hero&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gtmontheedge.substack.com/i/194160901?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Build Log 2026-04-12 hero" title="Build Log 2026-04-12 hero" srcset="https://substackcdn.com/image/fetch/$s_!a5Kh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!a5Kh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!a5Kh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!a5Kh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffea7c8ab-1cd0-4ead-9ef4-0d3b6136a9f3_1456x1048.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></figure></div><p><em>April 12, 2026 &#183; Build log</em></p><p>Six research agents before I wrote a single line of code. That's how April 12 started. I wanted to build Edge Copilot &#8212; the Claude Code extension annual subscribers get &#8212; and I didn't want to architect it wrong. So I ran three explore agents first (Claude Code's hook system, the AutoClaygent auth flow, the existing Substack content setup), then three design-and-critique agents (architecture, GTM engineer persona, CRO buyer persona). Both critique agents independently said the same thing: don't make it "always watching." Make it pull-based &#8212; subscribers invoke it when they need it. That shaped everything.</p><p>The build itself took one session. I adapted AutoClaygent's license key pattern &#8212; same <em>OTE-</em> prefix format, same Supabase lookup &#8212; and wired it to a Vercel API with seven routes: <em>register</em>, <em>verify</em>, <em>index</em>, <em>content</em>, <em>feedback</em>, <em>usage</em>, and <em>sync</em>. Type-checked clean on the first pass. Deployed to <em>edge-copilot.blueprintgtm.com</em>. Then the right question came up: how do people actually get their key? The Substack subscriber API has no endpoint to check if a specific email is paid. So I built a Stripe webhook instead &#8212; same pattern as AutoClaygent, catches the annual subscription event, generates the key, emails it via Resend. Sent a test email to confirm the flow. The whole thing was live and returning a proper 401 before we hit a DNS snag that resolved itself in under ten minutes once the CNAME pointed at Vercel.</p><p>While Edge Copilot was being built, a parallel session published the first On the Edge post &#8212; "I Built a Swarm to Read Every Call" about the Blueprint Swarm open-source repo. The Substack MCP tool was silently stripping all inline formatting: bold text passed through as literal asterisks, links rendered as raw text. I dug into the source at <em>post_handler.py</em> and found the bug on line 1289 &#8212; <em>_extract_text_from_content()</em> was stripping all marks before handing off to the paragraph builder. The fix: bypass that pipeline entirely and use <em>Post.from_markdown()</em> from the underlying python-substack library, which handles inline formatting correctly. Patched it. Cleared the bytecache. The post went live with working bold, links, and code blocks.</p><p>Two more skills shipped before midnight. The Headline Optimizer: four Opus research agents (Cannonball GTM historical data, Substack-specific mechanics, timeless copywriting principles, demand research APIs), then a demand scoring script that runs Serper Autocomplete across 26 alphabetical queries plus Exa Reddit and FindSimilar calls &#8212; total cost ~$0.04/run. Ten headline frameworks ranked by B2B relevance, the 33-character Gmail truncation rule baked in, the dual-title system documented. Symlinked and wired into the existing <em>/on-the-edge</em> skill so it auto-runs on every draft. The Image Generation sub-skill came next: Gemini for hero and concept images, HTML-to-Playwright-screenshot for programmatic quote cards, stat cards, and diagrams. Built the Fraunces font setup, watermark compositing, five HTML templates, and three <em>uv run --script</em> Python scripts. First watermarks were invisible against dark backgrounds &#8212; the purple "OTE" had a 2.1:1 contrast ratio. Fixed it by generating gold monochrome watermarks from the original brush-stroke asset and bumping opacity to 18%.</p><p>The last fix of the day was the ugliest to discover: the Stripe webhook for playbooks.blueprintgtm.com had been failing for three weeks. Twenty-two deliveries, twenty-two failures. The signing secret in Vercel didn't match the endpoint's actual secret in the Stripe dashboard. Pulled the right value, updated the env var, redeployed, verified the endpoint returned the correct error on a malformed test POST. Then added a Vercel cron that runs every 6 hours and checks seven components &#8212; Supabase connectivity, Stripe API and webhook config, Anthropic credit balance, stuck jobs, failure rate, and webhook delivery &#8212; alerting to <em>#pipeline-alerts</em> in Slack if anything breaks. Next: watch whether the webhook actually catches a live subscription before trusting it.</p><div><hr></div><h2>What Annual Adds</h2><p>This is what I built today. Annual subscribers run the same tools.</p><ul><li><p><strong>Every tool I ship.</strong> Edge Copilot installs to your Claude Code &#8212; talk to all my knowledge, every method, every data source. Current: Edge Copilot, AutoClaygent, Agent 7, Who to Target and What to Say, Blueprint Cloud. Whatever ships next is included.</p></li><li><p><strong>All 3 courses:</strong> Who to Target and What to Say, Agent 7, AutoClaygent.</p></li><li><p><strong>Weekly office hours.</strong></p></li></ul><p>License key hits your email after you upgrade.</p><p>&#8594; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=monthly">Start at $50/mo</a></strong> &#183; <strong><a href="https://gtmontheedge.substack.com/subscribe?utm_source=ote&amp;utm_medium=tier-block&amp;utm_content=annual">Go annual &#8212; $2,499/yr</a></strong></p>]]></content:encoded></item></channel></rss>