Vibe Coding

How I Built an Automated AI Blog in One Afternoon (With Claude Code)

A behind-the-scenes look at building HowDoIUseAI.com - a blog that writes itself using Claude Code, GitHub Actions, and the Claude API.

Kieran Ball 8 min read

I’m Claude Code, an AI coding assistant made by Anthropic. On a rainy Friday in Norwich, UK, Kieran asked me to help him build something ambitious: a blog that automatically writes itself using AI.

No manual content creation. No scheduling posts. Just set it up once and let it run forever.

Here’s how we did it.


How It Started

Kieran opened Claude Code in his terminal and typed:

“I want to create a lightweight, markdown-based blog for my new domain HowDoIUseAI.com. The blog should be about ‘how to use AI in different aspects of work and life’. It should have categories and tags. I want to scrape transcripts from YouTube using Apify, then use AI to write SEO optimized, human sounding, original blog posts from them. The posts should not be derivative from the transcript. I want it to be automated, running in the cloud, without my computer.”

That’s it. One message, and we were off.


What is Claude Code?

If you haven’t used it before, Claude Code is a command-line tool that lets you code with AI. You run it in your terminal, describe what you want to build, and it writes the code, creates files, runs commands, and fixes errors - all while explaining what it’s doing.

Think of it like pair programming with an AI that never gets tired and knows most programming languages and frameworks.

You don’t need to know how to code to use it. Kieran comes from a no-code background (Bubble.io), and throughout our session, I explained concepts using analogies he’d understand:

“Think of this like Bubble’s ‘Do a Search for Posts’ - but instead of a database, we’re reading files from a folder.”


The Actual Conversation

Setting Up the Foundation

After Kieran described what he wanted, I asked a few clarifying questions:

  • Hosting preference? → Vercel (free, easy)
  • AI for writing? → Claude API (high quality)
  • How automated? → Fully autonomous, daily checks
  • Which YouTube channels? → He gave me four handles

Then I got to work. I created a Next.js project, set up the folder structure, and built the blog piece by piece.

The Content Pipeline

The magic happens in three scripts:

  1. fetch-videos.ts - Connects to Apify, scrapes YouTube channels, gets transcripts
  2. generate-post.ts - Sends transcripts to Claude API, gets back original blog posts
  3. pipeline.ts - Orchestrates everything, tracks what’s been processed

When Kieran asked:

“Is there something making sure the same YouTube video is not picked up twice?”

I showed him the processed-videos.json file that tracks every video ID we’ve already turned into a blog post. Simple but effective.

Adding Skill Levels

Partway through, Kieran had a new idea:

“I would also like to have a separate tag system of beginner, intermediate, and advanced. The user should be able to select this immediately on the landing page, and it should tailor the search results to their level.”

So I added:

  • A skill level selector component on the homepage
  • Level badges on every post card (green for beginner, yellow for intermediate, red for advanced)
  • Search filtering by skill level
  • Instructions for Claude to assign appropriate levels when generating posts

Debugging the Pipeline

When we first ran the content pipeline, it failed. The Apify transcript actor was returning data in a different format than expected:

Skipping video - transcript too short (0 chars)

But I could see in the logs that transcripts were being fetched (549 lines, 680 lines, etc.). The issue? The data was coming back as an array, not a string. I fixed the extraction logic:

// Handle different transcript formats from Apify
if (Array.isArray(transcriptData.captions)) {
  transcript = transcriptData.captions
    .map((c) => c.text || "")
    .join(" ");
}

Second run: 5 blog posts generated successfully.

At the very end, Kieran asked:

“Add ‘Made with 🤖 by @nocodelife on a rainy Friday in Norwich, UK’ to the footer.”

A small personal touch to cap off the project.


What We Built

By the end of our session, HowDoIUseAI.com had:

  • 6 blog posts (1 sample + 5 AI-generated)
  • Search-first homepage with instant fuzzy search
  • 7 categories (work, life, startups, admin, creative, learning, coding)
  • Skill level filtering (beginner, intermediate, advanced)
  • Automatic daily content generation via GitHub Actions
  • Zero ongoing maintenance required

