
dhawalshah.net
Learn how I use AI to create software and gain productivity.
I've spent the last few months moving my own site's (dhawalshah.net) recurring marketing work into Claude Code, connected directly to the real platforms over MCP instead of pasted exports. Not a chatbot workflow, an execution one: the same session that pulls the data also edits the files, ships the deploy, and checks the result.
Three projects, not one
The structural decision that mattered most, and that I haven't seen written up anywhere else: it's not one Claude Code project, it's three. Site, ad stack, and video pipeline each run as separate projects with their own CLAUDE.md and guardrails, sharing only voice rules and MCP connections. I tried the one-mega-project version first. The rules started fighting each other, so I split by function instead. A function earns its own project when it has distinct SOPs, distinct guardrails, and distinct platforms.
Website
Every article is a markdown file in git, built with Astro on Vercel. The session writes the draft, wires its own analytics events, places the newsletter CTA, builds locally to check nothing broke, and ships the deploy. Three reviewer subagents run over every draft before it publishes: one scores the writing, one validates on-page SEO (title, headings, schema), one checks brand voice.
SEO and research
DataForSEO over MCP for SERP and keyword pulls, a Search Console MCP I built myself for site performance, a crawler for competitor teardowns. The brief for the article I'm linking below took an afternoon: one session pulled live SERPs for the target queries, crawled 17 competing pages, extracted their heading structures, and mapped every keyword in the cluster to one page. That used to be a research week.
Analytics
GA4 and Search Console queried in plain English, held in the same session so it can reason across sources: "the traffic spike is from one Reddit thread, the query movement is unrelated, and the subscriber bump came from Tuesday's article" is a sentence no single platform's dashboard produces.
Kit for the newsletter, Resend for transactional, a Google Sheet as a subscriber asset vault maintained over MCP. This is also where the sharpest lesson lives: a gated download's Kit form ID has to be on an explicit allowlist or the API silently falls back to the default form. The one time that rule wasn't written down yet, subscribers got tagged correctly and never received the asset. No error, no bounce, just a quiet gap. It's in my CLAUDE.md now so no future session repeats it.
Social and video
LinkedIn content packs drafted by a skill that reads the article, extracts angles, and drafts in my voice against a banned-words list, scheduled through a self-hosted Postiz instance. Short-form video is newer: scripts derive from published articles, an avatar service renders the presenter, captions and overlays get added, each video gets its own page.
What actually broke
One honest failure per channel: a build-time date bug silently stamped the wrong publish date on ten articles. A keyword flagged as low-difficulty turned out to be dominated by university and publisher domains a young site can't displace regardless of content quality, so that article still hasn't ranked. A GTM setup where two triggers could fire on the same click, caught only because someone asked why the trigger names didn't match their types. None of these were exotic bugs. All of them shipped under my own review, which is the part that actually stings.
The numbers
From my own invoices: Claude Max at the 20x tier is $200/month and carries the whole operation. Self-hosted MCP servers on Cloud Run run under $5/month each. DataForSEO is $10-20/month at my research volume. Postiz and the video avatar service add roughly $35 combined. All-in, about $260/month.
Time is the bigger half of the ledger: the weekly cross-platform work that used to take 25 hours now takes about 5, counted conservatively (old way at the low end of each range, terminal at the high end). Writing and shipping an article went from 16-48 hours to 1-3. A LinkedIn content pack went from 3-4 hours to about 30 minutes, mostly review.
One honest caveat, since I also run 2Stallions (digital marketing agency, SEA): this full stack is not agency-wide yet. The one piece that's already extended to client accounts is a 5-platform ad reporting stack (Google, Meta, LinkedIn, TikTok), and that took 18 days to get full API access across all five, 7 of those for one platform's manual review, which is a platform-approval problem, not a coding one. Everything above is the personal pilot; the agency rollout is next.
Full write-up: https://www.dhawalshah.net/article/claude-code-for-marketing/
After 14 years running a digital marketing agency, I somehow never had my own personal site. The irony was not lost on me.
I had Figma designs ready. My dev team was backed up with client work. So I decided to find out if AI could actually ship something professional — not a template, not a quick WordPress site, but a custom multi-page site from my own designs.
Four days later it was live. Here's what surprised me.
What I expected AI to struggle with — it didn't
The tedious stuff. Renaming 83 images with SEO-friendly filenames. Generating JSON-LD structured data for every page. Converting PNGs to WebP in bulk. Adding alt text across the entire site. Each of these would have taken me half a day manually. AI handled them in minutes.
What I expected AI to nail — it completely failed
Screenshots-to-code. I fed Claude my Figma designs as screenshots and asked it to build the pages. The structure was roughly right but the precision was completely off — wrong spacing, wrong typography, layouts that looked AI-generated rather than designed.
The fix: I needed a tool that reads actual Figma design data (layers, spacing values, component hierarchy), not visual interpretation. That changed everything.
The decision that saved the most time wasn't a tool
It was an architecture choice: separating content from code completely. Every page's copy lives in Markdown files. Templates handle layout. When I rewrote all the copy after launch (which I did), I touched zero template files. When I added FAQ sections, it was adding data, not writing code.
This saved more time than any tool in the build.
The honest caveat
Those four days were 10-12 hour days, and my dev background meant deployment and DNS weren't obstacles. Without that background, this workflow will slow you down significantly. For most founders, WordPress + a developer is still the right call.
The final numbers
Build time: 4 days (vs. 4-6 weeks agency timeline)
Tool costs: SGD ~157/month (vs. SGD 4,000 agency quote)
Lighthouse homepage: 99 performance, 100 accessibility, 100 SEO
I wrote up the full workflow — exact tools, what each one handled, where it broke down, and the Lighthouse scores across every page — if you want the step-by-step: https://www.dhawalshah.net/article/building-personal-site-with-ai
Happy to answer questions on the stack or the workflow.
1 Like
Comment
About
It is a place for me to think through my experiments in the open and share about what works, and what doesn't when it comes to using AI to build, release and market products.

1 Comment
I'm curious what convinced you separating the system into three Claude Code projects was the scaling breakthrough rather than simply improving prompts and guardrails within a single project.
After making that change, what was the first sign that you'd found the right architectural boundary instead of just adding more structure?