How Marketers Are Scaling With AI in 2026
61% of marketers say this is the biggest marketing shift in decades.
Get the data and trends shaping growth in 2026 with this groundbreaking state of marketing report.
Inside you’ll discover:
Results from over 1,500 marketers centered around results, goals and priorities in the age of AI
Stand out content and growth trends in a world full of noise
How to scale with AI without losing humanity
Where to invest for the best return in 2026
Download your 2026 state of marketing report today.
Get Your Report
You shipped a product. You search for it on Google. Nothing.
Every "SEO expert" tells you the same thing. Six months of consistent posting. Hire an agency. Pay $5K a month. Wait.
You don't have $5K a month. You don't have six months. So the product sits there. Invisible.
Lucas Annunziato had this exact problem.
He's the founder of Revo (nightlife platform, 40,000 users on the consumer app). He's also the only developer on his team. So building a marketing function from scratch was off the table.
He let Claude do it.
The result, 28 days later:
0 → 10,300 Google impressions
118 clicks
3 B2B leads that turned into paying clients
Cost: $0 (his existing Claude subscription, Vercel free tier, Unsplash for images)
I sat down with him for a long conversation. The shape of his stack:
a Claude Code agent on his Mac,
a CLAUDE.md file with personas and do's-and-don'ts,
four posts a day at fixed times,
two audiences with different CTAs,
posts saved into Supabase and rendered on Next.js.
Below is the version a non-coder can ship in a weekend. Total cost:
about $10 for a domain.
Total time: 6 to 10 hours, mostly waiting for things to deploy.
I asked him to open-source the engine. He did it. Below is the version a non-coder can ship tonight.
Clone the repo, fill in three markdown files, build a small front-end with Claude Code, schedule it. Put your blog to run tonight.
When you hit a wall (you will), paste the error directly into Claude Code. That's the move non-coders actually have. The model is your tutor.
Remember to not just copy and paste, this is how you can get free leads and customers by an automated machine, so make sure to pay attention and personalize to your needs.
Step 1. Get the accounts
Open six tabs:
Cloudflare Registrar: your domain. $10/year for .com. No markup, no upsell.
GitHub: free. Stores your code.
Vercel: sign in with GitHub. Free tier hosts the blog.
Supabase: sign in with GitHub. Free tier holds the posts.
Unsplash Developer: register, create an app, grab the Access Key. Free.
Anthropic Claude: You probably already pay for this.
Open a notepad. Save these as you go: your domain, Supabase URL, Supabase anon key, Supabase service-role key, Unsplash access key.
Step 2. Install Claude Code
If Node isn't on your Mac yet, install it first: nodejs.org → download LTS → run the installer. Then open Terminal and run:
npm install -g @anthropic-ai/claude-codeVerify it works:
claude --versionStep 3. Clone Lucas's engine
git clone https://github.com/Luc2000/ai-blog-generator-template.git my-blog-bot
cd my-blog-bot
npm install
cp .env.example .envOpen .env in any text editor. You'll fill it in after Step 4.
Step 4. Set up the database
The repo ships with the schema. Open examples/supabase-schema.sql in your editor and copy the contents. Then go to supabase.com → your project → SQL Editor → New query, paste, click Run.
It creates two tables: blog_categories and blog_posts.
In Supabase → Settings → API, copy the Project URL and the service-role key. Paste them into your .env file alongside UNSPLASH_ACCESS_KEY.
Step 5. Configure your blog (the only step that matters)
This is the work most people skip. It's also the only reason Lucas's blog reads as Lucas and not as ChatGPT.
Three files, in order of how often you'll touch them.
src/config/ecosystem.mdis your business context. Two or three pages. What you sell, who buys, topic-to-product mapping, the exact phrases your customers use. This file loads into every single post.src/config/writers/*.mdis one markdown file per writer voice. The repo ships with four fake writers for a fictional nightclub company. Delete all of them. Write your own. Two to four writers is the sweet spot. Give each a different bio, beat, voice, signature phrase, and a list of moves they NEVER make. The bot round-robins between them so the byline distribution stays balanced.src/config/blog-config.tsis the wiring. Categories, schedule (which hours run B2B vs B2C), CTA mapping (topic to URL), banned phrases, and the list of writers tying everything together.
Read pro-tips.md in the repo before you write the writers. Lucas put the failure modes in there. That file is the difference between a blog that reads as four humans and a blog that reads as four ChatGPTs.
Step 6. Test the bot
In your terminal:
npm run generate:dryThis generates a post but doesn't insert it into Supabase. Read it. If it sounds like one of your writers, ship it. If it sounds like ChatGPT, the fix is in your markdown files, not the code. Tighten the personas, rerun.
When you'd publish what it wrote, run the real one:
npm run generateThat inserts a published row into Supabase.
Step 7. Build the front-end
Lucas's repo is the bot. The site that displays the posts is a separate project. He keeps them separate so you can swap front-end stacks without touching the engine.
Open a new terminal window:
cd ~
mkdir my-blog-site && cd my-blog-site
claudePaste this:
I'm building a public blog at [YOUR DOMAIN]. The blog reads posts
from a Supabase table called blog_posts populated by another
process. Build a Next.js 14 site with:
- App Router, TypeScript, Tailwind
- Posts pulled from Supabase using the anon key
- ISR with 60-second revalidation
- Dynamic sitemap.xml listing all rows where status = 'published'
- robots.txt allowing all crawlers
- JSON-LD on every post: Article, Organization, WebSite, BreadcrumbList
- Open Graph and Twitter card meta on every post (title, excerpt, hero image)
- A homepage listing the latest 10 posts
- A /[slug] route rendering the full post
Supabase URL: [PASTE]
Supabase anon key: [PASTE]
Save them in .env.local.
Build it locally first. Walk me through testing on localhost:3000.When Claude says the site is up, open localhost:3000. You should see the post you generated in Step 6.
Step 8. Deploy and connect your domain
Tell Claude:
Push this project to a new GitHub repo, then walk me through importing
it into Vercel and pointing my Cloudflare domain at it.Claude gives you the commands and the click-path. The DNS update lives in Cloudflare under your domain → DNS records. Vercel tells you which records to add. Five minutes for propagation.
In Vercel, go to Settings → Environment Variables and paste the same Supabase keys.
Step 9. Get found by Google
Verify the sitemap is live. Open https://yourdomain.com/sitemap.xml in your browser. You should see XML with one entry per published post. If you see a 404, paste this into Claude Code:
my /sitemap.xml is returning 404. Fix it. The sitemap should be
generated by app/sitemap.ts and pull all rows from the blog_posts
table where status is 'published'.Once /sitemap.xml works, go to search.google.com/search-console → Add property → Domain. Enter your domain. Google gives you a TXT record. Paste it into Cloudflare DNS, wait 5 minutes, click verify.
Once verified, click Sitemaps in the left sidebar and submit https://yourdomain.com/sitemap.xml. Bookmark this dashboard. This is where the curve lives.
Step 10. Schedule it and walk away
Lucas's repo ships with example launchd plists for macOS. Copy one:
cp examples/launchd/com.example.blog-morning.plist ~/Library/LaunchAgents/Edit the path inside the plist to point at your generate.sh, then load it:
launchctl load ~/Library/LaunchAgents/com.example.blog-morning.plistFor four posts a day, copy three more plists at different hours. If you'd rather use cron, the README has the exact line.
Keep your Mac awake: System Settings → Battery → Prevent automatic sleeping when display is off → ON. If you close the lid the Mac sleeps and the schedule stops. Either keep it open or use a clamshell with an external monitor.
(If the Mac thing bothers you, the repo also has a GitHub Actions workflow. For that path you'll need to switch from the Claude CLI to the Anthropic API, since GitHub runners can't log into your Max account.)
Step 11. Wait 28 days
Day 7: Google has crawled most of the site.
Day 14: First impressions show in Search Console.
Day 28: If your markdown files are good, Lucas's curve.
Don't rewrite your config every day. Pick one weekend a month to read 10 random posts the agent wrote and tighten the writer files based on what's drifting.
That's the build. Twenty steps if you count the substeps, six tabs, one cron line, and a CLAUDE.md you keep editing for the rest of the year.
The thing nobody tells you in any other newsletter: this works because of step 7, not because of any of the others. Steps 1-6 and 9-10 are the same for everyone. Step 7 is the only place your business shows up.
Pick the version of this that fits your business. Ship it next weekend.
Watch the full conversation with Lucas and post doubts here in the comments or drop the comments in the video and we will answer then all:
Lucas is dropping his boilerplate on GitHub. I'll link it the moment it's up.
PS.: If you ship a version of this, reply to this email with the URL. I will go there to see the results.
— Bissuh

Look. Everyone's going to read this and say "AI can do SEO for free."
That's the surface. The real move is one layer underneath.
Lucas didn't replace himself. He multiplied himself.
See how he created his CLAUDE.md again. Persona that matches Lucas's actual taste. Audiences he already knows by heart (B2C nightlife, B2B clubs, B2B restaurants). URLs that point at products he already built. Tone calibrated for each.
That's not a writer. That's Lucas in a box, running on a schedule.
The blog doesn't read as slop because it's not generic. It reads as Lucas. At four posts a day. Forever.
The lazy mistake everyone is about to make this week is to clone the stack and skip the spec. Claude on Mac, cron, Next.js, Supabase, free tier. Copy, paste, run. Panic when it produces ChatGPT-flavored mush. Post on X about how AI content doesn't work.
It works. You skipped the part where you teach the agent who you are.
That part doesn't take three days. It takes maybe four hours. It's the only four hours that matter.
If you do one thing this week, write the personas. The infra can wait. The model is the easy part.
See you next Monday.
— Chico




