Ten years ago, I bought hosting and learned WordPress to publish a landing page.
I started in marketing around that time, and getting a page online meant learning the tools before I could do the work I cared about. Writing the offer only covered one part of the job.
Today I’m a software engineer and I build full stack apps, so I can build a landing page myself. But this experiment took me back to that marketer who wanted to get a page online, because I spent my part of the build writing in Google Docs while Claude Code handled the website.
I already rely on five MCPs for different jobs, and I wanted to see how easily they could build a basic landing page together. I gave Claude the research and copy work, rewrote the words in a Google Doc and asked it to turn that document into a live page.
I used Keenable, Apify, Composio, Context7 and the Cloudflare MCP to build the page for Circles, the open source Substack CRM I built. This is my own product, so I’m advertising it too. You can see the result at circles.chillital.com.
What surprised me was how little structure the doc needed. Four headings gave Claude enough to work with, and I could rewrite the copy right there while it handled the build. If you can describe your offer in a document, you can see why this opens up a basic landing page to people who have never written code.
The tools and static hosting fit their free allowances, so I didn’t need a separate website-builder subscription or a new hosting plan for this page. I used my existing Claude Code access and domain. I ran the experiment on 10 November 2026 and logged every step, including the three places it broke, so you get the prompts and the workarounds below.
TL;DR
Five MCPs, one basic landing page. I tested how easily the tools I already use could take an idea from a Google Doc to a live website.
I wrote in Google Docs. Claude researched the audience, drafted the copy and built the page from my rewrite.
Three steps broke. Claude fixed the doc’s formatting, called Context7 over HTTP and used Wrangler when the Cloudflare MCP couldn’t upload the files.
You decide when to publish. Edit the doc, ask Claude to read it and approve the changes before it deploys. The doc doesn’t trigger updates on its own.
Subscribe for more experiments with agents doing real work, including the parts that break.
Five Familiar Tools, One Shared Job
I picked these five because I already use them for the jobs this page needed. Keenable searches, Apify scrapes pages, and Composio connects Claude to Google Docs. Context7 supplies current documentation, and the Cloudflare MCP lets Claude work with my hosting account.
I put Claude in charge of carrying the work between them, with the doc holding everything I needed to read or edit. That meant I could check the research before approving the copy, then change the copy before Claude wrote any code.
If you’re deciding which jobs deserve an MCP in your own setup, I compared the options in When to Use MCPs, CLIs, or Your Own Tool. For this run, I wanted all five working on the same page.
Start With a Doc You Know How to Edit
I’d connected Google Docs through Composio before starting, so Claude could create the doc and write into it from the same conversation. I gave it four headings and one rule: build the page from Copy, and use everything else as context.
Use Composio to create a Google Doc and name it "Circles: Landing Page". This doc is the single source of truth for the whole project, so set it up for that job:
- A short intro paragraph at the top explaining the rule: everything under Copy can end up on the live page, everything else is context only.
- Four headings: Research, Competitors, Copy, Changelog.
- Under each heading, one italic line saying what goes there and who writes it (Research and Competitors: Claude; Copy: me, Claude drafts the first version; Changelog: Claude, one line per deploy).
Don't fill the sections yet. Give me the doc link and the document ID, and remember the ID for the rest of this session.
Claude writes its findings under Research and Competitors, you edit the words under Copy, and Claude adds a Changelog line after each deploy. You can open the doc and see where your part starts, which matters if someone else handles the setup and you only want to write the page.
To try the same structure, make a copy of the template. The prompts below name Circles, its product facts and its domain, so replace those with your own before running them.
Let Claude Bring the Research Into the Doc
Before writing the copy, I wanted to know how Substack writers described the problem Circles solves. I asked Claude to use Keenable for several narrow searches, then put the findings into the doc through Composio so I could read them before touching the draft.
Research the problem Circles solves before we write a word of copy. Use Keenable, and run several narrow searches in parallel rather than one broad one:
1. How Substack writers describe the pain of keeping track of readers, commenters and collaborators once they pass a few hundred people. Prefer forum threads, Reddit, Substack Notes and posts by writers over vendor blogs.
2. What they use today instead (spreadsheets, Notion, generic CRMs, nothing) and why it breaks.
3. The exact words they use for the problem, so the copy sounds like them, not like a SaaS page.
4. Anything that would make a writer hesitant to try a tool like this (privacy, Substack's terms, cookies, setup effort).
Fetch a page only when the snippet isn't enough. Then write the findings under Research in the Circles doc via Composio, grouped into: Pain points, Current workarounds, Their language (direct quotes with source links), Objections. Every claim needs a source link. Skip anything older than 18 months unless nothing newer exists, and say so if that happens.
When done, tell me the three findings that should most change how we write the page.
Claude ran five searches in parallel and got about 50 results back. It didn’t fetch a single full page because the snippets gave it enough material, and it wrote the findings into Research with a source link on every claim.
The three findings that changed the page all came back to trust. Writers complained about growth tactics, muted accounts they suspected of automated engagement and worried about which tools they could safely use. That’s why the page leads with remembering people, explains that Claude only reads from Circles and gives the cookie trade-off its own section.
Some of the strongest language came from a competing tool’s founder. Claude marked those quotes as research only, and they stayed off the page. You want to understand how people talk about the problem without borrowing someone else’s sales copy.
Give It Actual Competitor Pages to Work From
The research had already surfaced two competitors, so I asked Claude to round out the shortlist before using Apify to scrape their pages. I approved Orbit, StackContacts Studio, WriteStack and Monica.
Now map the competition. First, use Keenable to shortlist 4 tools that help creators or newsletter writers manage relationships with their audience (CRMs for creators, audience analytics, Substack-specific tools). Show me the shortlist with one line each and why it qualifies before scraping.
Then use Apify to scrape each tool's landing page. Search the Apify Store for a suitable crawler, check its input schema, and keep the run small (only the homepage plus the pricing page if there is one). For each tool, add an entry under Competitors in the doc with:
- Hero headline and subheadline, verbatim
- Page sections in the order they appear
- Pricing (tiers and prices, or "the site doesn't list prices")
- Primary and secondary call to action
- One thing they do well that we should learn from, and one gap Circles can claim honestly
Finish the section with a short "Positioning" paragraph: where Circles is clearly different (open source, self-hosted, Claude reads it over MCP, read-only by design) and where it is weaker. Report how many Apify compute units the runs used.
Claude found Apify’s Website Content Crawler and checked its input schema before running it. It kept the crawl on the URLs we wanted and changed the extraction settings to keep the landing page structure, because we needed to see how each competitor arranged its pitch.
The run covered seven URLs in 99.5 seconds and used 0.111 compute units. Claude guessed two pricing URLs that returned 404, while Orbit’s homepage produced roughly 90,000 characters of markdown because it included an interactive demo. The MCP saved that result to a file, and Claude read it from there.
You can keep this step small by naming the pages you want before the crawl starts. We only needed enough to compare the headlines, page structure and offers, and Claude put that comparison into the same doc where I’d edit the copy.
I Wrote the Page Where I Wanted to Manage It
I gave Claude the product facts and asked it to draft the Copy section using what we’d learned. The last line tells it to stop, because I wanted to rewrite the copy myself before it built anything.
Read the Research and Competitors sections back from the doc via Composio, then write a first draft under Copy. Stick to these product facts, don't invent beyond them:
- Circles is an open source relationship CRM for Substack (github.com/cucoleadan/circles-app), self-hosted.
- It merges every like, comment, restack, reply and follow into one contact per person, with a timeline in both directions and separate scores for given and received.
- It shows drift: who went quiet, who's waiting on a reply.
- Claude reads it over MCP with read-only permission, so Claude can answer questions about your circle but never replies for you.
- The Circles Companion Chrome extension captures activity in the browser.
- Trade-off: it reads Substack with your own session cookie, so readers should check Substack's terms.
Structure the draft as page sections (hero, problem, how it works, what you can ask Claude, trust and trade-offs, FAQ, final CTA), each as a heading with plain prose under it. Use the writers' own language from Research where it fits. Put the cookie trade-off on the page, not in fine print. Primary CTA: the GitHub repo. Secondary: the Chrome extension.
Add a Changelog line: "Claude drafted Copy v1". Then stop. I'll edit the Copy section myself before you build anything.
I rewrote most of the Copy section directly in Google Docs, including the hero: “Remember your people. Know who to reply to next.” That put the part I cared about most in the place I wanted to manage it.
I added a line under the button admitting Circles requires some technical setup. I also cut an FAQ answer that implied Circles could show silent readers, because it can’t, and replaced it with a plain “no” and the reason.
This took me back to the marketing work: decide what to promise, explain the offer and catch anything that overstates what the product does. Claude had overreached in that FAQ, and I fixed it in the doc. You need to know your product to make that call, but you don’t need to know how to build the website.
Know someone who has the words for a landing page but gets stuck at building it? Send them this experiment.
The first break: giant headings. When Claude inserted text through Composio , every new paragraph inherited the heading style at the insertion point, so whole sections of bullet points turned into Heading 1 text. It happened three times.
Each time, Claude read the document structure back and reset the wrong styles in one batch. It later formatted my rewrite into nine section headings and eleven subheadings without touching the words, which gave it the structure for the page. If you let an agent write into your doc, make it check its own work before it tells you it’s done.
Turn the Document Into a Live Page
Once I finished the rewrite, I asked Claude to read the doc again and show me how it would turn the Copy section into a page. I wanted to approve the design before it started writing code.
Read the full Circles doc via Composio. Build the landing page from the Copy section only; use Research and Competitors to inform design decisions, never as page text.
Before writing code, use Context7 to pull the current Cloudflare Workers docs for serving static assets and attaching a custom domain, and tell me which doc pages you used.
Then show me a plan, and wait for my OK:
- How you'll map the page structure to the Copy headings
- Design direction in two or three sentences (it should feel like a calm, writer-friendly tool, not a growth-hacking SaaS page), plus why, based on the competitor pages
- Files you'll create and how it deploys
After I approve: build it as a single Worker with static assets, mobile-first, no tracking scripts, no external fonts beyond one Google Font, and real links for the GitHub and Chrome extension CTAs. Deploy with the Cloudflare MCP to circles.chillital.com. Verify the live URL returns the page, check it at phone width, and add a Changelog line in the doc with the date and what shipped.
Claude took its design direction from the competitor scrape, where one loud growth-SaaS page and two calmer ones gave it something concrete to compare. It proposed a warm, quiet page for writers, and I approved it.
You can make that decision in ordinary language, because you know whether a page feels right for the people you want to reach. Claude handled the HTML and checked the result at phone and desktop widths, catching two bugs before anything went live.
Then we hit the two tool problems.
I hadn’t installed Context7 in this setup. I use it elsewhere, but I’d started this session without it. Claude added it and the server showed as connected, yet the running session never loaded its tools, even after /mcp.
Claude worked around that by calling the same Context7 server directly over HTTP. It pulled Cloudflare’s docs for static assets and custom domains, then used them to write the deployment config. We still got the documentation, but we had to leave the normal MCP tool flow to get it.
Connect the tools before you begin and check that Claude can call each one. For research that needs more than documentation, I also wrote about how to search beyond the docs.
The Cloudflare MCP couldn’t upload the files. It confirmed that the zone was active and the hostname was free, then opened an upload session. The upload itself returned 401 Unauthorized twice in Code Mode, and I couldn’t confirm why.
Claude fell back to Wrangler, Cloudflare’s command-line deployment tool, which uploaded three files and attached the domain in 15 seconds. The Cloudflare MCP then checked the domain, certificate and DNS record, and the live URL returned HTTP 200 on the first request.
Keep Wrangler available for uploads when you copy this setup. The Cloudflare MCP handled the account checks and verification, but Wrangler got the files onto the server.
Keeping the Doc Useful After Launch
I wanted to keep using the doc after launch, because that’s where this experiment gets useful for someone who needs to manage a page. You should be able to change a headline where you wrote it, then ask Claude to publish the change.
The sixth prompt gives Claude that job and makes it show you the differences before touching the live page:
I edited the Copy section in the Circles doc. Read it again via Composio and compare it with what's live on circles.chillital.com.
Show me a short diff in plain language: which sections changed, what I added or removed, and anything that needs new code rather than just new text (a new section, a new component). Flag any claim in my edit that contradicts the product facts from earlier.
Wait for my OK, then rebuild, redeploy, verify the live page, and add a Changelog line describing the change.
When I ran it, Claude found no differences because it had already shipped my rewrite in the initial build. It checked that the doc matched the live page, but I didn’t give it a fresh copy edit to deploy after launch, so I still need to test that last part of the loop.
I did ask for a design change in the conversation after launch. Claude had shipped a green accent I hadn’t chosen, so I told it to use the Circles orange. It found #f15a3a in the public repo and checked the contrast before changing the buttons and links, then redeployed and added a Changelog line to the doc.
If you try this with your own page, change one headline after launch and run the prompt again. You can check the diff yourself, approve it and compare the live headline with your doc before trusting the workflow with a larger rewrite.
What the Experiment Cost
I checked the free allowances on 10 November 2026, and this build fit inside them. Apify used 0.111 compute units, which works out to about two cents of compute credit. Composio handled about 24 Google Docs actions, while Keenable ran seven searches across the research and shortlist steps.
I already pay for Cloudflare Workers Paid, and my zone uses the Free website plan. This static page fits Cloudflare’s documented free allowances, but I ran it on my existing paid account.
You still need Claude Code access and a domain if you want your own address. Check each tool’s allowance against your existing usage, because this page shares those limits with whatever else you ask the tools to do.
The Marketer in Me Wants This Setup
I keep thinking about how much I’d have wanted this when I started in marketing. I could have spent more time on the offer and the copy while Claude handled the work of getting a basic page online.
Even so, you still have to connect the tools, and they can fail, as three steps in this run showed. Claude worked through those failures with my approval. Keep the approval steps in your prompts and check the page before you share it.
Once you connect the tools, you can write what you want in a Google Doc and ask Claude to make the page. You decide what it says and how it should feel, then review the result before it goes live. That’s a much smaller learning curve than the one I faced when I started, and the tools and hosting for a page this small fit the free tiers.
If you have an offer you’ve wanted to test, try the prompts on a page of your own. Keep it small, check that Claude gets the facts right, and test one copy change after launch so you know how you’ll manage it from the doc.
Ten years ago, I learned WordPress. This time, I edited a Google Doc.
Tell me which step you’d swap for your own tool in the comments.






Top comments (0)