The first working version took a YouTube URL, waited about 40 seconds, and handed me an SEO blog draft. Then I looked at the token bill for that one run and it reorganized how I built everything after it.
Here is the Day 2 build log. No users yet besides me and a testing account, so nothing here is a growth story. It's just what happened when I tried to turn a link into a post that ranks.
Why I even started
I record a podcast. A 52 minute episode, decent ideas, and my whole distribution was pasting the link into one feed. By lunch the good part was three screens down and gone. I kept telling myself I'd write it up later. Later never has time in it.
I'm a developer, so instead of hiring that discipline I scripted it. Pull the transcript, restructure it into something a search engine and an AI answer engine will both pick up, and stop pretending I'll do it by hand.
What a "credit" actually costs
One generation is one credit. Under the hood that credit is two model passes over the transcript, not one.
A long episode transcript runs 15k to 20k tokens. The first pass does the structural work: a keyword-first title, a TL;DR that answers the query in the first two sentences, question-shaped H2s, and an FAQ block. The second pass is the part I care about most, and I'll get to it.
Two passes over 20k tokens of context is a few cents of compute per generation, not a fraction of a cent. That number is why the free tier is 5 credits a month and not unlimited. I'd rather say "5 real runs, no card" than promise infinity and quietly throttle you. If you want to see the shape of the output before deciding anything, the free YouTube-to-blog page runs the first generation with no signup.
What broke
Fetching YouTube transcripts from a datacenter IP fails most of the time. My first deploy pulled captions maybe one run in six, and the failures weren't loud, they just returned empty and produced a confident blog post about nothing. I moved the fetch behind a residential path with retries before it was reliable. Boring infrastructure problem, real cost in hours.
The second thing that broke was my ego about scope.
The features I deliberately did not build
Every competitor in this space does clips and audiograms. For a while I assumed I had to as well. I didn't build them, and that was the right call.
Podsqueeze and Castmagic already do clips, audiograms, and team seats well. If that's the job, they're the better tool and I'll say so. Chasing them would have meant a worse version of a thing that exists. The one job nobody was doing cleanly for a solo creator was text that actually ranks, so I pointed everything at that and left the video stuff alone. Narrow on purpose beats broad and mediocre.
The de-slop pass
That second model pass is a cleanup step, and it's the detail most developers will appreciate.
AI drafts have tells. Em-dashes everywhere. "At its core." "Let that sink in." Three-item lists where two items were enough. The pass rewrites those out. Concretely, it strips every em-dash and en-dash to plain punctuation, because nothing screams generated like a wall of long dashes. I even verify it in a check rather than trusting the model:
s = open("draft.txt", encoding="utf-8").read()
# 0x2014 em-dash, 0x2013 en-dash
print("dash count:", sum(ord(c) in (0x2014, 0x2013) for c in s))
If that prints anything but zero, the draft doesn't ship. It's a small thing. Small things are the difference between a post a human wrote and a post a human is embarrassed to have their name on.
Where it is now
Day 2. Zero real users. Free first run with no account, 5 credits a month after that. It also writes in Chinese, which the English-only tools don't. It won't cut you video clips or audiograms, and it isn't a podcast host. If you need those, I've already said which tools do them better.
I built it because my own episodes kept dying in the feed. If yours do the same, that's the whole pitch. If you mainly want video clips, go use the tools that are good at video clips.
I'll post the next log when something else breaks, which given Day 2 will be soon.
Top comments (0)