<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Build Logs - Build and Bail</title>
	<atom:link href="https://buildandbail.com/category/build-logs/feed/" rel="self" type="application/rss+xml" />
	<link>https://buildandbail.com</link>
	<description>Build. Validate. Bail. Repeat.</description>
	<lastBuildDate>Wed, 02 Sep 2026 17:22:38 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://buildandbail.com/wp-content/uploads/2026/02/cropped-build-and-bail-icon-4-32x32.png</url>
	<title>Build Logs - Build and Bail</title>
	<link>https://buildandbail.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Adding a Hologram Crystal Ball to My Halloween Setup (and Filling It With My Own Ghosts)</title>
		<link>https://buildandbail.com/hologram-crystal-ball-halloween-custom-video/</link>
					<comments>https://buildandbail.com/hologram-crystal-ball-halloween-custom-video/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Wed, 02 Sep 2026 17:20:52 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[decor]]></category>
		<category><![CDATA[gemini]]></category>
		<category><![CDATA[halloween]]></category>
		<category><![CDATA[home projects]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1920</guid>

					<description><![CDATA[I just got back from a trip to Disney, so between the Haunted Mansion being on my mind and Halloween being right around the corner, this impulse buy was unavoidable. I saw people posting this Hologram Crystal Ball on social media with uploaded videos of Madame Leota from HM. It turns out, you can upload [&#8230;]<p>Read more at <a href="https://buildandbail.com/hologram-crystal-ball-halloween-custom-video/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I just got back from a trip to Disney, so between the Haunted Mansion being on my mind and Halloween being right around the corner, this impulse buy was unavoidable. I saw people posting this <a href="https://www.lowes.com/pd/Haunted-Living-10-In-Tabletop-Globe-Projection-Haunted-Hologram/5017675279" target="_blank" aria-label="Hologram Crystal Ball (opens in a new tab)" rel="noreferrer noopener nofollow" class="ek-link">Hologram Crystal Ball</a> on social media with uploaded videos of Madame Leota from HM. It turns out, you can upload your own videos to it (like I said, this was a no-brainer).</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="900" height="900" src="https://buildandbail.com/wp-content/uploads/2026/09/image.png" alt="image" class="wp-image-1922" title="Adding a Hologram Crystal Ball to My Halloween Setup (and Filling It With My Own Ghosts)" srcset="https://buildandbail.com/wp-content/uploads/2026/09/image.png 900w, https://buildandbail.com/wp-content/uploads/2026/09/image-150x150.png 150w, https://buildandbail.com/wp-content/uploads/2026/09/image-300x300.png 300w, https://buildandbail.com/wp-content/uploads/2026/09/image-768x768.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph"> </p>



<h2 class="wp-block-heading">The Impulse Buy</h2>



<p class="wp-block-paragraph">I ordered the Gemmy / Haunted Living Hologram Crystal Ball from Lowes.com for $80 (item #7950690) and it showed up the next day. The stock videos were cool but I was excited to upload my own stuff. I installed the app (Google Play only for now, which feels good when most apps are iPhone first), connected to the devices local wifi network, and uploaded my first video (my daughter doing The Undertaker eye-roll so you only see the whites). It looked awesome. </p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="My Daughter Doing The Undertaker Eye Roll" width="563" height="1000" src="https://www.youtube.com/embed/YVIVddPwjIs?feature=oembed&#038;enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Next, I uploaded a video of Madame Leota that I had downloaded from YouTube, but I quickly hit an issue. </p>



<h2 class="wp-block-heading"><strong>Why my videos wouldn&#8217;t upload</strong></h2>



<p class="wp-block-paragraph">When you upload a video in the app, the first step is where you set the crop. The display is circular and the app allows you to set what part of the video shows in the globe. This part worked fine, but when it would start the transfer, it would just reset the screen with no error message.  </p>



<p class="wp-block-paragraph">I tried the normal stuff. Compressing the video, trying different source videos, but nothing would work. So I went back to that original social post and found the source video they used. Theirs was 58 seconds, while mine was just over a minute. </p>



<p class="wp-block-paragraph">Once I reduced the video length, everything worked. I can&#8217;t say this is the definitive root cause but it certainly seems to be. </p>



<h2 class="wp-block-heading"><strong>Then I made my own</strong> videos</h2>



<p class="wp-block-paragraph">The Madame Leota video looks great, but I wanted more. So I hopped over to Gemini and started creating 10 second videos to upload to the device. Some looked great, some were just ok, but it was still a fun process. </p>



<p class="wp-block-paragraph">Here are a few I made, in case you want to use them yourself. </p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Souls trapped in fire for the Gemmy Haunted Living 12-in Hologram Crystal Ball [creepy]" width="1200" height="675" src="https://www.youtube.com/embed/GPme6qe-ZRs?feature=oembed&#038;enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Shattering porcelain doll made for the Haunted Living Hologram Crystal Ball [creepy]" width="1200" height="675" src="https://www.youtube.com/embed/yzx43q9Iv1U?feature=oembed&#038;enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="1900&amp;apos;s Family at a table for the Haunted Living Hologram Crystal Ball [creepy]" width="1200" height="675" src="https://www.youtube.com/embed/3j4HzIUkB9g?feature=oembed&#038;enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Zombie walking through hallway for Haunted Living Hologram Crystal Ball" width="1200" height="675" src="https://www.youtube.com/embed/3zPJtUwuLns?feature=oembed&#038;enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Realistic Eyeball for the Haunted Living Hologram Crystal Ball [creepy]" width="1200" height="675" src="https://www.youtube.com/embed/xxEkgTmWOMw?feature=oembed&#038;enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can view the full playlist here: <a href="https://www.youtube.com/watch?v=GPme6qe-ZRs&amp;list=PLP2gEaE14RoQ" target="_blank" aria-label="https://www.youtube.com/watch?v=GPme6qe-ZRs&amp;list=PLP2gEaE14RoQ (opens in a new tab)" rel="noreferrer noopener" class="ek-link">https://www.youtube.com/watch?v=GPme6qe-ZRs&amp;list=PLP2gEaE14RoQ</a></p>



<h2 class="wp-block-heading"><strong>What I&#8217;d do differently</strong></h2>



<p class="wp-block-paragraph">There&#8217;s not much I&#8217;d do differently. I would definitely reduce video lengths as mush as possible. And when using Gemini to make new videos, I&#8217;d be sure to prompt for the circle, not for a rectangle.</p>



<p class="wp-block-paragraph">Otherwise, I&#8217;m just enjoying this decoration and prepping for the rest of my Halloween setup. </p>



<p class="wp-block-paragraph"></p>
<p>Read more at <a href="https://buildandbail.com/hologram-crystal-ball-halloween-custom-video/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/hologram-crystal-ball-halloween-custom-video/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>I Was Going to Voice My Kids Podcast Myself. Then I Didn&#8217;t.</title>
		<link>https://buildandbail.com/vocallab-ai-kids-podcast-build-log/</link>
					<comments>https://buildandbail.com/vocallab-ai-kids-podcast-build-log/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Wed, 29 Jul 2026 11:56:58 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[ai voices]]></category>
		<category><![CDATA[audacity]]></category>
		<category><![CDATA[build log]]></category>
		<category><![CDATA[buzzsprout]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[mcnultyverse]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[vocallab]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1909</guid>

					<description><![CDATA[Two months ago I wrote a post about turning my middle grade novel into a podcast. In it I said the whole thing hinged on cloning my own voice — Mike meets an alternate version of himself every book, so I&#8217;d need two Mikes, and an AI clone of me was the obvious answer. I&#8217;m [&#8230;]<p>Read more at <a href="https://buildandbail.com/vocallab-ai-kids-podcast-build-log/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Two months ago I wrote a post about <a href="https://buildandbail.com/i-wrote-a-kids-book-or-is-it-a-podcast/" class="ek-link">turning my middle grade novel into a podcast</a>. In it I said the whole thing hinged on cloning my own voice — Mike meets an alternate version of himself every book, so I&#8217;d need two Mikes, and an AI clone of me was the obvious answer.</p>



<p class="wp-block-paragraph">I&#8217;m not doing that anymore.</p>



<p class="wp-block-paragraph">I found a tool called <a href="https://appsumo.com/s/1fpvval/" target="_blank" aria-label="VocalLab.ai on AppSumo (opens in a new tab)" rel="noreferrer noopener" class="ek-link">VocalLab.ai on AppSumo</a>, and once I opened the audiobook mode I realized I wasn&#8217;t looking at a voice cloning problem. I was looking at a casting problem I could actually afford.</p>



<p class="wp-block-paragraph"><strong>Heads up: the AppSumo link in this post is a referral link. If you buy through it I get a cut. I bought it with my own money before I had any reason to write about it.</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">What changed</h2>



<p class="wp-block-paragraph">The old plan:</p>



<ul class="wp-block-list">
<li>Record all 9 episodes myself in Audacity</li>



<li>Clone my voice in ElevenLabs for the counterpart character</li>



<li>A 43-year-old man doing a 10-year-old&#8217;s voice for 2.7 hours</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">The new plan:</p>



<ul class="wp-block-list">
<li>Every character gets its own voice</li>



<li>I write, direct, and edit — I don&#8217;t perform</li>



<li>Audacity is now for assembly and timing, not recording</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">The honest version: I did test recordings. I sound like a 43-year-old man doing a 10-year-old&#8217;s voice. Finn Caspian works because that guy can actually do it. I can&#8217;t.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">How VocalLab&#8217;s audiobook mode actually works</h2>



<p class="wp-block-paragraph">This isn&#8217;t the standard text-to-speech box. It&#8217;s structured for multi-character work:</p>



<ul class="wp-block-list">
<li>One character block at a time</li>



<li>2,000 character limit per block</li>



<li>Inline sound tags dropped right into the text — <code>[laugh]</code>, <code>[breathe]</code>, <code>[sigh]</code></li>



<li>No steering prompts. The text and the tags are your only direction.</li>
</ul>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="804" height="703" src="https://buildandbail.com/wp-content/uploads/2026/07/image-4.png" alt="image" class="wp-image-1910" title="I Was Going to Voice My Kids Podcast Myself. Then I Didn&#039;t." srcset="https://buildandbail.com/wp-content/uploads/2026/07/image-4.png 804w, https://buildandbail.com/wp-content/uploads/2026/07/image-4-300x262.png 300w, https://buildandbail.com/wp-content/uploads/2026/07/image-4-768x672.png 768w" sizes="auto, (max-width: 804px) 100vw, 804px" /></figure>



<p class="wp-block-paragraph">That last one matters. If you&#8217;ve used TTS tools where you write a separate &#8220;read this sadly, slower, more distant&#8221; instruction, that doesn&#8217;t exist here. Your only lever is the writing itself. Short sentences read slower. Paragraph breaks create air. Punctuation is direction.</p>



<p class="wp-block-paragraph">Which means the script stopped being a script and became a set of instructions for a machine.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The two things I got wrong first</h2>



<p class="wp-block-paragraph"><strong>The pause problem.</strong> There&#8217;s a moment where Mike says &#8220;No. Way.&#8221; It has to land as two beats with a real gap. Generated as one block, it comes out as one flat phrase. The fix is three separate blocks — &#8220;No.&#8221; then silence I insert manually at about 0.8 seconds, then &#8220;Way.&#8221; Any dramatic beat in your script is a separate generation. Plan for it.</p>



<p class="wp-block-paragraph"><strong>The bleed problem.</strong> Grandpa&#8217;s laugh was tagged inline at the end of his line and it smeared into the next thing he said. Standalone laughs get their own block with nothing in it but <code>[laugh]</code>. Generate alone, drop into the timeline manually.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The rewrite I didn&#8217;t see coming</h2>



<p class="wp-block-paragraph">The book is third person. &#8220;Mike opened one eye.&#8221; Standard middle grade.</p>



<p class="wp-block-paragraph">But the podcast has a framing device — a Counterpart Log that opens and closes each episode in Mike&#8217;s voice — and that log was already first person. So I had a narrator saying &#8220;there&#8217;s a journal on my nightstand&#8221; and then, thirty seconds later, &#8220;Mike chewed his toast.&#8221;</p>



<p class="wp-block-paragraph">It&#8217;s a small thing on the page. In audio it&#8217;s a guy talking about himself in the third person for 18 minutes.</p>



<p class="wp-block-paragraph">I went back and forth with Claude on it. Third person is a legitimate audio drama convention — the narrator as an older Mike looking back. Finn Caspian does exactly that. But the log already set the precedent, and first person closes the gap.</p>



<p class="wp-block-paragraph">Converted all of Episode 1. Mostly a find-and-replace with verb tense cleanup, not a rewrite. Two things I learned doing it:</p>



<ul class="wp-block-list">
<li>Description blocks stay mixed. &#8220;Olivia came stomping in,&#8221; not &#8220;she came stomping in.&#8221; Mike is still observing the scene, and first-person narration does this naturally.</li>



<li>The end-of-episode teaser got better. &#8220;I learn the rules&#8221; beats &#8220;Mike learns the rules.&#8221; More personal, more hook.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Where it stands</h2>



<ul class="wp-block-list">
<li>Episode 1 is formatted, converted, and partially generated</li>



<li>Episodes 2 through 9 are scripted but not yet reformatted for the block structure</li>



<li>Still recording all 9 before publishing any of them</li>



<li>Still dropping 3 on launch day, weekly after that</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Here&#8217;s the opening of Episode 1. Judge it yourself.</p>



<figure class="wp-block-audio"><audio controls src="https://buildandbail.com/wp-content/uploads/2026/07/mcnultyverse-test.mp3"></audio></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The stack, updated</h2>



<ul class="wp-block-list">
<li><strong>VocalLab.ai</strong> — all character voices (<a href="https://appsumo.com/s/1fpvval/">referral link</a> — I get a cut if you buy)</li>



<li><strong>Claude</strong> — market research, adaptation, scripts, the first-person conversion</li>



<li><strong>Audacity</strong> — assembly, timing, manual gaps</li>



<li><strong>Buzzsprout</strong> — hosting and distribution</li>



<li><strong>Gemini (Lyria 3)</strong> — the music sting</li>
</ul>



<p class="wp-block-paragraph">Gone from the last version: ElevenLabs, and me.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The part I&#8217;m still uneasy about</h2>



<p class="wp-block-paragraph">I&#8217;m making a children&#8217;s podcast where no child ever hears a human voice.</p>



<p class="wp-block-paragraph"><a href="https://buildandbail.com/where-i-stand-on-ai/" class="ek-link">I don&#8217;t have a clean answer for that</a>. The alternative was a book nobody could find on KDP, or nine episodes of me doing a voice I can&#8217;t do. Bad audio doesn&#8217;t serve kids either. But I&#8217;m not going to pretend this is a neutral tradeoff, and I&#8217;m not going to hide it in the credits.</p>



<p class="wp-block-paragraph">Tell me I&#8217;m wrong in the comments. I&#8217;ll read them.</p>



<p class="wp-block-paragraph">Recording continues. Unless I bail.</p>



<p class="wp-block-paragraph"></p>
<p>Read more at <a href="https://buildandbail.com/vocallab-ai-kids-podcast-build-log/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/vocallab-ai-kids-podcast-build-log/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://buildandbail.com/wp-content/uploads/2026/07/mcnultyverse-test.mp3" length="3932972" type="audio/mpeg" />

			</item>
		<item>
		<title>How I Cloned Desmond Vance in Gemini and Shipped 10-Second TikToks with Canva</title>
		<link>https://buildandbail.com/gemini-custom-avatar-canva-workflow/</link>
					<comments>https://buildandbail.com/gemini-custom-avatar-canva-workflow/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 13:03:52 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[AI Avatar]]></category>
		<category><![CDATA[ai tools]]></category>
		<category><![CDATA[Canva]]></category>
		<category><![CDATA[desmond vance]]></category>
		<category><![CDATA[gemini]]></category>
		<category><![CDATA[tiktok]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1894</guid>

					<description><![CDATA[The Goal I needed a way to test a short-form video idea for my demotivational speaker alter-ego, Desmond Vance, without sitting in front of a camera every time I had a thought. The plan was simple: I wanted a zero-friction pipeline. I wanted to go from an idea in my head to a published TikTok [&#8230;]<p>Read more at <a href="https://buildandbail.com/gemini-custom-avatar-canva-workflow/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">The Goal</h3>



<p class="wp-block-paragraph">I needed a way to test a short-form video idea for my demotivational speaker alter-ego, <a href="https://www.mastertheminimum.com" target="_blank" aria-label="Desmond Vance (opens in a new tab)" rel="noreferrer noopener" class="ek-link">Desmond Vance</a>, without sitting in front of a camera every time I had a thought.</p>



<p class="wp-block-paragraph">The plan was simple:</p>



<ul class="wp-block-list">
<li>Train a custom avatar in Gemini that matches Desmond&#8217;s look and voice.</li>



<li>Generate short 10-second clips on demand.</li>



<li>Drop the MP4s into Canva to add text overlays.</li>



<li>Slap a badge over the Gemini watermark in the corner.</li>
</ul>



<p class="wp-block-paragraph">I wanted a zero-friction pipeline. I wanted to go from an idea in my head to a published TikTok in five minutes flat.</p>



<h3 class="wp-block-heading">The Toolkit</h3>



<ul class="wp-block-list">
<li><strong>Gemini (Custom Avatars):</strong> Clones the look and voice from a source calibration video and generates new 10-second clips.</li>



<li><strong>Canva:</strong> Handles the vertical 9:16 layout, text formatting, and graphic overlays.</li>



<li><strong>TikTok:</strong> The destination for publishing and watching the numbers.</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Here is how we set up the assembly line:</p>



<h3 class="wp-block-heading">The Strategy / The Build</h3>



<div class="wp-block-uagb-image aligncenter uagb-block-319dc94e wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-center"><figure class="wp-block-uagb-image__figure"><img decoding="async" src="https://buildandbail.com/wp-content/uploads/2026/07/Desmond-video-in-gemini-build-and-bail.png" alt="desmond video in gemini build and bail" class="uag-image-1901" width="561" height="558" title="desmond video in gemini build and bail" loading="lazy" role="img" /></figure></div>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li><strong>Training the custom avatar</strong>
<ul class="wp-block-list">
<li>I dressed up as Desmond Vance:
<ul class="wp-block-list">
<li>Cheap wig</li>



<li>Reading glasses</li>



<li>Ugly tie</li>



<li>Dress shirt and suit jacket</li>
</ul>
</li>



<li>I ran through Gemini&#8217;s avatar creation process.</li>



<li>I recorded the setup video directly in the tool, moving my head side to side and reading out the prompt numbers on screen so it could lock down my facial geometry and voice tone.</li>
</ul>
</li>



<li><strong>Generating the clips</strong>
<ul class="wp-block-list">
<li>Once the avatar was ready, Gemini had Desmond&#8217;s look and voice saved.</li>



<li>I started generating 10-second clips by giving it simple visual actions:
<ul class="wp-block-list">
<li>Staring blankly at a desk</li>



<li>Looking unimpressed in an office</li>



<li>Walking through an empty hallway</li>
</ul>
</li>
</ul>
</li>



<li><strong>Polishing in Canva</strong>
<ul class="wp-block-list">
<li>I downloaded the raw 10-second MP4 and dropped it into a blank 9:16 vertical Canva canvas.</li>



<li>I set the video as the background.</li>



<li>I created a circular headshot badge and positioned it in the bottom corner right over the Gemini watermark.</li>



<li>I added bold, centered text across the top with Desmond&#8217;s quotes (&#8220;Master the Minimum,&#8221; &#8220;Lower Your Expectations&#8221;).</li>
</ul>
</li>
</ul>



<div class="wp-block-uagb-image aligncenter uagb-block-12cd6bfe wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-center"><figure class="wp-block-uagb-image__figure"><img decoding="async" src="https://buildandbail.com/wp-content/uploads/2026/07/Desmond-video-in-canva-build-and-bail.png" alt="desmond video in canva build and bail" class="uag-image-1903" width="552" height="893" title="desmond video in canva build and bail" loading="lazy" role="img" /></figure></div>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">The Roadblocks</h3>



<ul class="wp-block-list">
<li><strong>Viewer distraction from the watermark</strong>
<ul class="wp-block-list">
<li>Big tool watermarks in the corner pull eyes away from the clip. I&#8217;m not trying to hide that it&#8217;s AI—hence writing a whole post about it—I just don&#8217;t want people tuning out or getting disconnected from the joke because a software logo is flashing in the corner.</li>



<li><em>The Fix:</em> I made the circular headshot badge in Canva slightly larger than necessary so it comfortably covers the entire corner, keeping the viewer&#8217;s focus on Desmond and the punchline.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">The Finished Project</h3>



<p class="wp-block-paragraph">The pipeline works. I went from dressing up once in front of my webcam to pumping out multiple TikTok clips without putting the suit back on.</p>



<p class="wp-block-paragraph">You can see the final Desmond Vance videos live on TikTok:</p>



<figure class="wp-block-embed is-type-video is-provider-tiktok wp-block-embed-tiktok"><div class="wp-block-embed__wrapper">
<blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mastertheminimum/video/7665124184611130654" data-video-id="7665124184611130654" data-embed-from="oembed" style="max-width:605px; min-width:325px;"> <section> <a target="_blank" title="@mastertheminimum" href="https://www.tiktok.com/@mastertheminimum?refer=embed">@mastertheminimum</a> <p>The ultimate 4 AM club truth bomb. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f971.png" alt="🥱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a title="desmondvance" target="_blank" href="https://www.tiktok.com/tag/desmondvance?refer=embed">#DesmondVance</a> <a title="mastertheminimum" target="_blank" href="https://www.tiktok.com/tag/mastertheminimum?refer=embed">#MasterTheMinimum</a> <a title="4amclub" target="_blank" href="https://www.tiktok.com/tag/4amclub?refer=embed">#4AMClub</a> <a title="hustleculture" target="_blank" href="https://www.tiktok.com/tag/hustleculture?refer=embed">#HustleCulture</a> <a title="corporatehumor" target="_blank" href="https://www.tiktok.com/tag/corporatehumor?refer=embed">#CorporateHumor</a> <a title="relatable" target="_blank" href="https://www.tiktok.com/tag/relatable?refer=embed">#Relatable</a> <a title="destalk" target="_blank" href="https://www.tiktok.com/tag/destalk?refer=embed">#DESTalk</a></p> <a target="_blank" title="♬ original sound - Master The Minimum" href="https://www.tiktok.com/music/original-sound-7665124201262517023?refer=embed">♬ original sound &#8211; Master The Minimum</a> </section> </blockquote> <script async src="https://www.tiktok.com/embed.js"></script>
</div></figure>



<figure class="wp-block-embed is-type-video is-provider-tiktok wp-block-embed-tiktok"><div class="wp-block-embed__wrapper">
<blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mastertheminimum/video/7664967924150521118" data-video-id="7664967924150521118" data-embed-from="oembed" style="max-width:605px; min-width:325px;"> <section> <a target="_blank" title="@mastertheminimum" href="https://www.tiktok.com/@mastertheminimum?refer=embed">@mastertheminimum</a> <p>&#8220;Mandatory fun&#8221; is an oxymoron. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f697.png" alt="🚗" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a8.png" alt="💨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> True happiness isn&#8217;t a warm beer in a crowded bar with people you already spent 8 hours with—it&#8217;s driving home in silence. Tag a coworker you&#8217;re ghosting today. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f447.png" alt="👇" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a title="desmondvance" target="_blank" href="https://www.tiktok.com/tag/desmondvance?refer=embed">#DesmondVance</a> <a title="mastertheminimum" target="_blank" href="https://www.tiktok.com/tag/mastertheminimum?refer=embed">#MasterTheMinimum</a> <a title="workplacehumor" target="_blank" href="https://www.tiktok.com/tag/workplacehumor?refer=embed">#WorkplaceHumor</a> <a title="boundaries" target="_blank" href="https://www.tiktok.com/tag/boundaries?refer=embed">#Boundaries</a> <a title="companyhappyhour" target="_blank" href="https://www.tiktok.com/tag/companyhappyhour?refer=embed">#CompanyHappyHour</a> <a title="quietquitting" target="_blank" href="https://www.tiktok.com/tag/quietquitting?refer=embed">#QuietQuitting</a> <a title="worklifebalance" target="_blank" href="https://www.tiktok.com/tag/worklifebalance?refer=embed">#WorkLifeBalance</a> <a title="corporatelife" target="_blank" href="https://www.tiktok.com/tag/corporatelife?refer=embed">#CorporateLife</a> <a title="goinghome" target="_blank" href="https://www.tiktok.com/tag/goinghome?refer=embed">#GoingHome</a></p> <a target="_blank" title="♬ original sound - Master The Minimum" href="https://www.tiktok.com/music/original-sound-7664968011115268894?refer=embed">♬ original sound &#8211; Master The Minimum</a> </section> </blockquote> <script async src="https://www.tiktok.com/embed.js"></script>
</div></figure>



<figure class="wp-block-embed is-provider-tiktok wp-block-embed-tiktok"><div class="wp-block-embed__wrapper">
<blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mastertheminimum/video/7662526485982367007" data-video-id="7662526485982367007" data-embed-from="oembed" style="max-width:605px; min-width:325px;"> <section> <a target="_blank" title="@mastertheminimum" href="https://www.tiktok.com/@mastertheminimum?refer=embed">@mastertheminimum</a> <p>The biggest red flag in corporate history. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6a9.png" alt="🚩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> &#8220;We&#8217;re a family&#8221; just translates to &#8220;we expect you to work weekends for free.&#8221; Keep it transactional, folks. Be a mercenary of mediocrity. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bc.png" alt="💼" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f91d.png" alt="🤝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a title="corporatehumor" target="_blank" href="https://www.tiktok.com/tag/corporatehumor?refer=embed">#corporatehumor</a> <a title="worklife" target="_blank" href="https://www.tiktok.com/tag/worklife?refer=embed">#worklife</a> <a title="careeradvice" target="_blank" href="https://www.tiktok.com/tag/careeradvice?refer=embed">#careeradvice</a> <a title="toxicworkplace" target="_blank" href="https://www.tiktok.com/tag/toxicworkplace?refer=embed">#toxicworkplace</a> <a title="redflag" target="_blank" href="https://www.tiktok.com/tag/redflag?refer=embed">#redflag</a> <a title="corporatetok" target="_blank" href="https://www.tiktok.com/tag/corporatetok?refer=embed">#corporatetok</a> <a title="9to5" target="_blank" href="https://www.tiktok.com/tag/9to5?refer=embed">#9to5</a></p> <a target="_blank" title="♬ original sound - Master The Minimum" href="https://www.tiktok.com/music/original-sound-7662526482186586911?refer=embed">♬ original sound &#8211; Master The Minimum</a> </section> </blockquote> <script async src="https://www.tiktok.com/embed.js"></script>
</div></figure>



<ul class="wp-block-list"></ul>



<p class="wp-block-paragraph"><strong>The Verdict:</strong></p>



<p class="wp-block-paragraph">I no longer have to set up lights or hit record for every new clip.</p>



<p class="wp-block-paragraph">I no longer have to open a real video editor just to add text to a 10-second video.</p>



<p class="wp-block-paragraph">I no longer want to pull my hair out over video production.</p>



<p class="wp-block-paragraph">Once the template is saved in Canva, shipping a new clip takes under five minutes.</p>
<p>Read more at <a href="https://buildandbail.com/gemini-custom-avatar-canva-workflow/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/gemini-custom-avatar-canva-workflow/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tracking Office Bragging Rights</title>
		<link>https://buildandbail.com/tracking-office-bragging-rights/</link>
					<comments>https://buildandbail.com/tracking-office-bragging-rights/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Tue, 14 Jul 2026 14:26:23 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[ai tools]]></category>
		<category><![CDATA[build log]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[side project]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1884</guid>

					<description><![CDATA[At my day job, we sometimes host competitive events, and tracking scores on whiteboards or messy spreadsheets was getting old. The goal was to build a dedicated, public-facing leaderboard site to track ongoing bragging rights. The requirements were simple but specific: The Toolkit You don&#8217;t need to know how to code to build something like [&#8230;]<p>Read more at <a href="https://buildandbail.com/tracking-office-bragging-rights/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">At my day job, we sometimes host competitive events, and tracking scores on whiteboards or messy spreadsheets was getting old. The goal was to build a dedicated, public-facing leaderboard site to track ongoing bragging rights.</p>



<p class="wp-block-paragraph">The requirements were simple but specific:</p>



<ul class="wp-block-list">
<li>A front page showing overall leaders, split into Men&#8217;s and Women&#8217;s brackets.</li>



<li>Clickable sections for individual events (like &#8220;Plank Hold&#8221; or &#8220;Golf Putting&#8221;) showing the rules and the current standings.</li>



<li>A custom point system where 1st place gets 9 points, 2nd gets 7, down to 10th place.</li>



<li>A hidden admin dashboard where we can add events, enter people&#8217;s scores, and let the app automatically calculate who is winning.</li>
</ul>



<h2 class="wp-block-heading">The Toolkit</h2>



<p class="wp-block-paragraph">You don&#8217;t need to know how to code to build something like this anymore, but you do need to know what tools to tell the AI to use. Here is the basic setup:</p>



<ul class="wp-block-list">
<li><strong>The Brain:</strong> Claude Code (an AI that runs on your computer and writes the files for you).</li>



<li><strong>The Frontend:</strong> Next.js and Tailwind (this just means a modern website that looks clean and works fast).</li>



<li><strong>The Database:</strong> Supabase (a free, easy-to-use place to save all our entrants and scores).</li>



<li><strong>The Hosting:</strong> Cloudflare (to put the site on the internet for free).</li>
</ul>



<h2 class="wp-block-heading">The Secret Sauce: How to Actually Manage the AI</h2>



<p class="wp-block-paragraph">If you are trying to get an app out of your head and onto the screen, <strong>do not write one giant prompt asking the AI to build the whole thing.</strong></p>



<p class="wp-block-paragraph">If you ask for the whole house at once, the AI will build something that looks like a house, but when you open the front door, the plumbing is connected to the ceiling fan. By the time you notice, it&#8217;s too tangled to fix.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="741" height="699" src="https://buildandbail.com/wp-content/uploads/2026/07/image-3.png" alt="image" class="wp-image-1889" style="aspect-ratio:1.060087842257733;width:449px;height:auto" title="Tracking Office Bragging Rights" srcset="https://buildandbail.com/wp-content/uploads/2026/07/image-3.png 741w, https://buildandbail.com/wp-content/uploads/2026/07/image-3-300x283.png 300w" sizes="auto, (max-width: 741px) 100vw, 741px" /></figure>



<p class="wp-block-paragraph">Instead, I used a strict checkpoint system. I gave Claude a master to-do list and forced it to stop after every single step so I could verify it worked.</p>



<ul class="wp-block-list">
<li><strong>Step 1:</strong> Build the database tables. (Stop and let me check).</li>



<li><strong>Step 2:</strong> Write the math logic that calculates ties and assigns points. (Stop and let me run a test).</li>



<li><strong>Step 3:</strong> Build the public homepage with dummy data. (Stop and let me look at it).</li>



<li><strong>Step 4:</strong> Build the password screen for the admin area. (Stop and let me try logging in).</li>



<li><strong>Step 5:</strong> Build the forms to enter real scores. (Stop and let me try it).</li>
</ul>



<p class="wp-block-paragraph">Because I tested step 2 before step 3 was ever written, I knew the math was bulletproof before the AI started building pages that relied on it. This is the secret to rapid prototyping with AI.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="753" height="699" src="https://buildandbail.com/wp-content/uploads/2026/07/image-2.png" alt="image" class="wp-image-1888" style="aspect-ratio:1.0772773675838656;width:469px;height:auto" title="Tracking Office Bragging Rights" srcset="https://buildandbail.com/wp-content/uploads/2026/07/image-2.png 753w, https://buildandbail.com/wp-content/uploads/2026/07/image-2-300x278.png 300w" sizes="auto, (max-width: 753px) 100vw, 753px" /></figure>



<h2 class="wp-block-heading">The Snag: Getting it on the Internet</h2>



<p class="wp-block-paragraph">The only real headache we hit was when it was time to put the site live on Cloudflare.</p>



<ul class="wp-block-list">
<li>Claude initially tried to use an outdated deployment method.</li>



<li>It caused the &#8220;backend&#8221; of our site (the part that saves the scores and checks the passwords) to crash because it was trying to run on the wrong type of engine.</li>



<li><strong>The fix:</strong> I told Claude to rip out the old method and use the modern Cloudflare adapter (OpenNext).</li>
</ul>



<p class="wp-block-paragraph">Once we made that swap, the site immediately worked online exactly how it worked on my computer. <em>Note for builders: Always use the &#8220;preview&#8221; command to test how your site runs on the internet before actually publishing it.</em></p>



<h2 class="wp-block-heading">The Finished Project</h2>



<p class="wp-block-paragraph">The final site is live right now at <a target="_blank" rel="noreferrer noopener" href="https://www.google.com/search?q=https%3A%2F%2Fwww.awesomeofficegames.com">www.awesomeofficegames.com</a>.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1018" height="603" src="https://buildandbail.com/wp-content/uploads/2026/07/image.png" alt="image" class="wp-image-1886" style="aspect-ratio:1.6882836626111546;width:479px;height:auto" title="Tracking Office Bragging Rights" srcset="https://buildandbail.com/wp-content/uploads/2026/07/image.png 1018w, https://buildandbail.com/wp-content/uploads/2026/07/image-300x178.png 300w, https://buildandbail.com/wp-content/uploads/2026/07/image-768x455.png 768w" sizes="auto, (max-width: 1018px) 100vw, 1018px" /></figure>



<p class="wp-block-paragraph">It&#8217;s fast, minimal, and does exactly what it needs to do. Because we built it in clean, logical chunks, it was incredibly easy to go back at the end and ask Claude to add a few polish features, like a navigation bar for the admin area and the ability to fix typos in people&#8217;s names without breaking the leaderboards.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1019" height="673" src="https://buildandbail.com/wp-content/uploads/2026/07/image-1.png" alt="image" class="wp-image-1887" style="aspect-ratio:1.5141484249866524;width:483px;height:auto" title="Tracking Office Bragging Rights" srcset="https://buildandbail.com/wp-content/uploads/2026/07/image-1.png 1019w, https://buildandbail.com/wp-content/uploads/2026/07/image-1-300x198.png 300w, https://buildandbail.com/wp-content/uploads/2026/07/image-1-768x507.png 768w" sizes="auto, (max-width: 1019px) 100vw, 1019px" /></figure>



<p class="wp-block-paragraph">If you&#8217;ve got an idea in your head, the tools are ready. Just remember to steer the ship one checkpoint at a time.</p>
<p>Read more at <a href="https://buildandbail.com/tracking-office-bragging-rights/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/tracking-office-bragging-rights/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>I Built My Own Coffee Roasting App</title>
		<link>https://buildandbail.com/coffee-roasting-app-freshroast-sr800/</link>
					<comments>https://buildandbail.com/coffee-roasting-app-freshroast-sr800/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 14:16:32 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[ai app development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[build log]]></category>
		<category><![CDATA[coffee roasting]]></category>
		<category><![CDATA[drop log]]></category>
		<category><![CDATA[freshroast sr800]]></category>
		<category><![CDATA[roast logging]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1810</guid>

					<description><![CDATA[I roast coffee on a FreshRoast SR800. I also sell roast logbooks for it — paper ones on Amazon, digital files on Etsy. Not a fortune. A handful a month. But &#8220;a handful a month, every month&#8221; is the cleanest signal there is: people want to log their roasts, and some of them will pay [&#8230;]<p>Read more at <a href="https://buildandbail.com/coffee-roasting-app-freshroast-sr800/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I roast coffee on a FreshRoast SR800. I also sell <a href="https://amzn.to/4u5C0N2" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow sponsored" class="ek-link">roast logbooks</a> for it — paper ones on Amazon, digital files on Etsy. Not a fortune. A handful a month. But &#8220;a handful a month, every month&#8221; is the cleanest signal there is: people want to log their roasts, and some of them will pay for a tool to do it.</p>



<p class="wp-block-paragraph">So a <strong>FreshRoast SR800 roast logging app</strong> wasn&#8217;t a guess. It was the digital version of a thing I already sell. I built Drop Log for me first — I&#8217;m the most reliable user I have — but with actual evidence the need is real, not a hunch I talked myself into.</p>



<p class="wp-block-paragraph">Then I made a string of calls that look like shortcuts and weren&#8217;t. Here&#8217;s the reasoning.</p>



<p class="wp-block-paragraph"><strong>Why I built it in a single browser tab</strong></p>



<p class="wp-block-paragraph">The &#8220;proper&#8221; plan I worked out with Claude had me installing Xcode, Android Studio, Node, a build service — the full native dev gauntlet before writing one line. I looked at that and decided I&#8217;d rather build than configure.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="547" height="779" src="https://buildandbail.com/wp-content/uploads/2026/06/image.png" alt="image" class="wp-image-1812" title="I Built My Own Coffee Roasting App" srcset="https://buildandbail.com/wp-content/uploads/2026/06/image.png 547w, https://buildandbail.com/wp-content/uploads/2026/06/image-211x300.png 211w" sizes="auto, (max-width: 547px) 100vw, 547px" /></figure>



<p class="wp-block-paragraph">So I used Gemini AI Studio. One tab. Describe what I want, it writes the code, builds it, I test it. No local environment, no terminal. That tradeoff cost me some things (below), but I stayed in flow instead of losing a night to installers.</p>



<p class="wp-block-paragraph"><strong>Why it&#8217;s an Android roast logger and nothing else (for now)</strong></p>



<p class="wp-block-paragraph">Because I&#8217;m an Android user and I&#8217;m tired of being an afterthought. Every app ships Apple-first and Android waits months for a worse version. I built the Android roast logger I&#8217;ll actually use. iOS happens later, if ever — the reverse of how everyone else does it.</p>



<p class="wp-block-paragraph"><strong>Why there&#8217;s no cloud and no account</strong></p>



<p class="wp-block-paragraph">The original plan had a backend, accounts, a shared recipe database. I cut all of it. Drop Log is a home coffee roasting tracker that lives entirely on your phone, locally. No login, no server.</p>



<ul class="wp-block-list">
<li>it&#8217;s for me first, and I don&#8217;t need a community to log my own roasts</li>



<li>offline-and-yours-forever is a feature next to a roaster in a garage with bad signal</li>
</ul>



<p class="wp-block-paragraph">You save your own recipes locally and replay them. If recipe sharing ever shows up, it&#8217;ll be because I wanted it — not because a roadmap demanded it.</p>



<p class="wp-block-paragraph">The paper logbook still exists for the people who&#8217;d rather keep their phone away from the heat. Same problem, two formats. They&#8217;re not competitors.</p>



<p class="wp-block-paragraph"><strong>The part where the AI lies to you</strong></p>



<p class="wp-block-paragraph">Building an app with AI in one tab is great until you notice the tool is a relentless optimist. Gemini ended nearly every reply with a victory lap — real quotes:</p>



<ul class="wp-block-list">
<li>&#8220;The build compiled with immediate success.&#8221;</li>



<li>&#8220;The application compiles perfectly.&#8221;</li>



<li>&#8220;robust and production-ready.&#8221;</li>
</ul>



<p class="wp-block-paragraph">At the same time:</p>



<ul class="wp-block-list">
<li>it couldn&#8217;t publish for three rounds (&#8220;Developer status does not allow app creation&#8221;)</li>



<li>the version number kept colliding with itself — 1 → 2 → 3 → 4 chasing errors</li>



<li>the bottom nav buttons just didn&#8217;t always work. tap, nothing.</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">&#8220;Production-ready&#8221; and &#8220;frozen buttons&#8221; were true in the same breath. That&#8217;s the catch: the tool narrates success while the thing is broken, and your only real job is to be the person tapping the buttons. I caught the frozen nav by describing the exact symptom, swapped the heat to a real 1–9 scale, and added a Start Roast button so the timer doesn&#8217;t run before the first bean drops. Stuff you only find by using it.</p>



<p class="wp-block-paragraph"><strong>Where it stands</strong></p>



<p class="wp-block-paragraph">Internal testing now — me, garage, real roasts, finding what breaks. Public testing next. Then Drop Log becomes the SR800 roasting app I wanted but couldn&#8217;t find.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="459" height="1024" data-id="1813" src="https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-1-459x1024.png" alt="freshroast app 1" class="wp-image-1813" title="I Built My Own Coffee Roasting App" srcset="https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-1-459x1024.png 459w, https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-1-135x300.png 135w, https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-1-689x1536.png 689w, https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-1.png 768w" sizes="auto, (max-width: 459px) 100vw, 459px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="459" height="1024" data-id="1814" src="https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-2-459x1024.png" alt="freshroast app 2" class="wp-image-1814" title="I Built My Own Coffee Roasting App" srcset="https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-2-459x1024.png 459w, https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-2-135x300.png 135w, https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-2-689x1536.png 689w, https://buildandbail.com/wp-content/uploads/2026/06/Freshroast-App-2.png 768w" sizes="auto, (max-width: 459px) 100vw, 459px" /></figure>
</figure>



<p class="wp-block-paragraph">Verdict: <strong>KEEP GOING.</strong> I built the app I wanted, on the platform I use, for a problem people already pay me to solve on paper. The &#8220;limitations&#8221; are choices. The only thing the AI got wrong was telling me it was done.</p>



<p class="wp-block-paragraph">More once it&#8217;s public.</p>
<p>Read more at <a href="https://buildandbail.com/coffee-roasting-app-freshroast-sr800/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/coffee-roasting-app-freshroast-sr800/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>I wrote a kids book. Or Is It a podcast?</title>
		<link>https://buildandbail.com/i-wrote-a-kids-book-or-is-it-a-podcast/</link>
					<comments>https://buildandbail.com/i-wrote-a-kids-book-or-is-it-a-podcast/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Thu, 14 May 2026 12:14:22 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1803</guid>

					<description><![CDATA[A few years back I started writing a middle grade novel. It&#8217;s about a kid named Mike McNulty who lives in a small Jersey Shore town, turns 10, and finds out he has a power passed through his family that can drop him into alternate dimensions where he meets other versions of himself. In his [&#8230;]<p>Read more at <a href="https://buildandbail.com/i-wrote-a-kids-book-or-is-it-a-podcast/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A few years back I started writing a middle grade novel. It&#8217;s about a kid named Mike McNulty who lives in a small Jersey Shore town, turns 10, and finds out he has a power passed through his family that can drop him into alternate dimensions where he meets other versions of himself.</p>



<p class="wp-block-paragraph">In his first trip in the book, he lands in a world with a purple sky where his counterpart is a sorcerer apprentice who accidentally froze his entire valley. There&#8217;s a talking crow named Pib who has zero patience for either of them. It&#8217;s called <em>Into The McNultyverse</em>.</p>



<p class="wp-block-paragraph">I finished the whole book. Then decided not to publish it as a book.</p>



<p class="wp-block-paragraph">Before making that call I had Claude pull competitive research on KDP for kids books in the middle grade space. The short version: very difficult to rank, very crowded, and discoverability without an existing audience or publisher backing is rough. A serialized fiction podcast gets distributed by Spotify and Apple for free. The book would&#8217;ve needed a marketing push I wasn&#8217;t ready for. So the book became a season.</p>



<p class="wp-block-paragraph"><strong>The thing I didn&#8217;t expect to find</strong></p>



<p class="wp-block-paragraph">Full-cast audio dramas dominate the 7–12 space. Mars Patel, Six Minutes, Kaboom — multiple voice actors, cinematic sound design, the whole thing. Great. Also not happening on a solo creator budget.</p>



<p class="wp-block-paragraph">But there&#8217;s a show called Finn Caspian — one narrator, third-person limited, doing distinct voices for each character — that ran 200 episodes across 12 seasons. That&#8217;s the model.</p>



<p class="wp-block-paragraph">And here&#8217;s where my own concept accidentally solved my biggest production problem. Every book, Mike meets an alternate version of himself. Same voice, different world. I was always going to need two Mikes. That&#8217;s not a casting problem — that&#8217;s an ElevenLabs brief. Clone my own voice, adjust the pacing and delivery to be a little slower, a little more formal — and that&#8217;s the counterpart. The AI weirdness is actually <em>right</em> for an alternate dimension character.</p>



<p class="wp-block-paragraph"><strong>What the build looked like</strong></p>



<p class="wp-block-paragraph">I used Claude to research the kids podcast market before writing anything. Then worked through the whole adaptation — book chapters don&#8217;t map cleanly to podcast episodes, and the book didn&#8217;t have a framing device. Claude suggested a &#8220;Counterpart Log&#8221; that opens and closes each episode in Mike&#8217;s voice, looking back on the adventure. It fits the format perfectly and wasn&#8217;t in the original book at all.</p>



<p class="wp-block-paragraph">Then we wrote all 9 episode scripts. Full book adapted into a full season. About 2.7 hours of audio.</p>



<p class="wp-block-paragraph">The stack:</p>



<ul class="wp-block-list">
<li>Audacity for recording and editing</li>



<li>ElevenLabs for the counterpart voice clone</li>



<li>Buzzsprout for hosting and distribution</li>



<li>Gemini (Lyria 3) for the show&#8217;s music sting</li>
</ul>



<p class="wp-block-paragraph"><strong>Where it is right now</strong></p>



<p class="wp-block-paragraph">Scripts are done. Logo is done. Recording hasn&#8217;t started. Launch date TBD.</p>



<div class="wp-block-uagb-image uagb-block-bdcf5980 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none"><figure class="wp-block-uagb-image__figure"><img decoding="async" src="https://buildandbail.com/wp-content/uploads/2026/05/McNultyverse-Podcast-Logo-300x300.png" alt="mcnultyverse podcast logo" class="uag-image-1804" width="300" height="300" title="mcnultyverse podcast logo" loading="lazy" role="img" /></figure></div>



<p class="wp-block-paragraph">The plan is to record all 9 episodes before publishing any of them, drop 3 on launch day, then weekly from there. I&#8217;ll document the whole thing here — the recording setup, whether the voice clone actually works, and what it sounds like when a 43-year-old tries to voice a 10-year-old convincingly.</p>



<p class="wp-block-paragraph">Coming soon (unless I bail).</p>
<p>Read more at <a href="https://buildandbail.com/i-wrote-a-kids-book-or-is-it-a-podcast/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/i-wrote-a-kids-book-or-is-it-a-podcast/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>I built a content calendar app. Shipping it took three days.</title>
		<link>https://buildandbail.com/content-calendar-cloudflare-pages-deploy-nightmare/</link>
					<comments>https://buildandbail.com/content-calendar-cloudflare-pages-deploy-nightmare/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Thu, 16 Apr 2026 12:11:48 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[build-log]]></category>
		<category><![CDATA[cloudflare-pages]]></category>
		<category><![CDATA[deploy-fails]]></category>
		<category><![CDATA[nextjs]]></category>
		<category><![CDATA[supabase]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1781</guid>

					<description><![CDATA[The app itself was the easy part. Next.js 14, Supabase auth, Tailwind, a calendar view for scheduling Build and Bail posts across TikTok, Shorts, Reels, Reddit, and the blog. Standard stuff. Claude Code knocked that out before I even got seriously involved. Then I tried to deploy it to Cloudflare Pages. Three days, four separate [&#8230;]<p>Read more at <a href="https://buildandbail.com/content-calendar-cloudflare-pages-deploy-nightmare/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The app itself was the easy part. Next.js 14, Supabase auth, Tailwind, a calendar view for scheduling Build and Bail posts across TikTok, Shorts, Reels, Reddit, and the blog. Standard stuff. Claude Code knocked that out before I even got seriously involved.</p>



<p class="wp-block-paragraph">Then I tried to deploy it to Cloudflare Pages.</p>



<p class="wp-block-paragraph">Three days, four separate problems, one leaked Supabase password. Here&#8217;s the autopsy.</p>



<h2 class="wp-block-heading">Problem 1: The login redirect loop</h2>



<p class="wp-block-paragraph">Signed in. Got bounced back to login. Signed in again. Bounced back again. Rinse and repeat until I started questioning my life choices.</p>



<p class="wp-block-paragraph">Cookie writes from server actions weren&#8217;t persisting on Cloudflare&#8217;s edge runtime. The fix:</p>



<ul class="wp-block-list">
<li>Move the sign-in call to a browser client</li>



<li>Use a hard <code>window.location.href</code> redirect after success</li>



<li>Stop trying to be clever with server actions for auth on the edge</li>
</ul>



<p class="wp-block-paragraph">Not elegant. Works.</p>



<h2 class="wp-block-heading">Problem 2: &#8220;Supabase env vars: (none found)&#8221;</h2>



<p class="wp-block-paragraph">I&#8217;d set the <code>NEXT_PUBLIC_*</code> variables as Secrets in the Cloudflare dashboard. Seemed reasonable. Secrets are for secret things, right?</p>



<p class="wp-block-paragraph">Wrong.</p>



<ul class="wp-block-list">
<li>Next.js inlines <code>NEXT_PUBLIC_*</code> vars at build time</li>



<li>Secrets in Cloudflare Pages aren&#8217;t exposed at build time</li>



<li>So every Supabase call crashed with undefined credentials</li>
</ul>



<p class="wp-block-paragraph">Fix was moving them into <code>wrangler.toml</code> under <code>[vars]</code> as plaintext. I added a note to <code>.env.example</code> so future me doesn&#8217;t do this again.</p>



<h2 class="wp-block-heading">Problem 3: 500s on every static chunk</h2>



<p class="wp-block-paragraph">This is where I burned most of the three days.</p>



<p class="wp-block-paragraph">Every JS and CSS file under <code>_next/static/*</code> was returning empty-body 500 errors. Build output looked fine. Logs were clean. Everything was correct. Except nothing worked.</p>



<p class="wp-block-paragraph">I went down a rabbit hole patching <code>_routes.json</code>, which produced a routing overlap error that ironically proved the routing was fine all along.</p>



<p class="wp-block-paragraph">Root cause: the Pages project itself had a corrupt asset bundle. Deleting and recreating the project fixed it in about 90 seconds.</p>



<p class="wp-block-paragraph">The signature to watch for, if anyone else hits this:</p>



<ul class="wp-block-list">
<li>Empty-body 500s on static assets</li>



<li><code>server: cloudflare</code> in response headers</li>



<li>No <code>cf-cache-status</code> header at all</li>



<li>Build log shows success</li>
</ul>



<p class="wp-block-paragraph">If you see all four, stop debugging the code. Delete the Pages project and start over.</p>



<h2 class="wp-block-heading">Problem 4: My Supabase password ended up in my browser history</h2>



<p class="wp-block-paragraph">At some point during all this, a form submission fell back to a GET request because the JS hadn&#8217;t loaded yet. My password got stuck in URL query strings. Which means it&#8217;s in my browser history. Which means it&#8217;s plausibly in Cloudflare&#8217;s edge logs too.</p>



<p class="wp-block-paragraph">I rotated the password. You should probably assume any credential that&#8217;s ever touched a form has leaked somewhere.</p>



<h2 class="wp-block-heading">What actually shipped</h2>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1020" height="975" src="https://buildandbail.com/wp-content/uploads/2026/04/image-3.png" alt="Content Calendar" class="wp-image-1783" title="I built a content calendar app. Shipping it took three days." srcset="https://buildandbail.com/wp-content/uploads/2026/04/image-3.png 1020w, https://buildandbail.com/wp-content/uploads/2026/04/image-3-300x287.png 300w, https://buildandbail.com/wp-content/uploads/2026/04/image-3-768x734.png 768w" sizes="auto, (max-width: 1020px) 100vw, 1020px" /></figure>



<p class="wp-block-paragraph">A working content calendar with:</p>



<ul class="wp-block-list">
<li>Supabase auth that doesn&#8217;t loop</li>



<li>A weekly calendar view for scheduling across platforms</li>



<li>Status tracking (draft / scheduled / posted / flopped)</li>



<li>A quick-add modal so I can dump ideas when they hit</li>



<li>Hosted on Cloudflare Pages for free</li>
</ul>



<p class="wp-block-paragraph">The meta part: I built this specifically to schedule posts like this one. The first post on the calendar is a post about the calendar.</p>



<h2 class="wp-block-heading">Time breakdown</h2>



<ul class="wp-block-list">
<li>Actual building: ~30 minutes</li>



<li>Waiting for Cloudflare builds: a lot</li>



<li>Chasing the wrong theory on problem 3: at least an hour I&#8217;m not getting back</li>



<li>Total wall clock: 3 days</li>
</ul>



<h2 class="wp-block-heading">The real lesson</h2>



<p class="wp-block-paragraph">Deploys lie. When every layer says &#8220;success&#8221; but nothing works, the infrastructure itself might be broken in a way that doesn&#8217;t surface in logs. Recognize that pattern earlier next time.</p>



<p class="wp-block-paragraph">Also: I could have just used Notion. I know. I know.</p>



<p class="wp-block-paragraph"></p>
<p>Read more at <a href="https://buildandbail.com/content-calendar-cloudflare-pages-deploy-nightmare/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/content-calendar-cloudflare-pages-deploy-nightmare/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>I&#8217;ve been running a playoff fantasy football league since 2021. Manually. The whole thing.</title>
		<link>https://buildandbail.com/playoff-fantasy-football-website-build/</link>
					<comments>https://buildandbail.com/playoff-fantasy-football-website-build/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Wed, 08 Apr 2026 12:55:42 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[ai tools]]></category>
		<category><![CDATA[build in public]]></category>
		<category><![CDATA[build log]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[fantasy football]]></category>
		<category><![CDATA[nfl]]></category>
		<category><![CDATA[railway]]></category>
		<category><![CDATA[side project]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1728</guid>

					<description><![CDATA[People email me their picks. I put them in a Google Sheet. Every week during the playoffs I manually look up every stat line for every player on every roster and update the numbers by hand. Then I announce standings in the group chat like a town crier reading from a scroll. Six seasons of [&#8230;]<p>Read more at <a href="https://buildandbail.com/playoff-fantasy-football-website-build/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">People email me their picks. I put them in a Google Sheet. Every week during the playoffs I manually look up every stat line for every player on every roster and update the numbers by hand. Then I announce standings in the group chat like a town crier reading from a scroll.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="896" height="614" src="https://buildandbail.com/wp-content/uploads/2026/04/image.png" alt="image" class="wp-image-1730" title="I&#039;ve been running a playoff fantasy football league since 2021. Manually. The whole thing." srcset="https://buildandbail.com/wp-content/uploads/2026/04/image.png 896w, https://buildandbail.com/wp-content/uploads/2026/04/image-300x206.png 300w, https://buildandbail.com/wp-content/uploads/2026/04/image-768x526.png 768w" sizes="auto, (max-width: 896px) 100vw, 896px" /></figure>



<p class="wp-block-paragraph">Six seasons of this. Six seasons of cross-referencing box scores at midnight on a Sunday, praying I don&#8217;t fat-finger someone&#8217;s receiving yards and start a controversy in the group chat.</p>



<p class="wp-block-paragraph">The league rules aren&#8217;t complicated. They&#8217;re just specific enough that no fantasy platform supports them.</p>



<p class="wp-block-paragraph">Here&#8217;s the format: you draft NFL playoff players. No bench. Just a starting lineup — QB, two RBs, two WRs, a TE, and a FLEX. Points are cumulative across the entire postseason. No head-to-head matchups. No weekly resets. Your guys score until they stop playing football.</p>



<p class="wp-block-paragraph">When a player&#8217;s team gets eliminated, you get substitutions. Four of them. Total. For the whole playoffs. Use one because your receiver&#8217;s team lost in the wild card round, fine — but now you&#8217;ve only got three left. Use one voluntarily because you think you can upgrade at tight end? Bold move. Same cost.</p>



<p class="wp-block-paragraph">There&#8217;s a pick deadline each round. PPR scoring with 2-point conversion math that requires subtracting out the receiving yards, rushing yards, and reception points that were already awarded — otherwise you&#8217;re double-counting. The kind of rules that make perfect sense when you&#8217;re explaining them over beers and make every fantasy app&#8217;s settings page completely useless.</p>



<p class="wp-block-paragraph">So every January, I become a human spreadsheet. Collecting emails. Cross-referencing box scores. Copy-pasting stat lines into a Google Sheet and hoping I didn&#8217;t accidentally give someone else&#8217;s touchdown to the wrong guy.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="702" height="647" src="https://buildandbail.com/wp-content/uploads/2026/04/image-1.png" alt="image" class="wp-image-1731" title="I&#039;ve been running a playoff fantasy football league since 2021. Manually. The whole thing." srcset="https://buildandbail.com/wp-content/uploads/2026/04/image-1.png 702w, https://buildandbail.com/wp-content/uploads/2026/04/image-1-300x276.png 300w" sizes="auto, (max-width: 702px) 100vw, 702px" /></figure>



<p class="wp-block-paragraph">This year I decided to stop doing that.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The Planning Conversation</h2>



<p class="wp-block-paragraph">Same workflow as <a href="https://buildandbail.com/whostat-sports-guessing-game-claude-code-build/" class="ek-link">WhoStat</a>. Before I opened Claude Code, I sat in a regular Claude chat and talked through every rule, every edge case, every &#8220;wait, what happens when&#8230;&#8221; scenario.</p>



<p class="wp-block-paragraph">Roster structure. Substitution logic. The scoring engine — which turned out to be the hardest part, because the 2-point conversion math has to actively undo the PPR and yardage points that were already awarded to avoid counting them twice. That&#8217;s not a setting you toggle. That&#8217;s custom logic that I&#8217;ve been doing in my head while staring at a spreadsheet at 11pm for six straight Januarys.</p>



<p class="wp-block-paragraph">I walked through pick deadlines, the admin panel I&#8217;d need to enter scores, how the public standings page should work so people can stop texting me &#8220;what&#8217;s the score,&#8221; and what happens when someone burns all four subs by the divisional round.</p>



<p class="wp-block-paragraph">Thirty minutes. Ten specific prompts covering project setup, data schema, the scoring engine, a query layer, public standings and team detail pages, an admin panel, business rule validation, API routes, and deployment.</p>



<p class="wp-block-paragraph">Ten prompts. That&#8217;s the whole app that replaces six years of spreadsheet misery.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">What It Actually Does Now</h2>



<p class="wp-block-paragraph"><a href="https://ffplayoffs-production.up.railway.app/" target="_blank" aria-label="The site (opens in a new tab)" rel="noreferrer noopener" class="ek-link">The site</a> has a registration page where players pick their own seven-player roster and submit it themselves. No more emails. No more me manually typing &#8220;Josh Allen&#8221; into a cell at 1am because someone sent me their picks as a bulleted text message with no last names.</p>



<figure class="wp-block-image size-full"><a href="https://ffplayoffs-production.up.railway.app/" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="856" height="354" src="https://buildandbail.com/wp-content/uploads/2026/04/image-2.png" alt="image" class="wp-image-1732" title="I&#039;ve been running a playoff fantasy football league since 2021. Manually. The whole thing." srcset="https://buildandbail.com/wp-content/uploads/2026/04/image-2.png 856w, https://buildandbail.com/wp-content/uploads/2026/04/image-2-300x124.png 300w, https://buildandbail.com/wp-content/uploads/2026/04/image-2-768x318.png 768w" sizes="auto, (max-width: 856px) 100vw, 856px" /></a></figure>



<p class="wp-block-paragraph">There&#8217;s a public leaderboard so everyone can check standings without texting the commissioner. A player results page showing how every drafted player is scoring across all rounds. An admin panel where I enter stats after each round — still manual, but now I&#8217;m entering them once into a real interface instead of hunting through a spreadsheet.</p>



<p class="wp-block-paragraph">And the best part: a Hall of Champions page with every winner and runner-up since 2021. Gerard Balsamo sitting at two titles and three finals appearances like the dynasty he apparently is. The league&#8217;s history actually lives somewhere now instead of in scattered group chat memories.</p>



<p class="wp-block-paragraph">Hosted on Railway. No database — just the app doing its thing. The commissioner still enters scores manually, but the site handles the math, the standings, the substitution tracking, and the public-facing everything.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The Build</h2>



<p class="wp-block-paragraph">Ten prompts, fed to Claude Code one at a time. The same approach that worked for <a href="https://buildandbail.com/whostat-listed-for-sale-flippa/" class="ek-link">WhoStat</a> — architect in chat, execute in Code.</p>



<p class="wp-block-paragraph">The scoring engine was the most satisfying part to watch come together. The 2-point conversion logic is genuinely tricky: you have to calculate the base PPR and yardage points, then figure out what portion came on 2-point plays, then subtract that out so you&#8217;re only crediting the conversion bonus. I&#8217;ve been doing this math manually for years. Watching Claude Code turn it into actual working logic felt like handing off a chore I didn&#8217;t realize I hated.</p>



<p class="wp-block-paragraph">The registration flow was the other big win. People can go to the site, see the available players, pick their seven slots, and submit. No account needed. The commissioner (me) reviews and confirms. That single feature eliminates half the emails I used to get every January.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Why This One&#8217;s Different</h2>



<p class="wp-block-paragraph">Most of my builds are absurd on purpose. A pants delivery service. A URL lengthener. A calculator about children and tug of war.</p>



<p class="wp-block-paragraph">This one replaces a real process that&#8217;s been annoying me every January since 2021. No more collecting picks from email. No more manually looking up every stat line on ESPN. No more copy-pasting numbers into a Google Sheet at midnight and hoping I didn&#8217;t give someone else&#8217;s touchdown to the wrong guy.</p>



<p class="wp-block-paragraph">The league members get a real site with live standings and a place to register their own teams. I get an admin panel instead of a spreadsheet. Everyone wins — especially me, because I won the whole league in 2024 and now there&#8217;s a permanent record of it on the internet.</p>



<p class="wp-block-paragraph">Will I maintain it forever? The playoffs only last a month. Build it once, use it every January, tweak it if the rules change. That&#8217;s not bailing — that&#8217;s seasonal engineering.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>Build status:</strong> Live <br><strong>Cost:</strong> Hosted on Railway <br><strong>Users:</strong> The same 36 guys who&#8217;ve been arguing about playoff fantasy since 2021 <br><strong>Bail risk:</strong> Low — unless I somehow lose my own league, in which case the site might experience unexpected downtime</p>



<p class="wp-block-paragraph"></p>
<p>Read more at <a href="https://buildandbail.com/playoff-fantasy-football-website-build/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/playoff-fantasy-football-website-build/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>I Listed My Sports Guessing Game for Sale on Flippa</title>
		<link>https://buildandbail.com/whostat-listed-for-sale-flippa/</link>
					<comments>https://buildandbail.com/whostat-listed-for-sale-flippa/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Sat, 04 Apr 2026 14:20:25 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[bail]]></category>
		<category><![CDATA[build log]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[flippa]]></category>
		<category><![CDATA[for sale]]></category>
		<category><![CDATA[side project]]></category>
		<category><![CDATA[sports]]></category>
		<category><![CDATA[whostat]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1691</guid>

					<description><![CDATA[Build: WhoStat → Flippa listing Tools used: Claude (chat), Claude Code, Flippa This is the first Build and Bail project to complete the full cycle. Idea. Build. Ship. Bail. WhoStat is a daily sports stats guessing game — Wordle but for sports nerds. You get a career stat line with no name attached and three [&#8230;]<p>Read more at <a href="https://buildandbail.com/whostat-listed-for-sale-flippa/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Build: WhoStat → Flippa listing</strong> <br><strong>Tools used: Claude (chat), Claude Code, Flippa</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">This is the first Build and Bail project to complete the full cycle. Idea. Build. Ship. Bail.</p>



<p class="wp-block-paragraph">WhoStat is a daily sports stats guessing game — Wordle but for sports nerds. You get a career stat line with no name attached and three guesses to figure out who the player is. Three puzzles a day: NFL, NBA, MLB. Wrong guesses unlock hints. New puzzles every day. 750 players in the database. The site runs itself.</p>



<p class="wp-block-paragraph">I already wrote the full build log — how I used regular Claude chat to plan the whole project, turned that into twelve prompts, and fed them to Claude Code one at a time to build the thing in a few hours. You can read that here: <a href="https://buildandbail.com/whostat-sports-guessing-game-claude-code-build/" class="ek-link">WhoStat Build Log</a></p>



<p class="wp-block-paragraph">This post is about the other half. The bail.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Why I&#8217;m Selling It</h2>



<p class="wp-block-paragraph">Because that&#8217;s the whole point.</p>



<p class="wp-block-paragraph">WhoStat works. It&#8217;s a fun game. I play it myself sometimes. But I&#8217;m not the person who&#8217;s going to add leaderboards, streak tracking, push notifications, and an ad layer. I&#8217;m not going to maintain a player database across three sports for the next five years. I know who I am.</p>



<p class="wp-block-paragraph">I built it to see if I could build it. I could. Now it&#8217;s someone else&#8217;s turn.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The Flippa Listing</h2>



<p class="wp-block-paragraph">I listed WhoStat on Flippa under Projects &amp; Concepts — because that&#8217;s exactly what it is. A fully built digital asset with no revenue. Pre-monetization. The buyer gets the domain, the codebase, the 750-player database, and a deployment pipeline that costs nothing to run.</p>



<p class="wp-block-paragraph">The honest pitch: this is a working product with a clear path to making money — ads, premium features, more sports — but zero financial history. You&#8217;re buying the build, not the business. Someone who wants a sports daily game without starting from scratch, this is their shortcut.</p>



<p class="wp-block-paragraph">Check out the listing here: <a href="https://flippa.com/12733039-daily-sports-stats-guessing-game-wordle-meets-espn-three-puzzles-daily-nfl-nba-mlb-750-players-fully-built-static-site-no-backend-zero-hosting-costs">WhoStat on Flippa</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The Takeaway</h2>



<p class="wp-block-paragraph">The Build and Bail philosophy isn&#8217;t about building things that fail. It&#8217;s about building things fast, being honest about whether you&#8217;re the right person to keep running them, and making room for the next idea.</p>



<p class="wp-block-paragraph">WhoStat didn&#8217;t fail. I just finished my part.</p>



<p class="wp-block-paragraph">If it sells, great — someone else gets a head start on something cool. If it doesn&#8217;t, the domain&#8217;s still mine, the game still works, and the build log still exists as proof that you can go from &#8220;I have an idea&#8221; to &#8220;it&#8217;s listed for sale&#8221; in less time than most people spend debating their tech stack.</p>



<p class="wp-block-paragraph">Launch. Validate. Abandon. Repeat.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>Play it:</strong> <a href="https://www.whostat.com">whostat.com</a></p>



<p class="wp-block-paragraph"><strong>Buy it:</strong> <a href="https://flippa.com/12733039-daily-sports-stats-guessing-game-wordle-meets-espn-three-puzzles-daily-nfl-nba-mlb-750-players-fully-built-static-site-no-backend-zero-hosting-costs">WhoStat on Flippa</a></p>



<p class="wp-block-paragraph"><strong>Build log:</strong> <a href="https://buildandbail.com/whostat-sports-guessing-game-claude-code-build/">How I Built WhoStat</a></p>



<p class="wp-block-paragraph"><strong>Status:</strong> For sale. The circle is complete.</p>
<p>Read more at <a href="https://buildandbail.com/whostat-listed-for-sale-flippa/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/whostat-listed-for-sale-flippa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>I Used Claude to Plan a Sports Guessing Game, Then Used Claude to Build It</title>
		<link>https://buildandbail.com/whostat-sports-guessing-game-claude-code-build/</link>
					<comments>https://buildandbail.com/whostat-sports-guessing-game-claude-code-build/#respond</comments>
		
		<dc:creator><![CDATA[CT]]></dc:creator>
		<pubDate>Mon, 30 Mar 2026 12:18:23 +0000</pubDate>
				<category><![CDATA[Build Logs]]></category>
		<category><![CDATA[ai tools]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[github pages]]></category>
		<category><![CDATA[mlb]]></category>
		<category><![CDATA[nba]]></category>
		<category><![CDATA[next.js]]></category>
		<category><![CDATA[nfl]]></category>
		<category><![CDATA[side project]]></category>
		<category><![CDATA[sports]]></category>
		<category><![CDATA[wordle]]></category>
		<guid isPermaLink="false">https://buildandbail.com/?p=1682</guid>

					<description><![CDATA[Build: WhoStat — a daily sports stats guessing game Time spent: A few hours Tools used: Claude (chat), Claude Code, GitHub Pages, Cloudflare The idea was simple: Wordle, but for sports nerds. You get a stat line — career numbers, no name attached — and three guesses to figure out which player it belongs to. [&#8230;]<p>Read more at <a href="https://buildandbail.com/whostat-sports-guessing-game-claude-code-build/">Build and Bail</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Build: WhoStat — a daily sports stats guessing game</strong> <br><strong>Time spent: A few hours</strong> <br><strong>Tools used: Claude (chat), Claude Code, GitHub Pages, Cloudflare</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">The idea was simple: Wordle, but for sports nerds.</p>



<p class="wp-block-paragraph">You get a stat line — career numbers, no name attached — and three guesses to figure out which player it belongs to. Get it wrong, you get a hint. Get it wrong again, bigger hint. Three sports, three daily puzzles: NFL, NBA, MLB. Come back tomorrow for new ones.</p>



<p class="wp-block-paragraph">That&#8217;s WhoStat.</p>



<p class="wp-block-paragraph">The interesting part isn&#8217;t the idea. There are a dozen sports guessing games out there. The interesting part is how I built it — because I used Claude twice. First as a thinking partner to plan the whole thing. Then as the builder to actually make it.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Phase One: Thinking Out Loud With Claude</h2>



<p class="wp-block-paragraph">Before I wrote a single line of code — before I opened Claude Code at all — I sat down in a regular Claude chat and just started talking through the project.</p>



<p class="wp-block-paragraph">This is the part most people skip when they talk about building with AI. Everyone wants to show the finished product. Nobody talks about the conversation that got them there.</p>



<p class="wp-block-paragraph">I started broad. Here&#8217;s what I want to build. A daily sports guessing game. Three sports. Stat-based clues. Wordle-style progression. Then I started asking Claude to help me make decisions. How should the hint system work? Should it be one puzzle that rotates sports, or three puzzles running at the same time? What stats actually make good clues versus ones that give it away immediately?</p>



<p class="wp-block-paragraph">Claude helped me think through it the way a coworker would — except this coworker never gets tired of your side project and doesn&#8217;t change the subject to talk about their own thing.</p>



<p class="wp-block-paragraph">By the end of that conversation, I had a clear architecture: three simultaneous daily puzzles with independent game states, a static site with no backend, player data bundled as JSON at build time, and a phased prompt plan I could hand directly to Claude Code.</p>



<p class="wp-block-paragraph">That last part is the move. I didn&#8217;t just plan the app — I planned the prompts. Twelve of them, organized into five build phases: scaffolding and data, game logic, UI, social sharing and polish, and deployment. Each prompt was specific enough that Claude Code could execute it without me having to babysit every decision.</p>



<p class="wp-block-paragraph">Regular Claude chat became the architect. Claude Code became the contractor. Same brain, different jobs.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Phase Two: Building It With Claude Code</h2>



<p class="wp-block-paragraph">The build itself used my usual stack: Claude Code writing the code, pushing to GitHub, deployed through Cloudflare Pages. Next.js with static export and Tailwind CSS. No database, no server, no API calls at runtime. Everything baked in at build time.</p>



<p class="wp-block-paragraph">I fed Claude Code the prompts one at a time and let it work. Scaffolding went up clean. Game logic came together. The UI landed in a good spot without much fussing.</p>



<p class="wp-block-paragraph">Then the problems started.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The Snags</h2>



<p class="wp-block-paragraph"><strong>The API wall.</strong> My original plan was to pull player data from real sports APIs — balldontlie.io for NBA, the MLB Stats API, and so on. Smart plan. One problem: Claude Code runs in a sandboxed environment, and those APIs aren&#8217;t reachable from inside it. The connection just dies.</p>



<p class="wp-block-paragraph">So I pivoted. Instead of building a data pipeline that fetches from APIs, I had Claude Code generate curated static JSON datasets directly. Two hundred and fifty players per sport, all active from 2015 to present including recently retired guys. Career stats, accolades, difficulty ratings — all baked right into the build. No API dependency at all.</p>



<p class="wp-block-paragraph">Honestly? The result is better. No rate limits. No API keys to manage. No risk of a third-party service going down and taking my game with it. Sometimes the workaround is the upgrade.</p>



<p class="wp-block-paragraph"><strong>The team history problem.</strong> This one was sneakier. Players change teams. A lot. And the initial data wasn&#8217;t reflecting that — guys were showing up with only their current team, which makes the guessing game either too easy or misleading depending on who it is.</p>



<p class="wp-block-paragraph">If you&#8217;re trying to guess a player from their career stats and the only team listed is where they finished, you&#8217;re missing half the puzzle. A quarterback&#8217;s career numbers look very different when you know they played for three franchises versus one. That context matters for the game to feel fair and fun.</p>



<p class="wp-block-paragraph">Getting Claude Code to handle team histories properly — multiple teams, in order, with the right years — took some back and forth. Not a showstopper, but the kind of thing where you realize the data model you planned in phase one didn&#8217;t account for the messy reality of actual sports careers.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">What WhoStat Actually Does</h2>



<p class="wp-block-paragraph">You go to whostat.com. You pick a sport — NFL, NBA, or MLB. You see a stat card with career numbers: touchdowns, yards, completions, whatever&#8217;s relevant to that sport. No name. No photo. Just numbers.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="665" height="613" src="https://buildandbail.com/wp-content/uploads/2026/03/image.png" alt="image" class="wp-image-1684" title="I Used Claude to Plan a Sports Guessing Game, Then Used Claude to Build It" srcset="https://buildandbail.com/wp-content/uploads/2026/03/image.png 665w, https://buildandbail.com/wp-content/uploads/2026/03/image-300x277.png 300w" sizes="auto, (max-width: 665px) 100vw, 665px" /></figure>



<p class="wp-block-paragraph">You get three guesses. Each wrong guess unlocks a new hint — maybe the player&#8217;s years active, maybe an accolade, maybe a team. By the third guess, you&#8217;ve got enough information that you should be able to narrow it down if you know your stuff.</p>



<p class="wp-block-paragraph">Get it right and you can share your result. Come back tomorrow and there are three new puzzles waiting.</p>



<p class="wp-block-paragraph">The player pool covers 250 players per sport, all from roughly the last decade, which keeps it current enough that casual fans have a shot but deep enough that the hard ones will stump people.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The Two-Claude Workflow</h2>



<p class="wp-block-paragraph">The real takeaway from this build isn&#8217;t WhoStat itself — it&#8217;s the process.</p>



<p class="wp-block-paragraph">Using Claude chat to plan and Claude Code to build is a workflow that makes these projects dramatically faster. The planning conversation isn&#8217;t filler. It&#8217;s where you make the decisions that save you hours of debugging later. What&#8217;s the data model? How does state management work? What are the edge cases? You answer all of that before a single file gets created.</p>



<p class="wp-block-paragraph">Then when you hand Claude Code a well-defined prompt, it actually executes. It&#8217;s not guessing what you want. It&#8217;s building what you already decided.</p>



<p class="wp-block-paragraph">The whole thing — planning, building, debugging the API issue, fixing the team history problem, deploying — took a few hours. For a fully functional three-sport daily game with 750 players and a share feature.</p>



<p class="wp-block-paragraph">I&#8217;m not saying every build will go this smoothly. But the two-step approach — think first, build second, with the same tool doing both — is the closest thing I&#8217;ve found to a repeatable system for shipping side projects fast.</p>



<p class="wp-block-paragraph">And that&#8217;s kind of the whole point of Build and Bail.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>Play it:</strong> <a href="https://www.whostat.com" target="_blank" aria-label="whostat.com (opens in a new tab)" rel="noreferrer noopener" class="ek-link">whostat.com</a></p>



<p class="wp-block-paragraph"><strong>Stack:</strong> Claude (chat) → Claude Code → Next.js → GitHub Pages → Cloudflare</p>



<p class="wp-block-paragraph"><strong>Status:</strong> Live. Until I get bored.</p>
<p>Read more at <a href="https://buildandbail.com/whostat-sports-guessing-game-claude-code-build/">Build and Bail</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://buildandbail.com/whostat-sports-guessing-game-claude-code-build/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: buildandbail.com @ 2026-09-10 16:54:30 by W3 Total Cache
-->