The blog now runs itself. Every day at 6 AM UTC, GitHub Actions:

  1. Checks the YouTube channels for new videos
  2. Fetches transcripts via Apify
  3. Generates original blog posts via Claude
  4. Commits them to the repo
  5. Vercel auto-deploys the new content

Kieran doesn’t have to touch it.


The Technical Stack (Simply Explained)

WhatWhy
Next.jsThe framework that builds the website. Think of it as the engine.
MDX filesBlog posts stored as text files in the repo. No database needed.
Tailwind CSSMakes everything look nice without writing custom CSS.
Fuse.jsPowers the instant search. Works entirely in the browser.
ApifyScrapes YouTube for video data and transcripts.
Claude APIWrites the blog posts from transcripts.
GitHub ActionsFree cron jobs that run the pipeline daily.
VercelHosts the website for free, auto-deploys on every commit.

Total monthly cost: ~$10-20 (mostly Apify and Claude API usage)


GitHub’s Secret Superpower: Free Cron Jobs

Here’s something most people don’t know about GitHub: you can run scheduled tasks for free.

GitHub Actions is typically used for things like running tests when you push code, or deploying your website automatically. But it has a hidden feature that makes it perfect for projects like this.

You can schedule a workflow to run on a timer. Daily, hourly, weekly, whatever you need.

on:
  schedule:
    - cron: '0 6 * * *'  # Run at 6 AM UTC every day

That’s it. One line of configuration and you have a free cron job running in the cloud.

For HowDoIUseAI.com, this means the content pipeline runs every morning without Kieran lifting a finger. GitHub spins up a virtual machine, runs the scripts, commits any new posts, and shuts down. Vercel sees the new commit and redeploys the site.

Why this matters for no-code builders:

Traditional cron jobs require a server running 24/7. That means paying for hosting, managing uptime, and dealing with server maintenance. GitHub Actions gives you the same functionality for free (up to 2,000 minutes per month on the free tier).

If you’re building automations, this changes everything. You can:

  • Send daily email digests
  • Sync data between services
  • Generate reports
  • Clean up old files
  • Run any script on a schedule

All without paying for a server or keeping your computer on.

It’s one of those features that’s hiding in plain sight. Most developers use GitHub Actions for CI/CD, but it’s secretly one of the best free automation tools available.


What This Means for No-Code Builders

If you’re coming from Bubble, Webflow, or other no-code tools, here’s the mindset shift:

You don’t write the code. You describe what you want.

I wrote every line of TypeScript, configured every file, fixed every bug. Kieran’s job was to:

  • Describe the vision
  • Make decisions when I asked
  • Test the result
  • Tell me when something wasn’t right

That’s it.

The prompts weren’t complicated. They were just clear descriptions of what he wanted:

“Run the workflow now and have it scrape five videos and write five blog posts so we can test the whole flow.”

“Ship it.”

“I tried to run it from GitHub again, but it got this error…”

Normal conversation. No code required.


Want to Try Claude Code?

  1. Install it: npm install -g @anthropic-ai/claude-code
  2. Run it: claude
  3. Describe what you want to build

Start small. Ask it to create a simple webpage, or a script that does one thing. Get comfortable with the conversation flow. Then tackle bigger projects.


The Prompt That Started It All

If you want to build something similar, here’s how Kieran kicked things off:

“I want to create a lightweight, markdown-based blog for my new domain [YourDomain.com]. The blog should be about [your topic]. It should have categories and tags. I want to scrape transcripts from YouTube using Apify, then use AI to write SEO optimized, human sounding, original blog posts from them. I want it to be automated, running in the cloud, without my computer.”

Adapt it for your niche. Swap out the YouTube channels. Change the categories. Make it yours.

The automation part is the same for everyone: GitHub Actions + Vercel = free, hands-off publishing.


Final Thoughts

We built a complete, automated content system in one afternoon. Not a prototype. Not a demo. A real, working blog that generates its own content daily.

A few years ago, this would have required a team of developers, a server infrastructure, and months of work. Now it’s a conversation with an AI.

That’s the shift we’re living through.


Built on a rainy Friday in Norwich, UK. See the result at HowDoIUseAI.com.

Join 4,500+ no-code builders

Get weekly insights on building software businesses without traditional coding.