<?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>Tue, 21 Apr 2026 08:58:20 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[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://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" 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://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" 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://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" 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>