<?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[Table For One: Vibe Coding Lab]]></title><description><![CDATA[Ready to paste agents and skills that will help you be smarter and more productive.]]></description><link>https://substack.jointableforone.com/s/vibe-coding-lab</link><image><url>https://substackcdn.com/image/fetch/$s_!FgKk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff291ffc6-e72f-4864-95e0-0d566d07cfd5_1280x1280.png</url><title>Table For One: Vibe Coding Lab</title><link>https://substack.jointableforone.com/s/vibe-coding-lab</link></image><generator>Substack</generator><lastBuildDate>Sat, 12 Sep 2026 00:57:14 GMT</lastBuildDate><atom:link href="https://substack.jointableforone.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Durva Mathure]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[hello@jointableforone.com]]></webMaster><itunes:owner><itunes:email><![CDATA[hello@jointableforone.com]]></itunes:email><itunes:name><![CDATA[Durva Mathure]]></itunes:name></itunes:owner><itunes:author><![CDATA[Durva Mathure]]></itunes:author><googleplay:owner><![CDATA[hello@jointableforone.com]]></googleplay:owner><googleplay:email><![CDATA[hello@jointableforone.com]]></googleplay:email><googleplay:author><![CDATA[Durva Mathure]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Interview System That Saves You Weeks Of Building The Wrong Thing]]></title><description><![CDATA[I wasted weeks on a feature nobody wanted. Now this agent synthesizes my user interviews so that I never make that mistake again.]]></description><link>https://substack.jointableforone.com/p/the-interview-system-that-saves-you</link><guid isPermaLink="false">https://substack.jointableforone.com/p/the-interview-system-that-saves-you</guid><dc:creator><![CDATA[Durva Mathure]]></dc:creator><pubDate>Thu, 13 Aug 2026 00:51:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c36be089-b9ef-4cf5-8532-5874578a1d85_3600x1890.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8q_G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8q_G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png 424w, https://substackcdn.com/image/fetch/$s_!8q_G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png 848w, https://substackcdn.com/image/fetch/$s_!8q_G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png 1272w, https://substackcdn.com/image/fetch/$s_!8q_G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8q_G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26094,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/210841373?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8q_G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png 424w, https://substackcdn.com/image/fetch/$s_!8q_G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png 848w, https://substackcdn.com/image/fetch/$s_!8q_G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png 1272w, https://substackcdn.com/image/fetch/$s_!8q_G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225cc408-74a1-451a-bc5b-e5536f47923f_1584x396.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p style="text-align: center;"><strong><a href="https://tally.so/r/44Gy4k"><span data-color="#d4943a" style="color: rgb(212, 148, 58);">Join Table for One</span></a></strong> | <strong><a href="https://oneplease.substack.com"><span data-color="#d4943a" style="color: rgb(212, 148, 58);">Other Articles</span></a></strong></p><div><hr></div><p>I have wasted weeks of my time, my engineer&#8217;s time, and my startup&#8217;s money building the wrong thing.</p><p>Not because I was building in an echo chamber. Not because I wasn&#8217;t conducting enough customer interviews. Because I wasn&#8217;t using the information I already had properly.</p><p>Let me explain.</p><p>The case for user interviews is that it keeps you close to the problem of the people who are actually going to pay you.</p><p>And the standard advice on how it should go is as follows:</p><ol><li><p>Define your hypotheses and your open questions</p></li><li><p>Find your ideal target customers</p></li><li><p>Build rapport, focus on behavior, find more information about their problems and do not disclose the product</p></li><li><p>Synthesize your findings</p></li><li><p>Identify the features required for your MVP</p></li></ol><p>Now for whatever reason, there are hundreds of thousands on videos and articles on conducting the interview. From how to find the people to what to ask. But you can hardly find anything on the synthesis of the information you get during the interview.</p><p>And I see most founders, including me, get this wrong. We think we are not biased. We try not to think about the solution or the features we cooked up in our heads. But we are wrong.</p><p>Our biases do creep in!</p><p>After reading forty minutes of transcripts and seeing the comments that sound like agreement, we choose to let them stay with us. We miss the thing she said she does. We miss the confused questions she asked. We even miss the hesitation she had to pay for a solution. And We draw a conclusion from what we want to notice.</p><h1>Getting Users To Talk Is The Easy Part</h1><p>Understanding what exactly they need is more difficult.</p><p>No matter what you do, you cannot achieve this result via a form. On a form people fill in what you put in front of them, so you can write the most open ended question in the world and still only hear back about the thing you already thought to wonder about. Your blind spots stay exactly where they were.</p><p>The ability to synthesize the right information from your user interviews is a serious skill. If you can do that, you can see which hypothesis actually moved and which open questions are still sitting there.</p><p>It could be the difference between building something people use and something they seem excited about but don&#8217;t actually want.</p><h1>Capture What You Heard</h1><p>So how do you &#8220;synthesize information&#8221; from the interview? What do you even look for? What do you need to update?</p><p>Well I am sharing what I know, what I have done, and what has worked for me. I am not claiming to be an expert in this. So do not come after me!</p><p>Okay&#8230; You have 40 minutes of transcripts. Now what?</p><p>If you go through it looking for the bits that agree with you, you WILL find them. And users are not trying to mislead you. They are just polite or helpful or genuinely clever. So the information they give you is something you want to hear.</p><p>Usually I try to avoid these typical signs:</p><ul><li><p>The polite comments like &#8220;I would definitely use that&#8221;, &#8220;I could see myself paying for it&#8221; or something similar that promises a payment in the future. Unless they already pay for something of a solution in time or money, the promise doesn&#8217;t mean anything.</p></li><li><p>The helpful comments that suggest a feature like &#8220;Oh you should build a dashboard&#8221; or &#8220;Can we click a picture of the fridge.&#8221; Some of them are genuinely helpful but some of them could be enthusiasts. You need to be able to differentiate.</p></li><li><p>The expert comments without context like &#8220;oh yes this is a problem&#8221; or &#8220;someone should solve it.&#8221; These people could have seen the issue and their thoughts could help you. But if this person is not the end user, then their support might not mean as much.</p></li></ul><p>The entire job of synthesizing the transcripts is basically to understand:</p><ul><li><p>Which hypotheses are getting stronger</p></li><li><p>Which open questions are getting answered</p></li><li><p>What evidence am I collecting</p></li><li><p>And what evidence do I still need to get</p></li></ul><p>But a few interviews in when you are frustrated and can&#8217;t think straight, things can get a bit muddled up.</p><p>But lucky for us, we can train AI to do this job! We can make it an unbiased synthesizer of information. So the thing I am going to show you today is how to train Claude or ChatGPT to do the unbiased pattern recognition for you.</p><h1>Build It Yourself</h1><p>Everything below is a step by step method that you can use in either Claude or ChatGPT. I personally prefer Claude over ChatGPT. But you do you!</p><p>You do not need to know how to code. You just have to paste the instructions in the box into your chat/code terminal.</p><h3>Step 1: Building The Brain</h3><p>Before you build any skill, you need a company brain.</p><p>Don&#8217;t worry I am not asking you to build anything convoluted. Just a simple structure to store your information and to give the skill a place to drop the documents it creates.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1iqj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1iqj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png 424w, https://substackcdn.com/image/fetch/$s_!1iqj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png 848w, https://substackcdn.com/image/fetch/$s_!1iqj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png 1272w, https://substackcdn.com/image/fetch/$s_!1iqj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1iqj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png" width="538" height="460.40384615384613" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1246,&quot;width&quot;:1456,&quot;resizeWidth&quot;:538,&quot;bytes&quot;:181388,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/210841373?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25999f8d-62c1-4257-a2b9-10ddcdc58f5c_2400x2040.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!1iqj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png 424w, https://substackcdn.com/image/fetch/$s_!1iqj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png 848w, https://substackcdn.com/image/fetch/$s_!1iqj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png 1272w, https://substackcdn.com/image/fetch/$s_!1iqj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b7c5966-ca53-404b-a25d-3c6a04880989_2021x1730.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>A format of how I had structured my startup brain</em></figcaption></figure></div><p>This image is the exact snapshot of how I had structured my startup brain. You don&#8217;t have to create all the files. All you need to create are the folders.</p><p>A few rules to follow when you create a brain:</p><ol><li><p>Store everything as an MD file. MD files are plain text files your AI can open, read and rewrite without a conversion step in between. The file size is small and it saves you a lot of tokens as compared to a pdf.</p></li><li><p>Fix the filenames. It is a boring rule but a bit of structure right now goes a long way when you have tons of information to deal with.</p></li><li><p>Number the files you save. Number your interview transcripts like &#8220;interview-01-sam.md&#8221; or &#8220;interview-01.md.&#8221; A level of organization will genuinely help you a lot later on.</p></li></ol><p>You can also paste this instruction in Claude Code/codex or claude cowork to create it for you:</p><div class="callout-block" data-callout="true"><h6><code>Create a folder called &lt;your-startup&gt;-brain, in a location I will give you.<br>Inside it, create these folders and nothing else: customer/, customer/interviews/, customer/snapshots/, product/.<br><br>Then create one file at the top level called _brain.md holding four lines.<br>The startup name, my name, today&#8217;s date, and &#8220;v1&#8221;.<br><br>Ask me where to put it before you create anything, and show me the exact path you are about to use.</code></h6></div><h3>Step 2: Creating The Skill</h3><p>Now moving onto the skill itself. This is the one that reads the transcript and tells you what moved. </p><p>So paste this in:</p><div class="callout-block" data-callout="true"><h6><code>I want to build a reusable skill that synthesizes my customer interviews. Save it so I can run it again on every new transcript. Here is the job.<br><br>WHAT IT DOES<br>It reads an interview transcript against what I already believed and tells me what changed. Which of my hypotheses got stronger, which got weaker, which ones the interview killed outright, which open questions got answered, what new questions opened that I had not thought to ask, and whether this person is even the customer I think I am building for.<br><br>Never delete anything. Every finding gets an id, a status and a strength, and stays in the brain permanently. When something is overturned, mark the old entry superseded with the reason, and keep it.<br><br>THE FILES IT OWNS<br>Create any of these that do not exist yet, inside my brain folder:<br><br>  product/hypotheses.md           what I believe, with a verdict per run<br>  customer/open-questions.md      what I don&#8217;t know, and how far I have got<br>  customer/evidence-ledger.md     every observable point, with a count<br>  customer/interview-insights.md  one dated section per interview<br>  customer/voice-of-customer.md   their words next to mine<br>  customer/jtbd.md                the job they are hiring the product for<br>  customer/snapshots/             one file per interview<br>  _log.md                         one line every time you run<br><br>Nothing else writes to these files. Append under dated headings.<br><br>WHAT YOU DO ON EVERY RUN, IN THIS ORDER<br>1. Write a snapshot for each new interview into customer/snapshots/, using the exact same filename as the transcript. Open it with the plain facts about the person, in this order: name, gender, age, role, company, company size, when we met, and how I found them. Every one of those fields is optional and every one is allowed to say &#8220;not recorded&#8221;. Fill in only what the transcript states outright or what I have told you directly. Then who they are in their own words, the single sharpest verbatim quote, and what they said, what they did, and what you concluded, kept apart.<br>2. Pull the evidence out into customer/evidence-ledger.md.<br>3. Give every hypothesis in product/hypotheses.md a verdict for this run. Strengthened, weakened, unchanged with no evidence either way, or falsified. Name the evidence each verdict rests on. Add any new hypothesis this interview revealed, and for each one write what would prove it wrong. &#8220;No evidence either way&#8221; is a real verdict, not a gap.<br>4. Update customer/open-questions.md. Four columns: the question, the answer so far, the evidence behind it, and whether it is open, partly answered, answered, or dead. Add the new questions this interview opened. Separately, list the questions to go back to this person with.<br>5. Write their actual language into customer/voice-of-customer.md. Two columns, how I say it and how they said it, verbatim. Only phrases that genuinely appear in the transcript.<br>6. Write the job they are hiring the product for into customer/jtbd.md as a verb, an object, and a context. No adjectives, no feature names. If you cannot write one from this transcript, write none and say so.<br>7. Write up the run itself into customer/interview-insights.md as one new dated section per interview. Append it, never overwrite the sections above it.<br><br>If I hand you an interview you have already processed, load what you wrote last time first and update it in place, keeping the ids. Do not start over.<br><br>BEFORE YOU BUILD ANY OF IT<br>Interview me. Ask no more than two questions per message, and wait for my answer each time.<br><br>Ask me what the product is. What I believed going into these interviews, two or three beliefs, one line each. What I was hoping the interviews would answer. And in one line, who I thought these people represent.<br><br>Write my answers into product/hypotheses.md and customer/open-questions.md as real entries, not as a chat log.<br><br>Then build the skill and show me where you put it.</code></h6></div><p>I always add an interview step in the skills I make. It might feel like boring admin work but if you do not have a brain folder or a way to give specific context, getting your AI to interview you is always a good idea. </p><h3>Step 3: The Rules</h3><p>These are important for this skill. It will keep it honest and reliable even when you want to process more information.</p><p>Feel free to add your own rules in the script too:</p><div class="callout-block" data-callout="true"><h6><code>Add these rules to the skill. They apply on every run.<br><br>Read before you write. Open the existing files first, then update them. Never overwrite. Append under a dated heading.<br><br>Quotes are retrieved, never generated. Verbatim only, with who said it and which interview it came from. Never shortened, never tidied up for grammar. If you cannot find a real quote for a point, say so.<br><br>Keep three things apart and never blend them. What they SAID, in their own words. What they DID, meaning something that actually happened, with a count. What you INFERRED, linked back to the row it came from. A claim about their own behaviour is a said. It becomes a did only when something they actually did backs it up.<br><br>Score every piece of evidence 0 to 5 and never add the scores up. 0 is a compliment, or something they say they would do. 1 is a story about one time. 2 is a repeated complaint. 3 is a workaround they built and still use. 4 is a workaround they pay for. 5 is money already spent, or a behaviour I watched happen. A hundred 0s are not a 5.<br><br>Use denominators. &#8220;Two of six people&#8221;, never &#8220;users say&#8221;. If a transcript was thin, still count it in the denominator, and name it as thin.<br><br>Tag every field EVIDENCE or ASSUMPTION.<br><br>Report weak signal, no signal, and anything that contradicts me. A hypothesis that never came up on its own is a real finding, not a failed run.<br><br>Never invent gender or age. Not from a name, not from a voice, not from how someone writes. &#8220;not recorded&#8221; is a correct answer.<br><br>End every run with three readings. The case for, built only from what is actually in the transcripts. The case against, which is the alternative explanation and the thing that would embarrass me in six months. And what the data alone says, with counts and no adjectives, allowed to conclude &#8220;not enough data to say&#8221;.<br><br>Then tell me what the run cannot tell me. The denominator, which transcripts were thin, whether I watched any of this happen or only heard about it, and whether my beliefs were written down before the interviews or made up at the start of the run.</code></h6></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mPVf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mPVf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png 424w, https://substackcdn.com/image/fetch/$s_!mPVf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png 848w, https://substackcdn.com/image/fetch/$s_!mPVf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!mPVf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mPVf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png" width="1456" height="655" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:655,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171512,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/210841373?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mPVf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png 424w, https://substackcdn.com/image/fetch/$s_!mPVf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png 848w, https://substackcdn.com/image/fetch/$s_!mPVf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!mPVf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3399e8d2-0da3-4b24-aa6a-de67581f6719_3200x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Step 4: The Difference Between Good And Bad</h3><p>Most people that make skills don&#8217;t really focus on the output. They create the skill and then try to fix it once something breaks. That is one way to do it. Another way that I like is to already define what a good vs bad output is.</p><p>So this way you skip the initial back and forth.</p><div class="callout-block" data-callout="true"><h6><code>Here is my quality bar. Grade your own output against it before you save anything.<br><br>Bad:<br>&#8220;Users absolutely love the checkout screen and think the layout is intuitive.&#8221;<br>&#8220;Technicians don&#8217;t use the app because they are lazy and prefer texting.&#8221;<br><br>[If you find more examples, add them here. The more specific they are the better.]<br><br>Three failures in those two lines. An opinion filed as an observation. A character flaw standing in for a barrier. And no count, no moment, nothing anybody could act on.<br><br>Good:<br>&#8220;4 of 5 sustainability officers abandoned the automated upload at step 3 and manually uploaded a CSV instead, citing a legal requirement for human audit before cloud storage.&#8221;<br><br>[If you find more examples, add them here. The more specific they are the better.]<br><br>One observable action, at a named moment, with a count and a denominator, and nothing at all about how anyone felt.<br><br>Now write me three more good examples and three more bad ones in this shape, using my product and my customers. The bad ones should be the plausible kind, the ones that look fine at a glance, not the obviously broken kind.</code></h6></div><p>You can even ask the AI to write its own examples for good and bad so that you can grade them. </p><h3>Step 5: The First Run</h3><p>The best thing to have before the first run is a list of hypotheses and a list of assumptions. It is important for the skill to know what it is that you what to understand.</p><p>Once everything is set up, drop your transcripts in the interviews folder and run the skill. </p><div><hr></div><p><em>This article is a part of an AI Workforce that I am building for early-stage founders. Every Tuesday, I will share a functional task that makes your job easier. Below this is a ready to use task file. This file gives you three things: the interview synthesizer, the validation dashboard (so you don&#8217;t have to read MD files), and the persona builder (so you know what kind of people you are catering to). It is available to all the paid subscribers and it is the first (of 55) tasks from the AI Workforce Map.</em></p><div><hr></div><h1>Ready To Use</h1><p>Above this was the instruction to build one skill. But we are not building skills.</p><p>A task, the way I have structured it, is the whole job rather than one step of it. The task, Capture What You Heard, sits inside Validate The Idea and has three skills in total.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pnoN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pnoN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png 424w, https://substackcdn.com/image/fetch/$s_!pnoN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png 848w, https://substackcdn.com/image/fetch/$s_!pnoN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!pnoN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pnoN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209077,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/210841373?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pnoN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png 424w, https://substackcdn.com/image/fetch/$s_!pnoN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png 848w, https://substackcdn.com/image/fetch/$s_!pnoN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!pnoN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b5530b-cf88-4b70-bf39-da2c3b3d96e5_3000x1800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>The current map of Validate The Idea</em></figcaption></figure></div><ol><li><p>The Interview Synthesizer. The one I wrote about above. This skill sharpens your hypotheses, answers what it can, collects evidence for you and files all of these things for you to see.</p></li><li><p>The Validation Dashboard. This dashboard is a way to see your validation journey. The output generated by every skill in Validate The Idea can be seen here.</p></li><li><p>The Persona Builder. It groups the people you talked to based on their behavior and their triggers so that you can start to see past demographics.</p></li></ol><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://substack.jointableforone.com/subscribe?&quot;,&quot;text&quot;:&quot;Upgrade&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">This part has the ready to download skill files. Upgrade to access them.</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="Upgrade"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>This is one of the 55 tasks that I am building. The next one is Study Your Competition. It is also a package of three but it has one agent and two skills.</p><p>If you build it and something breaks, reach out. And if there are some tasks that you want me to build for instead, tell me!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://substack.jointableforone.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">Table For One 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></p><p></p>]]></content:encoded></item><item><title><![CDATA[How To Validate Your Startup Idea Quickly?]]></title><description><![CDATA[You Have A Startup Idea? Perfect. Here's What To Do Immediately After.]]></description><link>https://substack.jointableforone.com/p/how-to-validate-your-startup-idea</link><guid isPermaLink="false">https://substack.jointableforone.com/p/how-to-validate-your-startup-idea</guid><dc:creator><![CDATA[Durva Mathure]]></dc:creator><pubDate>Sat, 18 Jul 2026 23:22:26 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e2870ae4-d7ab-4334-a8c8-e487ece70c75_3600x1890.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>How many days would it take you to go from &#8220;I have an idea&#8221; to &#8220;I talked to 5 potential users&#8221;? 1 month? 1 week? 1 day?</p><p>In my opinion, it should be a matter of hours!</p><p>Over the last 2 years, I have worked on 8 ideas. 5 were pivots and versions of my old startup, and 3 came after I closed the business, all three in just the last 2 months.</p><p>Across all 8, I have been trying to perfect one thing: <strong><span data-color="#d4943a" style="color: rgb(212, 148, 58);">how fast I can go from an idea to actually talking to potential users.</span></strong></p><p>The first one took 3 months to go from an idea in my head to an actual conversation with a user, because I wanted to walk in with something finished. I never once stopped to ask whether they wanted my solution, or whether they even had the problem I assumed they had.</p><p>The one I am building right now already has 17 people testing it from day 1. Every one of them is giving me feedback, on the name, the design language, the features, and a few have already started referring their friends and family.</p><p>And that, in my opinion, is the right way to build.</p><p>So how do I pull that off? It is not magic. It just takes a little strategy and a little courage.</p><p>Today, I want to share my strategy.</p><div><hr></div><h1>The Prompts</h1><p>Everything in this process runs in a Claude or ChatGPT chat on any model.</p><p>The only part that takes some time and a little courage is getting real people to answer a survey. Real people who are ideally strangers.</p><p>Because responses trickle in over days the priority from day one is getting the survey out as fast as possible.</p><p>But before you start with the first prompt, write your hypothesis down on paper. I want you to write what you think the problem is, what you think people are doing about it today, and what you think the potential solutions could be.</p><p>Do it before you do anything else. Because everything that follows is created to prove or disprove your opinions.</p><p>Once you have that, copy these into your AI chat in order.</p><h2><strong>Prompt 1: Refining Your Thoughts</strong></h2><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;2965db9a-e79f-40d8-bef6-c52fd0448b36&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">You are my validation partner for the next five days. We're going to stay in this one chat the whole time, so keep everything we produce here in mind as we go.

I have an early startup idea and I need to pressure-test it before I build anything.

Here's my raw idea:
[DESCRIBE YOUR IDEA IN 3&#8211;5 SENTENCES: the problem you think exists, who has it, and what you're thinking of building]

And here's what I already wrote down by hand, before any data:
[YOUR OWN FIRST DRAFT: what you think the problem is, what you think people do about it today, what you think the solution could be. Paste it rough. If you skipped this, go write it now.]

Your job: interview me to turn this into a clear one-page validation brief.

Rules:
- Ask me ONE question at a time. Wait for my answer before the next one. Don't dump a list.
- Keep going until you can fill every section below. Push on anything vague: if I say "small businesses," ask which ones.
- Don't be a cheerleader. If something sounds like a guess, call it a guess.
- Where my handwritten draft and my answers disagree, point it out.

Interview me until you can confidently fill in:
- The core problem (one sentence, in the user's words, not mine)
- Who exactly has it (specific: role, situation, not "everyone")
- How painful it is today and what they do instead (workaround / competitor / "nothing")
- My core hypothesis (the belief that, if wrong, kills the idea)
- My proposed solution (one sentence)

When you have enough, stop asking and output a document titled VALIDATION BRIEF with:
- Problem statement
- Target user (specific)
- Current alternatives
- My hypotheses (rewrite mine clearly)
- 3&#8211;5 additional hypotheses I haven't named but that this idea secretly depends on, the hidden assumptions that could sink it
- Riskiest assumption (the single thing most likely to be false, we test this first)
- Where this user already hangs out online (specific subreddits, communities, Slacks, forums, hashtags), I'll use this to find people
- Kill / Pivot / Continue criteria: what survey + research result would make you tell me to kill this, pivot it, or keep going? Give me concrete thresholds now, before I see any data.

Call it the VALIDATION BRIEF and refer back to it by that name for the rest of this chat. Do not quietly revise it later; if something we learn contradicts it, say so out loud.

Start by asking me your first question.</code></pre></div><h2><strong>Prompt 2: Fast Landscape Scan</strong></h2><pre><code><code>Using the VALIDATION BRIEF above, do a fast landscape scan with web search. 15 minutes of work, not a deep report. The deep one comes later.

I only need three things, in plain language, no jargon:
1. Is this problem already perfectly solved? List the top 3&#8211;5 things people use today (products, tools, hacks, spreadsheets) and one line on where each falls short.
2. Are there signs people actually want it fixed, complaints, workarounds, high-engagement threads? Give me 2&#8211;3 real examples with links.
3. Based on what you found, what 2&#8211;3 things should my survey probe that I might not think to ask?

Keep it under one screen. Bullets. End with Green / Yellow / Red light to keep going, and one sentence why.

If anything here contradicts the brief, say so plainly instead of smoothing it over.</code></code></pre><h2><strong>Prompt 3: Build The Survey</strong></h2><pre><code><code>Now build me a short validation survey I can drop straight into Tally or Google Forms. Use the VALIDATION BRIEF and the landscape scan above, especially the riskiest assumption and anything the scan told us to probe.

Non-negotiable rules:
- 5 questions. Aim for exactly five; 7 is the absolute ceiling and you need a reason to go past five. Every extra question costs responses.
- Default shape: 4 multiple-choice or scale questions, and at most ONE open-ended question that lets the person talk in their own words.
- Test my riskiest assumptions first, not my solution.
- Ask what people do and pay today, not what they would do. ("How do you handle X today?" not "Would you use a tool that&#8230;?")
- Neutral wording. Don't lead the witness, don't suggest the answer inside the question, don't sell my idea anywhere in the survey.
- Ask for name and email at the end, after every real question.

Give me, ready to paste:
1. Survey title (plain, not salesy)
2. Short description (2 sentences, what it's about + how long it takes, e.g. "Takes 90 seconds")
3. The 5 questions, each with type (multiple choice / scale / open text) and answer options
4. The final optional email question, worded well
5. One line under each question naming which hypothesis it tests, and what a good vs bad answer looks like, so I can read the first few responses live and know whether a question is pulling its weight</code></code></pre><p>I would say ask for a name and an email last, after every real question. In my surveys this single change cut drop-off by 15 to 20 percent. Because identity requests up front make a form feel like a lead capture instead of a two-minute favor.</p><p>Another thing to remember is that you want to ask people what they do and pay for today, not what they would do if your solution existed. Because behavior is a far better predictor than what someone says they would do.</p><p>My own sweet spot is five questions with three multiple-choice and two open-ended, descriptive questions. And I always build my surveys in <a href="https://tally.so"><span data-color="#d4943a" style="color: rgb(212, 148, 58);">Tally</span></a> with the Pro version. It is so worth the money. It shows partial submissions, so you still get signal from someone who drops off halfway. And I also get to observe how the first few people answer, so I can cut, rewrite, or drop a question mid-survey.</p><h2><strong>Prompt 3b: Optional Mid-survey Feedback</strong></h2><pre><code><code>Here are the first responses that came in:
[PASTE THE FIRST 3&#8211;5 RESPONSES, partial ones included]

Against the hypotheses each question was meant to test: which questions are actually pulling their weight, and which are giving me mush? For anything weak, tell me whether to cut it or rewrite it, and give me the rewrite. Keep the count at five.

If people are dropping at a particular question, say which one and why you think so.</code></code></pre><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.jointableforone.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.jointableforone.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Prompt 4: The Deep Research</strong></h2><pre><code><code>While I collect survey responses, do the deep market research. Use full research mode and web search, dig properly. But the report must be written for someone who knows nothing about this industry.

Work from the VALIDATION BRIEF above, and test every hypothesis in it, mine and the ones you added. Don't re-litigate the landscape scan, go deeper than it.

Research rules:
- Do the heavy research, then translate it. Zero jargon. If you must use a term, define it in five words.
- Assume I know nothing about this market. Explain like you're telling a smart friend at a coffee shop.
- Every section starts with &#9889; TL;DR, do this: 1&#8211;3 concrete action items, not a summary.
- For each hypothesis: what the evidence suggests + confidence (High / Medium / Low) + one line why.

Structure the report exactly like this:
1. Is the problem real? (evidence people actually struggle with this)
2. Who has it, and how many (rough size in plain numbers, "roughly X million people / Y thousand businesses," not TAM/SAM jargon)
3. What they use today (the real competition, including "a spreadsheet" and "they just live with it")
4. Why now (what changed, why it hasn't been solved)
5. Reasons this could flop (be honest, the red flags)
6. Hypothesis scorecard (table: hypothesis &#8594; evidence &#8594; confidence)

End with a VALIDATION CHECKLIST + SCORE:
- 8&#8211;10 yes/no checks (e.g. "Is the problem frequent?", "Do people already pay to solve it?", "Is there a wedge competitors miss?")
- A score out of 10
- A one-line verdict: Strong signal / Mixed / Weak, and what would have to be true to move up a tier.

This score is a prediction, not the verdict. We'll compare it to what real people say at the end of the week.</code></code></pre><h2><strong>Prompt 5: The Final Analysis</strong></h2><pre><code><code>Survey responses are in. Give me the final validation call, using the VALIDATION BRIEF, the landscape scan, and the deep research report from earlier in this chat.

Raw survey responses (CSV):
[PASTE CSV, include partial submissions if your form captures them, and mark them as partial]

Do this:
1. For each question, tell me what the responses actually say, in plain language. Flag anything surprising. Note how many people left an email at the end and treat that percentage as a demand signal.
2. Go back to the Kill / Pivot / Continue criteria you set in the brief, before either of us had seen any data. Did the data hit them? Quote the thresholds back to me and be strict. Don't let me talk myself into it, and don't move the bar because the result is close.
3. Score each hypothesis: Supported / Mixed / Not supported (survey + research combined).
4. Cross-check: where do the survey and the research agree, and where do they contradict? Contradictions are where the real insight is. Also compare the research score you predicted earlier against what real people actually said, and tell me what the gap means.
5. Final VALIDATION SCORE out of 10 and one verdict:
   - BUILD: validated enough to make an MVP
   - PROBE: promising but one key thing is unproven; name the single next test
   - PARK: the evidence isn't there; tell me why, kindly but clearly

If BUILD or PROBE: the one riskiest thing still standing, and the fastest way to test it in the next five days.</code></code></pre><p>This is also where you should think of a kill criteria because the best way to test multiple ideas is to think of it as an experiment. You hold the problem tightly and the solution loosely, and you stay open to whatever the feedback says, because an experiment can be proven or disproven, and neither outcome reflects on you. It just tells you whether this particular problem or this particular solution is the right one.</p><div><hr></div><h1>Why It&#8217;s Built This Way</h1><p>I have used this exact structure eight times now, and each time, the fear of showing someone my unfinished idea got a little smaller.</p><p>I am still afraid of the judgment. But following a system means that by day five, I am not guessing anymore, and that is worth more than showing up with something polished.</p><p>I perfected this because it took me far too long to go from having an idea to actually talking to the people it was for.</p><p>If you run it on your own idea this week, reply and tell me which word you landed on. I want to know what got built, what got probed, and what finally got parked.</p><p>Durva</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://substack.jointableforone.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">Table For One 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[Vibe Coding Lab #3: The Agent That Finds Your Best Distribution Channel]]></title><description><![CDATA[How I vibe-coded a channel research pipeline that interviews you, scans your competitors, and finds the best channels to build on]]></description><link>https://substack.jointableforone.com/p/vibe-coding-lab-3-the-agent-that</link><guid isPermaLink="false">https://substack.jointableforone.com/p/vibe-coding-lab-3-the-agent-that</guid><dc:creator><![CDATA[Durva Mathure]]></dc:creator><pubDate>Fri, 19 Jun 2026 23:17:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8de43123-b526-4b52-a6e7-4765aafe1007_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Somewhere around my sixth month of building Shezaar, I was posting on LinkedIn, Instagram, TikTok, Substack, and Reddit because every founder I knew had a presence on at least one of them and I had no better way to figure out where I should be. Two months of that got me some polite comments and likes from the same people across platforms, exactly zero leads, and a mild skill at editing short videos. </p><p>Then I burned out and stopped everything for a month.</p><p>The distribution problem for solo founders is not that we do not know social media presence matters. We know it does. The problem is that there is no reliable way to figure out which channel is worth the specific hours, given our voice and audience and what we want to accomplish.</p><p>So we pick based on what other founders are doing, or what we last read about, or where we feel most comfortable posting. To find out whether it was the right call only after six months.</p><p>So, naturally I built something to help with this. Channel Scout is a six-skill pipeline that does what a &#8220;distribution consultant&#8221; or &#8220;GTM consultant&#8221; (if they exist) does, running locally on your Claude Pro or Max subscription with no API keys and no extra cost.</p><p>Here are the only two commands:</p><p><code>/channel-scout</code> is the full strategy session. This is what you run the first time. It interviews you, scans your competitors, selects a channel, designs kill criteria, tests post drafts. So that by the end, you have two channels to bet on and a metric that tells you when something is not working out.</p><p><code>/channel-scout coach</code> is the daily run. One coaching note, one dashboard refresh, one check of your kill criteria. Runs automatically if you want, or can be triggered manually.</p><div><hr></div><h1>Before You Start</h1><p>This is built for Claude Code, so you need a Pro or Max plan. If you have never used Claude Code before, the install takes about five minutes and there are tutorial links in the README.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.jointableforone.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.jointableforone.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h1>How It Works</h1><p>The first time you run <code>/channel-scout</code>, five skills fire in sequence. The full session runs under 90 minutes, with natural stopping points if you need to break. If you stop mid-way, running <code>/channel-scout</code> again picks up exactly where you left off.</p><p>These are the five skills:</p><p><strong><span data-color="#d4943a" style="color: rgb(212, 148, 58);">ONBOARD</span></strong> interviews you, asking what you are building, who it is for, your three closest competitors, how many hours per week you can give to distribution, and what channels you have already tried. While you answer, it fetches your information and homepage in the background to create specific search parameters, ICP descriptors, and competitor feed. By the end of the interview, Channel Scout knows your constraints.</p><p><strong><span data-color="#d4943a" style="color: rgb(212, 148, 58);">SCAN</span></strong> uses those parameters to fetch competitor information and find three to five channels that would work for you. For each channel it identifies, it extracts the winning content template: the hook pattern that gets traction on that platform, the typical post length, the posting cadence that works. It rates each channel on audience saturation, content gap, and ICP fit.</p><p><strong><span data-color="#d4943a" style="color: rgb(212, 148, 58);">PREDICT</span></strong> is the part I found hardest to build manually. It scores voice fit for each channel, meaning how much rewriting your natural writing style would need to work on that platform. Then it runs something I called a wind tunnel: three synthetic personas built from real top-performing post language on each channel. Your angle goes through all three.</p><p>Channels that would require more weekly hours than you said you have get penalized. At the end, PREDICT picks two channels and writes the full reasoning to a prediction file you can read, question, and push back on.</p><p><strong><span data-color="#d4943a" style="color: rgb(212, 148, 58);">PROBE</span></strong> drafts two native test posts per channel in your voice, sets your posting cadence from the intel data, and writes kill criteria. Not &#8220;give it three months and see.&#8221; Specific numbers. If LinkedIn impressions stay below 180 after seven posts, stop. You agree to that number before the first post goes out.</p><p><strong><span data-color="#d4943a" style="color: rgb(212, 148, 58);">COACH</span></strong> runs every morning, reading a rolling context stack: not your full history, just your scorecard, yesterday&#8217;s summary, and the most recent weekly synthesis. It checks your kill criteria, writes one coaching note, and regenerates your dashboard, opening it automatically.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Aohc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Aohc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png 424w, https://substackcdn.com/image/fetch/$s_!Aohc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png 848w, https://substackcdn.com/image/fetch/$s_!Aohc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!Aohc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Aohc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png" width="1280" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:166995,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/202733801?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Aohc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png 424w, https://substackcdn.com/image/fetch/$s_!Aohc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png 848w, https://substackcdn.com/image/fetch/$s_!Aohc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!Aohc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcdbfceb-1f84-48c9-b6b9-f3e7226944af_1280x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1>The Number That Matters</h1><p>The problem was not that I picked the wrong channels. I picked five channels at once, had no criteria for any of them, and burned out before a single one could tell me anything useful. Had I run some experiment like Channel Scout first, it would have surfaced two channels worth betting on and given me a number to watch after the first post went out. It would have told me that given my ICP, my strongest channels were Substack and Reddit.</p><p>That is the piece I would have wanted before I opened a TikTok account in 2025.</p><p>Now this is not a content system and I am building an individual system for each channel. But those will work only after you have identified the right channels for you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xY1n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xY1n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png 424w, https://substackcdn.com/image/fetch/$s_!xY1n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png 848w, https://substackcdn.com/image/fetch/$s_!xY1n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png 1272w, https://substackcdn.com/image/fetch/$s_!xY1n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xY1n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png" width="1280" height="1240" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1240,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165534,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/202733801?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xY1n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png 424w, https://substackcdn.com/image/fetch/$s_!xY1n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png 848w, https://substackcdn.com/image/fetch/$s_!xY1n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png 1272w, https://substackcdn.com/image/fetch/$s_!xY1n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0462e529-ac2b-40d5-97f6-f1b7ebd1b23f_1280x1240.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>How To Install It</h1><p>Two commands in Claude Code:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;29c5716b-c33e-478b-8389-4d11e451db58&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">/plugin marketplace add DM1195/tableforone-channel-scout
/plugin install channel-scout@tableforone-channel-scout</code></pre></div><p>Then type:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;355d8546-37f2-4d85-a24c-79fe36d098b8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">/channel-scout</code></pre></div><p>Channel Scout asks for your company name, creates a folder at <code>~/channel-scout/[your-company]/</code>, and starts the ONBOARD interview. Answer in plain English. Ten minutes in you will have a profile and a watchlist. By end of session you will have two channels to test, two draft posts per channel in your voice, and a kill criteria number for each.</p><p>All files live locally. Nothing is sent anywhere. Nothing expires.</p><div><hr></div><h1>The Daily Coach</h1><p>At the end of your first session, you choose how the daily run works.</p><p><strong>Automatic</strong> registers a launchd task on Mac or a crontab on Linux that fires at your chosen time. If your laptop was asleep, it runs when you open it.</p><p><strong>On open</strong> adds a SessionStart hook to your Claude Code settings so the coaching run starts every time you open Claude Code.</p><p><strong>Manual</strong> means you run <code>/channel-scout coach</code> yourself.</p><p>The coaching note is short. Post performance against kill criteria. What shifted in the competitor feeds overnight, if anything changed. One specific recommendation for today.</p><p>The dashboard is a static HTML file Channel Scout regenerates after every coach run: scorecard table, today&#8217;s note, competitor activity, kill criteria status in one page.</p><p>Channel Scout does not read your full post history every morning. It reads the rolling stack, and competitor feeds only get fetched if something actually changed since the last run. That is token discipline built into the design. A daily process should not become an expensive one.</p><div><hr></div><h1>What I&#8217;d Do Differently</h1><p>I tried to make the PREDICT output final. Two channels, full reasoning, done. But the wind tunnel results surprised me often enough that I wanted to be able to push back on the picks. The tool now writes the full reasoning to prediction.md, and if you run <code>/channel-scout</code> again and tell it you want to revisit a pick, it re-runs PROBE with adjusted parameters instead of just confirming the first output.</p><p>I wish I had designed for that iteration loop from the start. The first version assumed the model would always surface the same two obvious channels. It does not, and the divergence cases are often the more interesting ones.</p><p>If the channel picks surprise you, or something breaks on your setup, reply and tell me what it gave you.</p><p>Durva</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kvWj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kvWj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!kvWj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!kvWj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!kvWj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kvWj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic" width="1456" height="182" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:182,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52086,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/202733801?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kvWj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!kvWj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!kvWj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!kvWj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc184f0d7-0022-4adf-8c03-2b2074b2321d_12288x1536.heic 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ul><li><p><strong><a href="https://oneplease.substack.com/p/vibe-coding-lab-2-the-tool-to-help?r=3o96ba">Vibe Coding Lab #2: The Tool To Help You Visualize Your Product</a></strong></p></li><li><p><strong><a href="https://oneplease.substack.com/p/vibe-coding-lab-1-the-morning-brief?r=3o96ba">Vibe Coding Lab #1: The Morning Brief To Make You 10x Smarter</a></strong></p><p></p><div><hr></div></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://substack.jointableforone.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">Table For One is a reader-supported publication. To receive new posts and support my work, consider becoming a 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[Vibe Coding Lab #2: The Tool To Help You Visualize Your Product]]></title><description><![CDATA[I built a tool to see inside the app I vibe-coded]]></description><link>https://substack.jointableforone.com/p/vibe-coding-lab-2-the-tool-to-help</link><guid isPermaLink="false">https://substack.jointableforone.com/p/vibe-coding-lab-2-the-tool-to-help</guid><dc:creator><![CDATA[Durva Mathure]]></dc:creator><pubDate>Tue, 02 Jun 2026 23:06:20 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0ec35bbf-ba2f-4177-bff7-7377de1dde55_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You vibe-coded something. It worked for a while and then something broke. And there was no way for you to easily fix it.</p><p>So you&#8217;re three hours deep asking Claude to &#8220;find the issue&#8221; and it&#8217;s finding things, but none of them are the actual thing.</p><p>I&#8217;ve been there.</p><p>When you vibe-code, the AI builds fast and you ship faster. Somewhere in between, the code outpaces your understanding of it. The logic exists, but it exists in the AI&#8217;s &#8220;head&#8221;, not yours. So when something breaks, you can&#8217;t point to what or where. You grep through files. You ask Claude for help without being specific. You&#8217;re scared to delete anything because you don&#8217;t know what depends on it.</p><p>That&#8217;s not a skill issue. That&#8217;s a visibility issue.</p><p>Sprintt is the agent library I&#8217;m building for solo founders. It has 127 functions and 42 dependencies across 28 features. I built every one with Claude. Until last week, I couldn&#8217;t tell you what most of them did. I was exactly where you are.</p><p>So I built a tool that shows you what&#8217;s there.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s8i8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s8i8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png 424w, https://substackcdn.com/image/fetch/$s_!s8i8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png 848w, https://substackcdn.com/image/fetch/$s_!s8i8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png 1272w, https://substackcdn.com/image/fetch/$s_!s8i8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s8i8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png" width="1456" height="894" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:894,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:544836,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/200363088?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s8i8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png 424w, https://substackcdn.com/image/fetch/$s_!s8i8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png 848w, https://substackcdn.com/image/fetch/$s_!s8i8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png 1272w, https://substackcdn.com/image/fetch/$s_!s8i8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7969d547-313c-457c-aaa4-314743f5a0eb_2564x1574.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://docs.google.com/document/d/148lHxOfFby0xkttoOqDl0g-Mjbwq3UF0LgUmLNh8AP8/edit?usp=sharing&quot;,&quot;text&quot;:&quot;Skip Explanation And Get The Prompts&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://docs.google.com/document/d/148lHxOfFby0xkttoOqDl0g-Mjbwq3UF0LgUmLNh8AP8/edit?usp=sharing"><span>Skip Explanation And Get The Prompts</span></a></p><h1>Overview Of The Skill: What It Does</h1><p>This <em><strong>simple and free claude skill</strong></em> helps you visualize your vibe-coded product and identify the gaps you could have missed. Point it at any project folder. A browser tab opens with three views of your codebase: three different ways of looking at the same code, depending on what you&#8217;re trying to figure out.</p><h3><strong>App Flow:</strong></h3><p>Three columns: pages on the left, database tables in the middle, external services and API routes on the right. Pages are grouped by URL section: all your /admin/* pages together, all your /onboarding/* together etc. Each page is a card you can expand to see the components inside it. Each component shows what data it queries, where it navigates, what server actions it calls. Arrows connect components to the specific tables and services they touch.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5jU_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5jU_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png 424w, https://substackcdn.com/image/fetch/$s_!5jU_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png 848w, https://substackcdn.com/image/fetch/$s_!5jU_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png 1272w, https://substackcdn.com/image/fetch/$s_!5jU_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5jU_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png" width="1456" height="894" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:894,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:495869,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/200363088?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5jU_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png 424w, https://substackcdn.com/image/fetch/$s_!5jU_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png 848w, https://substackcdn.com/image/fetch/$s_!5jU_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png 1272w, https://substackcdn.com/image/fetch/$s_!5jU_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2eb4adc-762c-4d37-bd5f-1aa562f3b840_2564x1574.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Constellation:</h3><p>Same data, radial layout. Four concentric rings: pages on the outside, then API routes, then database tables, external services at the center. Routes and tables don&#8217;t sit randomly. They gravitate toward the pages that use them. If your agents table is read by both dashboard and admin pages, it floats between those sections. The layout shows you something no file tree does: how siloed or shared each resource actually is.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ep0B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ep0B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png 424w, https://substackcdn.com/image/fetch/$s_!ep0B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png 848w, https://substackcdn.com/image/fetch/$s_!ep0B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png 1272w, https://substackcdn.com/image/fetch/$s_!ep0B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ep0B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png" width="1456" height="894" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:894,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:728147,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/200363088?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ep0B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png 424w, https://substackcdn.com/image/fetch/$s_!ep0B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png 848w, https://substackcdn.com/image/fetch/$s_!ep0B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png 1272w, https://substackcdn.com/image/fetch/$s_!ep0B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111209bc-e4ee-4676-b732-65abd7debcd0_2564x1574.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Function Map:</h3><p>Every function in the codebase as a block, grouped by file. Click one to see what calls it and what it calls. Dead code flagged. Linter issues surfaced. Claude writes a plain-English explanation of what each function does, and if it has bugs, generates a ready-to-paste fix prompt for Cursor. This is the deep-dive view for when something&#8217;s broken and you need to actually trace it.</p><p>Two toggles work across the views:</p><ul><li><p><strong>Heatmap.</strong> Colors nodes by connection count. Tables go blue for reads, red for writes. Pages get more saturated the more routes call them. Lets you see at a glance which tables are your hottest and which pages are doing the most work.</p></li><li><p><strong>Orphans.</strong> Highlights anything with zero connections. A page no route leads to. A table nothing reads. A service nothing imports. Orphan doesn&#8217;t always mean broken. Sometimes the connection is dynamic, sometimes the analyzer missed it. But now you have something specific to investigate instead of a vague sense that something&#8217;s off.</p></li></ul><p>Your code never leaves your machine.</p><h1><strong>How To Get It Running</strong></h1><p>Two ways. Pick one.</p><h3>The Fast Way (1 Minute)</h3><p>If you have <a href="https://docs.claude.com/">Claude Code</a> installed and don&#8217;t mind downloading from my free GitHub repo, paste these two commands:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;aef95dd0-2a0b-4b16-bde7-6d1cfe80fe10&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">/plugin marketplace add DM1195/tableforone-codebase-visualizer
/plugin install codebase-visualizer@tableforone-codebase-visualizer</code></pre></div><p>Then in any project, ask Claude Code: <em>&#8220;map my codebase&#8221;</em> and point it to a folder.</p><h3>Build It Yourself</h3><p>If you&#8217;d rather build it yourself, or customize it for your stack, it&#8217;s five prompts run in sequence in Claude Code, about 30 to 45 minutes. The prompts produce the function-level analyzer, the app flow parser, the visualization, the constellation layout, and the skill wrapper that orchestrates it all.</p><p>The full prompts, the design constraints, and the gotchas are in <a href="https://docs.google.com/document/d/148lHxOfFby0xkttoOqDl0g-Mjbwq3UF0LgUmLNh8AP8/edit?usp=sharing">this</a> doc. One thing to note: don&#8217;t paste all five at once. Run each, see what you get, fix what&#8217;s off, then move on.</p><p>The plugin is open source. Repo <a href="https://docs.google.com/document/d/148lHxOfFby0xkttoOqDl0g-Mjbwq3UF0LgUmLNh8AP8/edit?usp=sharing">here</a>. The doc has the full setup, all five prompts, and a few features I cut from this post for length.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://docs.google.com/document/d/148lHxOfFby0xkttoOqDl0g-Mjbwq3UF0LgUmLNh8AP8/edit?usp=sharing&quot;,&quot;text&quot;:&quot;Get The Prompts&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://docs.google.com/document/d/148lHxOfFby0xkttoOqDl0g-Mjbwq3UF0LgUmLNh8AP8/edit?usp=sharing"><span>Get The Prompts</span></a></p><h2>What This Is Really About</h2><p>The work isn&#8217;t writing code anymore. The work is seeing what you built.</p><p>Once you&#8217;ve shipped something you can&#8217;t see inside, your options narrow fast: abandon it, or rebuild it from scratch. Most founders pick one of those after losing weeks. The hope is that now you don&#8217;t have to.</p><div><hr></div><p><em>If something doesn&#8217;t work, send me a message. Wrong stack, missing feature, broken on your setup, whatever it is. I&#8217;d rather know than have you hit a wall and give up on it.</em></p><p><em>And if you&#8217;re a solo founder trying to figure out how to build and ship without a team behind you, <strong>Table For One</strong> is where I write. The tools, the decisions, the mistakes, written specifically for people building solo. Free to subscribe.</em></p><p><em>- Durva</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.jointableforone.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.jointableforone.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Vibe Coding Lab #1: The Morning Brief To Make You 10x Smarter]]></title><description><![CDATA[How to create a daily newspaper curated just for you with Claude]]></description><link>https://substack.jointableforone.com/p/vibe-coding-lab-1-the-morning-brief</link><guid isPermaLink="false">https://substack.jointableforone.com/p/vibe-coding-lab-1-the-morning-brief</guid><dc:creator><![CDATA[Durva Mathure]]></dc:creator><pubDate>Wed, 13 May 2026 03:06:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3ac1831a-9726-4170-a10c-cded75999aa8_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><em>This is a new Tuesday series where I share the small tools I build for myself, with the actual instructions you need to set them up. You don&#8217;t need to know how to code. You need to be able to copy and paste. First up: a daily personal newspaper that publishes itself at 6am, costs a few cents a day, and lives at a URL you bookmark on your phone.</em></p><div><hr></div><p>Like most founders, I subscribe to about a hundred Substacks (okay, maybe twenty). I have at least three podcasts on rotation that I want to listen to and never do. I have set news alerts for my industry. And most mornings used to start the same way. Coffee. Scrolling my mailbox for news. Checking what&#8217;s happening on Twitter. Feeling overwhelmed and shutting my phone.</p><p>The result? In almost every founder meetup or dinner I was the last person who knew what was happening in the world of tech.</p><p>So one day I decided to use Claude to my advantage.</p><p>I built a morning brief agent that runs at 6am Pacific every day. It reads news from a list of topics I care about, scans five founder-heavy subreddits and Twitter, opens the newsletters that landed in my Gmail in the last 24 hours, and checks for new podcast episodes from a curated list of shows. It assembles all of that into a single beautifully designed webpage, with framed paintings from the Art Institute of Chicago laid between the sections, and publishes it to a private URL I&#8217;ve bookmarked on my phone. No email. No app. No notification. Just a bookmark I open with my coffee.</p><p>The whole thing costs about a nickel a day in Claude usage. The hosting is free. The setup, if you follow this post, takes about thirty minutes.</p><p>Here it is. Steal it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YXeb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YXeb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic 424w, https://substackcdn.com/image/fetch/$s_!YXeb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic 848w, https://substackcdn.com/image/fetch/$s_!YXeb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic 1272w, https://substackcdn.com/image/fetch/$s_!YXeb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YXeb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic" width="1456" height="936" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:936,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109851,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/197435341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YXeb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic 424w, https://substackcdn.com/image/fetch/$s_!YXeb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic 848w, https://substackcdn.com/image/fetch/$s_!YXeb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic 1272w, https://substackcdn.com/image/fetch/$s_!YXeb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1ea794-2136-4817-8b7b-0dfbb2fd4ce0_2438x1568.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1>A Note Before We Start</h1><p>I built this using Claude Code. If you've never used it, here are the install tutorials. PS you need the Pro plan.</p><p>For <a href="https://youtu.be/QsjrBQK0lTg?si=ECsa6uUZd6Ecsgkm">Mac</a><br>For <a href="https://youtu.be/H4zZ1TJtgGs?si=rAiJKJkB03W8gF2N">Windows</a></p><p>You don&#8217;t need to learn to code. Claude Code understands plain English. You&#8217;ll see grey boxes throughout this post. You don&#8217;t read or edit them. You paste them into Claude Code when I tell you to, and Claude Code does the rest.</p><p>You also don&#8217;t have to use every section. There are five (news, social, substack, podcasts, and art). Pick what you want during the setup step below. The post will tell you to skip the agents you didn&#8217;t pick.</p><p>The rest of this post assumes you have Claude Code running.</p><div><hr></div><h1>The Move That Actually Matters</h1><p>I&#8217;ve vibe coded over twenty projects, some for me and some for my clients, so trust me when I say this. Ideate before you build. The order matters more than the prompts.</p><p>I did not start in Claude Code. I started in Claude Design. Before I wrote a single instruction for an agent, I designed what the finished brief would look like. The layout, the typography, the framed art, the section order. Once I knew what I was building toward, the agents almost wrote themselves, because I had a template with empty slots and I just needed to fill them.</p><p>You should do the same. Skip the ideation step (this post is the ideation, the sources and sections and order are already decided). But the design is yours. Open Claude Design and paste this:</p><pre><code><code>I'm building a daily morning brief that will live on a webpage I bookmark on my phone. It pulls from a few sources I care about. [ADD WHAT YOU ACTUALLY CARE ABOUT] Design what this should look like. I want it to feel like a [ADD WHAT YOU WANT IT TO LOOK AND FEEL LIKE]. Each section should feel distinct. Ask me thoughtful questions before you start designing. Show me a draft I can iterate on. Then ask me what I want to change.</code></code></pre><p>The first version will be rough. Iterate. Change the colors. Move the art. Make the headlines bigger. Try a serif. Try a sans. I spent an hour just getting the gold frames around the paintings to look like real frames instead of yellow rectangles. It matters more than you think. This is the thing you&#8217;ll open every morning.</p><p>When you like the design, save the HTML. You&#8217;ll hand it to Claude Code in the next step.</p><div><hr></div><h1>How The Thing Is Organized</h1><p>In Claude Code, you can create something called a <em>skill</em>. It&#8217;s a folder of instructions Claude Code reads whenever you ask it to do a particular kind of task. Think of a skill as a job description you write once and Claude Code refers to every time.</p><p>The morning brief skill is one folder with a handful of files inside it. A main instruction file (the orchestrator, which is the manager), a config file with your preferences, sub-agent files (one per section you chose), and the template file you just designed. The folder lives at <code>~/.claude/skills/</code>, inside a subfolder you'll name during the next step. The squiggle (<code>~</code>) is shorthand for your computer&#8217;s main user folder.</p><p>You&#8217;re not going to build this folder yourself. Claude Code will, in the next step.</p><div><hr></div><h1>Make It Yours</h1><p>This is the most important step. We're going to do the personalization and the setup in one go. By the end, you'll have your folders, your config file, your template, and an orchestrator built around exactly the sections you want.</p><p>Tell Claude Code:</p><pre><code><code>I want to build a daily morning brief. Interview me to set it up.             
                                                                                                                                                                  
  Step 1 &#8212; Understand what I actually need                                                                                                                        
                                                                                                                                                                  
  Before asking about sections or topics, ask me these four questions (one at a time, wait for each answer before continuing):
                                                                                                                                                                  
  1. What problem does this brief solve for you? What would you do differently if you had better information each morning?                                      
  2. What's something you wish you'd known 3 months ago &#8212; a story, a shift, a number &#8212; that you only found out too late?                                          
  3. What's one space adjacent to your work that you're curious about but don't currently follow?                                                                 
  4. When you think about the content you currently read, what feels like noise &#8212; topics that show up but you always skip?                                        
                                                                                                                                                                  
  Use my answers to build a picture of what I actually need signal on. You'll use this to suggest topics in Step 3.                                             
                                                                                                                                                                  
  Step 2 &#8212; Choose sections                                                                                                                                        
                                                                                                                                                                  
  Ask me which sections I want:                                                                                                                                   
  - News &#8212; Google News on topics I follow                                                                                                                         
  - Social &#8212; Reddit and Twitter/X                                                                                                                                 
  - Substack &#8212; newsletters in my Gmail                                                                                                                          
  - Podcasts &#8212; new episodes from shows I follow
  - Art &#8212; a daily painting curator from the Art Institute of Chicago (this is handled automatically in the orchestrator &#8212; no setup needed from me)
                                                                                                                                                                  
  Step 3 &#8212; Interview me on each section I chose                                 
                                                                                                                                                                  
  For News: Based on my answers in Step 1, suggest 8&#8211;10 specific topic strings I could track &#8212; not generic labels like "entrepreneurship" but precise search    
  phrases like "founder case study", "frontier AI startup adoption", "creator economy solo founder". Walk me through each suggestion and explain why you're       
  recommending it based on what I told you. Let me accept, reject, or modify each one. Also ask: how many articles per day (default 6), and max age in hours      
  (default 24).                                                                                                                                                   
                                                                                                                                                                  
  For Social: Ask which subreddits I want. Suggest 4&#8211;6 based on my topics &#8212; include at least one that isn't the obvious choice. For Twitter/X: ask if there are   
  specific accounts I want to track. If I don't have names, suggest 4&#8211;5 handles relevant to my topic mix and explain who they are. Save confirmed handles as a    
  twitter_handles array in config. Ask for max threads (default 5).                                                                                             

  For Substack: Ask if I've connected the Gmail MCP connector in Claude settings. If I haven't, walk me through it: open Claude settings &#8594; Connectors &#8594; Gmail &#8594;   
  authorize. Wait for confirmation. Ask for my Gmail address and whether there are any senders I want to skip (promotional Substack emails, digest roundups,
  etc.).                                                                                                                                                          
                                                                                                                                                                
  For Podcasts: Ask me for show names. Look up the RSS feed URL for each show on the web and save it alongside the show name. If you can't find an RSS feed, tell 
  me and skip it. Do not invent URLs. Ask for max age in hours (default 48).    
                                                                                                                                                                  
  Step 4 &#8212; GitHub and timezone                                                                                                                                  
                                                                                                                                                                  
  Ask for my GitHub username and timezone.                                     
                                                                                                                                                                  
  Step 5 &#8212; HTML template                                                                                                                                        

  Ask me to paste the HTML template I designed. Save it as templates/template.html.                                                                               
                                                                                
  Step 6 &#8212; Create the skill                                                                                                                                       
                                                                                                                                                                
  Ask what to name the skill folder. Validate: no spaces, no slashes, letters/numbers/hyphens/underscores only. If ~/.claude/skills/{name}/ already exists, tell  
  me and ask whether to pick a different name or overwrite.                     
                                                                                                                                                                  
  Create the folder at ~/.claude/skills/{name}/ with three subfolders: agents/, staging/, templates/. Save my HTML at templates/template.html.                  
                                                                                                                                                                  
  Step 7 &#8212; Write config.json            
                                                                                                                                                                  
  Write config.json in the skill root with this shape:                                                                                                            
                                                                                
  {                                                                                                                                                               
    "schedule": { "time": "07:00", "timezone": "America/New_York" },                                                                                            
    "delivery": {                                                                                                                                                 
      "github_pages_url": "https://{username}.github.io/morning-brief/",        
      "github_repo": "{username}/morning-brief",                                                                                                                  
      "github_pat_file": "~/.config/morning-brief/github-pat"                                                                                                   
    },                                                                                                                                                            
    "topics": ["...confirmed topic strings..."],                                
    "news": { "articles_per_run": 6, "max_age_hours": 24 },                                                                                                       
    "social": {                                                                                                                                                 
      "platforms": ["reddit", "twitter"],                                                                                                                         
      "subreddits": ["..."],                                                                                                                                    
      "twitter_handles": ["..."],                                                                                                                                 
      "max_threads": 5                                                                                                                                            
    },                                                                                                                                                            
    "substack": {                                                                                                                                                 
      "gmail_account": "...",                                                                                                                                   
      "max_age_hours": 24,                                                                                                                                        
      "skip_senders": ["reaction@mg1.substack.com", "forum@mg1.substack.com", "no-reply@substack.com"]
    },                                                                                                                                                            
    "podcasts": {                                                                                                                                               
      "feeds": [{ "name": "Show Name", "url": "https://..." }],
      "max_age_hours": 48                                                      
    },                                                                                                                                                            
    "learnings": {                      
      "articles_path": "~/notes/learnings/articles/",                                                                                                             
      "podcasts_path": "~/notes/learnings/podcasts/"                                                                                                              
    }                                                                           
  }                                                                                                                                                               
                                                                                                                                                                
  Step 8 &#8212; Write SKILL.md                                                                                                                                         
                                                                                                                                                                  
  Write SKILL.md in the skill root. It is the orchestrator that runs daily. It must do the following in order:                                                    
                                                                                                                                                                  
  1. Read config.json and today's date in four formats: display (Monday, May 12, 2026), uppercase display, filename (2026-05-12), issue number (No. 12 for the  
  12th).                                                                        
  2. Read the instruction files for each chosen agent, then spawn all of them simultaneously as parallel sub-agents. Each agent writes its output to              
  ./staging/{name}.json. The agents are:                                       
    - agents/news-agent.md &#8594; staging/news.json                                                                                                                    
    - agents/social-agent.md &#8594; staging/social.json                                                                                                              
    - agents/substack-agent.md &#8594; staging/substack.json                                                                                                            
    - agents/podcast-agent.md &#8594; staging/podcast.json                                                                                                              
  3. Art curation (handled directly in the orchestrator &#8212; no separate agent):   
    - Read staging/art-state.json for seen_ids and rotation history                                                                                               
    - Pick today's search term by day-of-month using a 13-term rotation: impressionism, post-impressionism, realism, american scene painting, modernism, landscape
   painting, portrait, still life, romanticism, baroque painting, genre painting, expressionism, urban scene                                                      
    - Fetch from AIC API: https://api.artic.edu/api/v1/artworks/search?q={term}&amp;fields=id,title,artist_display,date_display,medium_display,image_id,description,st
  yle_titles,subject_titles&amp;limit=50&amp;query[term][is_public_domain]=true                                                                                           
    - Filter: image_id must be present and not in seen_ids. Pick&nbsp;4.                                                                                               
    - For each, write 2&#8211;3 sentences grounded only in API data (style_titles, subject_titles, medium_display, description). Do not invent biographical details.    
    - Build image URLs: https://www.artic.edu/iiif/2/{image_id}/full/1600,/0/default.jpg                                                                          
    - Update art-state.json: append today's 4 ids to seen_ids, trim to 120, update history.                                                                       
  4. Read all four staging JSON files.                                                                                                                          
  5. Read templates/template.html. Replace every &lt;!-- INJECT:NAME --&gt; marker with the appropriate content. Never leave any marker unreplaced in the output. Key   
  injections:                                                                                                                                                     
    - INJECT:DATE, INJECT:DATE_UPPER, INJECT:ISSUE_NUMBER, INJECT:TALLY                                                                                           
    - INJECT:COVER_HEADLINE &#8212; 6&#8211;10 word editorial headline across today's themes                                                                                  
    - INJECT:COVER_STAND &#8212; 2&#8211;3 sentence framing of today's edition, under 45 words                                                                                
    - News section: use articles[0] from news.json as the lead; articles[1&#8230;N] as grid cards                                                                       
    - Art: inject 4 artwork URLs, titles, artists, dates, mediums, and curator notes                                                                              
    - Social: sentiment, pullquote (not pull_quote), and threads (not items) from social.json                                                                     
    - Substack: newsletters array from substack.json                                                                                                              
    - Podcast section: inject only if has_episodes is true in podcast.json; omit entirely if false                                                                
    - INJECT:COLOPHON_TALLY, INJECT:COLOPHON_ART, INJECT:YEAR                                                                                                     
  6. Write assembled HTML to staging/morning-brief-YYYY-MM-DD.html. Verify no &lt;!-- INJECT:... --&gt; markers remain before writing.                                  
  7. Push to GitHub Pages via the Contents API (GET the SHA first, then PUT). Also push to archive/YYYY-MM-DD.html. If the PAT file is missing or the API errors, 
  log and continue &#8212; do not abort.                                                                                                                                
  8. Save learnings: write one markdown file per run to learnings.articles_path and (if episodes exist) learnings.podcasts_path.                                  
  9. Print a completion summary: date, live URL, article/newsletter/episode counts, learnings path.                                                               
                                                                                                                                                                  
  Add this rule at the end of SKILL.md: If any agent fails, omit that section from the template and continue. Do not block the brief on one bad fetch.            
                                                                                                                                                                  
  Step 9 &#8212; Show me what we built                                                                                                                                  
                                                                                                                                                                  
  Print the full folder structure so I can see everything that was created.</code></code></pre><p>Claude Code will ask the questions one by one. Answer in plain English. By the end, your folders exist, your config file is written, your template is in place, and your orchestrator is built around exactly the agents you want. If you said you don&#8217;t care about podcasts, there&#8217;s no podcast agent in your orchestrator. If you only want news and art, that&#8217;s all your orchestrator runs.</p><p>Don&#8217;t worry about the format Claude Code uses to show you the folders. It&#8217;ll look like a little tree of file names. If the folders you expected are in there, you&#8217;re good.</p><p>The failure-handling line at the end is doing more work than it looks. The first version of this whole system would crash whenever Reddit was slow to respond, which was often. Now if any one source breaks, the brief just ships without that section. An imperfect brief at 6am beats a perfect brief at noon.</p><p>This is the only part of the build where you&#8217;re talking about yourself instead of pasting. The whole brief reads to <em>you</em>, not to me. So this step is the one that matters most.</p><div><hr></div><h1>The News Agent</h1><p><em><strong>Skip this if you didn&#8217;t pick it during the interview.</strong></em></p><p>This one handles news. It reads Google News for the topics in your config, picks the most relevant ones for a solo founder, writes a short summary of each, and adds two things I find more useful than the summaries themselves. The first is Claude&#8217;s Take, one sharp sentence on what the article actually signals, not just what it says. The second is a content angle, a specific post idea the article suggests, so I can grab it later when I&#8217;m staring at a blank Substack draft.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Eka!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Eka!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic 424w, https://substackcdn.com/image/fetch/$s_!4Eka!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic 848w, https://substackcdn.com/image/fetch/$s_!4Eka!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic 1272w, https://substackcdn.com/image/fetch/$s_!4Eka!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Eka!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic" width="1456" height="935" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:935,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:222643,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/197435341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4Eka!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic 424w, https://substackcdn.com/image/fetch/$s_!4Eka!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic 848w, https://substackcdn.com/image/fetch/$s_!4Eka!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic 1272w, https://substackcdn.com/image/fetch/$s_!4Eka!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ea35314-f48d-4c5d-b205-cf82a5cce6dc_2438x1566.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Tell Claude Code:</p><pre><code><code>Create a file inside the agents folder, named news-agent.md, with the following contents:

You are the News agent for the Morning Brief.

1. Fetch the Google News RSS feed for each topic listed in
   config.json under "news_topics". Construct URLs like:
   https://news.google.com/rss/search?q={topic}&amp;hl=en-US

2. Dedupe across feeds by URL and by title similarity.

3. For each remaining article, score it 1-5 on relevance to
   "a solo founder building a B2B or prosumer product." 5
   means must-read. 1 means skip.

4. Keep only articles scored 4 or 5. From those, pick ONE lead
   (highest score, breaks ties by recency) and up to 4 secondaries.

5. For each kept article, write:
   - title (rewrite for clarity; do not parrot SEO headlines)
   - summary (2-3 sentences, what happened and why)
   - claude_take (ONE sentence. What does this actually signal,
     not what does it say. Sharp. No hedging.)
   - content_angle (ONE sentence. A specific Substack or
     LinkedIn post premise this article suggests for a solo
     founder to write.)
   - source, url, published_at

6. Write the result to ./staging/news.json with this shape:
   { "lead": {...}, "secondary": [...] }

Do not include articles you scored below 4. A short brief is
better than a padded one.</code></code></pre><p>The Claude's Take field is what makes this read like a real publication instead of a feed reader. Anyone can summarize an article. Naming the signal underneath is the editorial muscle. That one sentence is the reason I read the brief instead of just looking at headlines.</p><div><hr></div><h1>The Social Agent</h1><p><em><strong>Skip this if you didn&#8217;t pick it during the interview.</strong></em></p><p>This one handles Reddit and Twitter. It pulls the threads doing well in your subreddits (above a minimum threshold of upvotes and comments, so dead threads get skipped) and the highest-signal tweets from the accounts you follow. For each one, it writes a short take on the community mood and what it means, not on what the thread is about. It produces a sentiment breakdown (a quick read on whether the founder internet feels positive, neutral, or negative today), and it pulls one sharp anonymous quote as a daily pull quote.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k_aJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k_aJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic 424w, https://substackcdn.com/image/fetch/$s_!k_aJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic 848w, https://substackcdn.com/image/fetch/$s_!k_aJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic 1272w, https://substackcdn.com/image/fetch/$s_!k_aJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k_aJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic" width="1456" height="928" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:928,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:206177,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/197435341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!k_aJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic 424w, https://substackcdn.com/image/fetch/$s_!k_aJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic 848w, https://substackcdn.com/image/fetch/$s_!k_aJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic 1272w, https://substackcdn.com/image/fetch/$s_!k_aJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e8e73c-2733-4a6b-8cfb-f4e36f586d47_2438x1554.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Tell Claude Code:</p><pre><code><code>Create a file inside the agents folder, named social-agent.md, with the following contents:

You are the Social agent for the Morning Brief.

1. For each subreddit in config.json under "subreddits", fetch
   the top posts from the last 24 hours via:
   https://www.reddit.com/r/{name}/top.json?t=day&amp;limit=15
   Filter to threads with score &gt;= 50 or comments &gt;= 25.

2. For each Twitter handle listed in config.json under
   "twitter_handles", fetch the user's recent tweets (last 24
   hours) using the Twitter MCP connector if available. If no
   connector is set up, fall back to scraping the public
   profile via nitter.net or similar mirror. Filter to tweets
   with likes &gt;= 100 OR retweets &gt;= 25 OR replies &gt;= 20.

3. For each remaining Reddit thread, read the post and top 5
   comments. For each remaining tweet, read the tweet and top
   replies. Then write:
   - title (use the original)
   - source ("reddit/r/{name}" or "twitter/@{handle}")
   - signal (2-3 sentences. NOT what the thread is about. What
     the community mood is, and what that mood means for a
     solo founder paying attention.)
   - url, score, comments

4. Across all items kept, produce a single sentiment object:
   { "positive": int, "neutral": int, "negative": int }
   The three values must sum to 100. Base this on overall
   tone for the day, not any one thread.

5. Pick ONE pull quote from the day's items. A real comment
   or tweet, no more than 30 words, attributed by username.
   Choose for sharpness, not popularity.

6. Write to ./staging/social.json:
   { "sentiment": {...}, "pull_quote": {...}, "items": [...] }

If no items cleared the filters on either source, write
{ "has_content": false } and stop.</code></code></pre><p>The pull quote is my favorite feature. One sharp anonymous voice every morning, sitting under the sentiment bar. It's the thing that makes the brief feel like a person put it together instead of an algorithm.</p><div><hr></div><h1>The Substack Agent</h1><p><em>Skip this if you didn&#8217;t pick it during the interview.</em></p><p>This one reads your actual Gmail. It uses an MCP connector, which is a permission slip you give Claude to talk to another app on your behalf. You&#8217;ll connect Gmail once in your Claude settings, and after that this agent can read newsletters that landed overnight. It writes a short summary of each, pulls out the most useful idea, and suggests a content angle in case you want to write a response later.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uf0B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uf0B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic 424w, https://substackcdn.com/image/fetch/$s_!uf0B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic 848w, https://substackcdn.com/image/fetch/$s_!uf0B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic 1272w, https://substackcdn.com/image/fetch/$s_!uf0B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uf0B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic" width="1456" height="888" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:252321,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/197435341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uf0B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic 424w, https://substackcdn.com/image/fetch/$s_!uf0B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic 848w, https://substackcdn.com/image/fetch/$s_!uf0B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic 1272w, https://substackcdn.com/image/fetch/$s_!uf0B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe857641-7888-4073-a538-6ab7a9470861_2554x1558.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Tell Claude Code:</p><pre><code><code>Create a file inside the agents folder, named substack-agent.md, with the following contents:

You are the Substack agent for the Morning Brief.

1. Use the Gmail MCP connector to search for emails received in
   the last 24 hours from senders listed in config.json under
   "newsletter_senders".

2. For each email, extract the article body (strip the email
   chrome, footers, unsubscribe links). Get the canonical URL
   from the email if present.

3. For each newsletter, write:
   - title (the post title, not the email subject if different)
   - author (sender name, cleaned)
   - summary (3-4 sentences. What the piece argues. Not "the
     author talks about." What they actually claim.)
   - key_insight (ONE sentence. The single most useful idea
     for a solo founder, stated as a takeaway not a quote.)
   - content_angle (ONE sentence. A response, counterpoint, or
     extension a solo founder could write this week.)
   - url, received_at

4. Write to ./staging/substack.json as a list. If nothing came
   in overnight, write [] and stop. An empty Substack section
   is fine. A fake one is not.</code></code></pre><h1>The Podcast Agent</h1><p><em><strong>Skip this if you didn&#8217;t pick it during the interview.</strong></em></p><p>This one checks for new podcast episodes in the last three days from a list of shows in your config. It only keeps episodes that are actually relevant, and for those, it writes a short summary plus a few timestamped key moments so you know what to skip to. If nothing new and good came out, the whole podcast section gets omitted from the brief that day.</p><p>Tell Claude Code:</p><pre><code><code>Create a file inside the agents folder, named podcast-agent.md, with the following contents:

You are the Podcast agent for the Morning Brief.

1. For each show listed in config.json under "podcasts", search
   for episodes published in the last 72 hours. Use the show's
   RSS feed URL from the config.

2. For each new episode, score 1-5 on relevance to a solo
   founder building a B2B or prosumer product. Keep only
   episodes scored 4 or 5.

3. For each kept episode, write:
   - title, show, host, duration, published_at, audio_url
   - summary (3 sentences. What the episode is actually about,
     not the marketing description.)
   - key_moments: a list of up to 3 objects, each:
     { "timestamp": "HH:MM:SS", "note": "what's said here" }

4. Write to ./staging/podcast.json:
   { "has_episodes": true, "episodes": [...] }

   If no episodes cleared the bar, write:
   { "has_episodes": false }

   The orchestrator will omit the Podcast section entirely
   when has_episodes is false. Do not pad.</code></code></pre><p>The podcast agent reads RSS feed URLs from your config. The interview step already looked these up for you when you named your shows, so you shouldn't have to do anything here. If a podcast section never shows up and you think it should, the RSS URL is probably the thing to check first.</p><div><hr></div><h1>The Art Curator</h1><p><em><strong>Skip this if you didn't pick it during the interview. If you change your mind later, paste the prompt below and ask Claude Code to add the curator to your orchestrator.</strong></em></p><p>This is the part I&#8217;m proudest of, and it&#8217;s what turns the brief from a dashboard into something that feels like a magazine.</p><p>Every edition includes four paintings from the Art Institute of Chicago&#8217;s collection. The AIC has a free public image service (no account, no key) that serves high-resolution versions of everything they own. About a hundred thousand works.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ofY4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ofY4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic 424w, https://substackcdn.com/image/fetch/$s_!ofY4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic 848w, https://substackcdn.com/image/fetch/$s_!ofY4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic 1272w, https://substackcdn.com/image/fetch/$s_!ofY4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ofY4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic" width="1456" height="705" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:705,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:113327,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://oneplease.substack.com/i/197435341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ofY4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic 424w, https://substackcdn.com/image/fetch/$s_!ofY4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic 848w, https://substackcdn.com/image/fetch/$s_!ofY4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic 1272w, https://substackcdn.com/image/fetch/$s_!ofY4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff07e8112-b17b-4a0f-b63f-0d2211adfc92_2436x1180.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The curator is a sub-agent. Every morning it picks one art movement from a rotating list of thirteen (impressionism, post-impressionism, baroque, urban scene, surrealism, and so on), searches the AIC for that movement, filters out anything that&#8217;s appeared in the last thirty days, and selects four fresh paintings. The next day, a different movement. By day fourteen it&#8217;s cycled through all thirteen and starts over, but with completely different paintings, because the previous set is still on the recently-seen list. Nothing repeats within a month.</p><p>For each painting, the curator writes a short story in a specific voice. The factual base comes from the AIC&#8217;s own metadata (style, museum description, medium, year). The curator can only assert things the data supports. No invented biographies, no fake anecdotes. The story is short, in second person, with a little bite.</p><p>Tell Claude Code:</p><pre><code><code>Create a file inside the agents folder, named art-curator.md, with the following contents:

You are the Art Curator for the Morning Brief.

Your job is to pick 4 fresh paintings from the Art Institute
of Chicago's public collection every day, and write a short
story for each in the voice described below.

1. Read ./staging/art-state.json. It contains:
   - "seen_ids": AIC artwork IDs that have appeared in the
     brief in the last 30 days
   - "movement_rotation": a 13-item list of art movements
     ["impressionism", "post-impressionism", "baroque",
      "urban scene", "surrealism", "japanese woodblock",
      "american modernism", "cubism", "fauvism",
      "abstract expressionism", "renaissance", "romanticism",
      "realism"]
   - "rotation_index": integer 0-12, wraps around

2. Pick today's movement using rotation_index. Search the AIC
   API:
   https://api.artic.edu/api/v1/artworks/search
     ?q={movement}
     &amp;fields=id,title,artist_display,style_titles,
             description,medium_display,date_display,image_id
     &amp;limit=50

3. Filter out:
   - Any artwork whose id appears in seen_ids
   - Any without an image_id
   - Any without an artist_display

4. From the remaining candidates, select 4. Prioritize
   variety (no two works by the same artist) and recognizable
   quality (works with a museum description tend to be the
   majors).

5. For each painting, write:
   - image_id (use directly from the API)
   - title (use the API's title)
   - artist (just the name, no dates)
   - year (from date_display)
   - story: 2-4 sentences, second person, with bite. Use
     style_titles, description, and medium_display as the
     factual base. ONLY assert what the API data supports.
     Do not invent biographical details, prices, or anecdotes.

6. Write the result to ./staging/art.json as a list of 4
   objects.

7. Update ./staging/art-state.json:
   - Append today's 4 ids to seen_ids
   - Drop any ids older than 30 editions
   - Increment rotation_index by 1, wrapping at 13

If the API errors or fewer than 4 candidates clear the filter,
write { "fallback": true } and stop.</code></code></pre><p>The line about not inventing biographies is the one I rewrote the most. The curator is good at writing in voice. It&#8217;s a little too good at inventing context to fit the voice. The first version once told me, confidently, that a 17th-century Dutch painter had been disowned by his family. He had not. He had simply painted a lot of taverns.</p><p>So now the stories are quieter sometimes. But they&#8217;re true.</p><div><hr></div><h1>Publishing It</h1><p>Now for the last step. You need three things to happen: your brief has to live on the internet somewhere, it has to run automatically every morning, and you have to know the URL to bookmark.</p><p>All three happen in one prompt. Claude Code will walk you through the parts you have to click yourself, wait for you to confirm each one, verify it worked, schedule the brief to run at the time you want, and give you the URL at the end.</p><p>Tell Claude Code:</p><pre><code><code>I'm ready to ship my morning brief. Walk me through this one step at a time. Wait for me to confirm each step is done before moving to the next, and verify the result whenever you can. First, help me set up GitHub Pages. Tell me how to create a free GitHub account (if I don't have one), how to make a new public repository called morning-brief, how to turn on GitHub Pages in the repo settings, and how to generate a personal access token with the right permissions. After each click step, ask me to confirm. After I confirm the token, save it to my config.json. Then verify the GitHub repo and Pages are set up correctly by checking the URL. Second, ask me what time I want the brief to run and which timezone I'm in. Convert that into the right cron schedule for UTC and set up a Claude Code remote routine that runs my news-digest skill at that time, every day. Third, run the brief once now as a test so we can confirm the whole pipeline works end to end. If anything fails, tell me what failed and how to fix it. Finally, give me the bookmark URL where my brief will live, and tell me when the next scheduled run is.</code></code></pre><p>That&#8217;s the last thing you have to paste.</p><p>When Claude Code finishes, you&#8217;ll have a URL. Open it on your phone. Bookmark it. Tomorrow morning, when you reach for your coffee, that&#8217;s where you&#8217;ll go.</p><p>If you get stuck on the GitHub part, reply to this email or message me and I&#8217;ll walk you through it.</p><div><hr></div><h1>What I&#8217;d Do Differently</h1><p>I tried to make every section equally important. Same card size, same length, same weight. It read like a feed. The fix was hierarchy. Make the most important thing the biggest and the least important thing the smallest. One lead article gets a drop cap. Four secondary articles sit in a grid below it. The sentiment bar is a thin strip, not a section. Podcasts only show up when there&#8217;s something worth listening to.</p><p>I also included too much. Eight subreddits. Ten newsletters. Six podcasts. The brief got long and I started skimming. So I cut everything in half. I read all of it now. Fewer inputs, sharper outputs.</p><p>The first version had no failure handling. One slow API call would kill the entire 6am run. Now every agent has a quiet contract. If you fail, the brief still ships without your section. Things break. The brief still comes out at 6am.</p><div><hr></div><h1>Ready To Steal</h1><p>My whole system is in this post. Top to bottom. The design step, the interview, the agents you chose, the art curator, the deploy, the schedule. Paste them in order. The interview does the heavy lifting in the middle. By the time you&#8217;re done, you have a bookmark.</p><p>It&#8217;s set up for me. The topics, the subreddits, the senders, the podcasts. The first thing you should do, before anything else, is design your own brief and run the interview. Make it yours. The whole point is that it <em><strong>reads to you, not to me</strong></em>.</p><p>If you build something with this, reply and send me the link. I want to see what your 6am looks like.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://substack.jointableforone.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Table For One! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>