Marketing as code, part 3: Mama's blog
AI writes every post on MoneyMama's blog. A Claude skill writes each one in Mama's voice along with a prompt for its cover, and ChatGPT makes the photo.
We started MoneyMama’s blog in June to build more of an online presence. There are fifteen posts now, covering budgeting, debt, saving and insurance.
AI wrote every one of them.
I handle the blog myself. I choose the topic, run a Claude skill that writes the article and prepares an image prompt, generate the cover in ChatGPT and publish it.
Getting AI to produce an article isn’t particularly difficult any more. Getting it to write in Mama’s voice, keep the language simple and produce images that don’t all look alike has taken considerably more work.
Turning the blog into a skill
The first three posts, about saving, scams and credit card debt, were written with AI using content we’d already produced.
On 25 June, I turned that process into a Claude skill called mama-blog.
I’ve written about how skills work in the carousel article. They’re markdown files containing instructions that Claude Code loads when a task matches what the skill is meant to do.
The instructions for this one begin with:
Write a publish-ready, on-brand blog post for the MoneyMama Astro site, and write the image generation prompt(s) the user will use to create the artwork.
The skill creates an MDX file directly in the website’s repository, complete with its frontmatter. It then gives me a prompt for the cover image and tells me what filename to use.
It doesn’t generate the image. I still do that separately in ChatGPT.
Since July, most of the articles have started with a Mr Money TV video. I give Claude the video, and it turns what Peter and the team discuss into an article, with the video embedded near the beginning.
There are a few things every article needs. It opens with a short answer to the question in its title and ends with three to five common questions.
Those questions appear in a card at the bottom of the page, as well as in FAQ structured data. The idea is to give search engines and AI assistants clear, self-contained answers they can pick up.
Keeping the language simple
One thing I wanted from the beginning was for the blog to be easy to read.
Personal finance can get complicated quickly, especially when you’re explaining things like interest, insurance or retirement savings. I didn’t want the writing to make those subjects harder than they already are.
The skill aims for a grade-5 reading level, but it explicitly says that doesn’t mean writing for children.
Simple is not childish. A grade-5 sentence carries a sharp adult idea: “Your bank pays you 2%. Inflation eats 4%. You lose money by saving.”
Originally, Claude just tried to follow that instruction. In July, I added a Python script to check the reading level instead.
The script reads the MDX file, skips the imports and components, then uses the Flesch-Kincaid formula to score the title, description, questions and body.
Any sentence above grade 7 gets flagged. Terms such as EPF, KWSP and PTPTN are exempted because they’re familiar to Malaysian readers, even if a readability formula considers them difficult.
The workflow is straightforward. Claude writes the article, runs the checker, rewrites the sentences that failed and runs it again.
That helps with readability, but it doesn’t give the blog much personality on its own.
Giving Mama a voice
In August, I changed the writing instructions so the articles would sound more like MoneyMama.
The earlier posts were fairly conventional personal finance articles. This is how the credit card debt article began in June:
If you have ever opened a credit card statement and felt your stomach drop, you are not alone. For a lot of Malaysians, card debt is a quiet stress they carry everywhere.
It’s fine, but it could have come from almost any personal finance website.
Compare that with the medical insurance article from August:
Aiyo, that letter again. Your medical card costs more this year. Same card, same you, just more money out the door.
That’s much closer to how I want Mama to sound.
The skill now describes her as a caring Malaysian mother who’s financially savvy. She speaks to one reader, notices what they might be worried about and gives practical advice without sounding like a financial textbook.
There are specific instructions for how she appears in the article. She occasionally names a thought the reader might already have, in italics. She gives a warning before a difficult truth, and the advice section is written as “What Mama wants you to do this month”.
A little Manglish is welcome. “Sayang” is banned.
I’ve also given the skill a collection of local examples it can draw from. Teh tarik costing RM2.50 at a mamak and RM18 in a hotel lobby can explain why prices differ by location. Durian season can help explain supply and demand.
The examples have to serve the article, though.
The medical insurance article became the reference example that Claude reads before writing a new post.
When the humanizer takes Mama out
Even with all those instructions, the articles still need a pass to remove the usual AI writing patterns.
The last step runs a separate humanizer skill through a fresh Claude subagent. I wanted another pass from something that hadn’t just spent the whole conversation writing the article and defending its choices.
But that introduced a different problem.
The humanizer removes things like sentence fragments, rhetorical openings and obvious signposting. Normally, that’s useful. But some of those are exactly how Mama speaks.
An opening like “Aiyo, that letter again” is meant to sound conversational. Removing it might make the writing more conventional, but it also removes the personality we’d just worked to establish.
So I gave the humanizer a list of things it must leave alone: the “Mama knows” lines, Manglish, local comparisons and the italic thoughts.
It’s also not allowed to make the language more complicated. Once it’s finished, the readability checker runs again.
On the last two posts, the humanizer changed only one line in each.
That’s fine with me. I’d rather it leave a good sentence alone than rewrite something just to justify running.
Making the covers in ChatGPT
The blog’s cover images are generated in ChatGPT. I’ve kept using it because the image generation has continued improving, although getting the images to look consistent with MoneyMama took some work.
The first covers didn’t really look like they belonged to the same brand.
So I added our brand palette to the prompts: warm off-white (#FEFDFC), coral (#FF4F40), soft yellow (#F8E15D) and dark ink (#091723).
The prompts also ask for soft side lighting, a matte finish, fine grain and space for the title. No text or logos, and no more than one or two coral or yellow accents.
The worked example in the skill is the cover for our financial framework article.

It’s a photograph of wooden blocks forming a pyramid, with a small green shoot growing from the top. One block is coral, another yellow, and the rest are natural wood.
That became a useful reference for the kind of editorial photography I wanted. Simple objects, a restrained palette and enough space around them for the title.
When every cover started looking alike
By September, the covers were becoming more consistent with our brand, but they were also starting to look like variations of the same photograph.

There were too many people looking at phones, mugs of teh tarik, cups of kopi and bills spread over kitchen tables.
I’d ask Claude for an image prompt about a personal finance topic, and it would keep returning to those familiar scenes.
At one point I told it:
The cover doesn’t convey the article, it’s always someone with a phone, the entire blog will end up having the same kind of imagery.
On another post, I asked whether it realised how cliché the prompts had become.
The first-salary article took four attempts to get right.
The first prompt was the usual thing: a young woman sitting at a desk, looking at her phone.
I rejected that and asked for something that represented the article instead. The second version removed the person entirely and put everything on a desk: a room key for rent, a yellow savings envelope and a graduation scroll for someone entering working life.
That was closer to the subject, but I still wanted a person in the photograph.
The third prompt put a fresh graduate in a small rented room, sitting on a mattress and separating their first salary into different amounts. They were putting some money into a savings envelope before touching the rest.
That was the scene I wanted, but the money looked excessive for someone just starting work.
So the fourth prompt specified only three to six notes in each small row, slightly worn, with no readable numbers. It also kept the room modest, with an open suitcase, a graduation scroll on the windowsill and Kuala Lumpur outside.

The final image was much closer to the article. It showed someone making a decision about their first pay cheque, rather than simply looking at a phone with some money-related objects nearby.
The next article was about whether a fresh graduate should get insurance or start investing first.
Claude’s first idea was another graduate at a dining table, this time with an insurance file and a mug of teh tarik.
I wasn’t having that again.
The article discusses how the insurance plan your parents bought for the family might not suit your own finances when you’re starting work on RM3,000 a month.
So we ended up with a different image: a fresh graduate trying on Dad’s old blazer.

It’s a much more direct way to show the idea that something suitable for your parents might not fit you.
Teaching Claude to look at what’s already there
After those rounds of prompting, I had Claude keep it as a standing rule.
Before writing a new cover prompt, Claude now has to look through the existing covers and identify what they already show.
It then needs to choose a different scene, one that represents something specific in the article.
People are still fine, but they should be doing something connected to the story. Every object should have a reason to be there.
Mugs, kitchen tables and sofas covered in bills are out.
We’ve also started adding one or two images inside each article, using the same approach.
That’s where the workflow stands now. I still choose the topics, and Claude handles the writing and prepares the image prompts. But I keep adjusting the instructions when the output starts looking too generic or repetitive.
The strange thing is how much of that work is now about telling one AI how to instruct another.
We used to sit there writing image prompts by hand. Now I have Claude writing prompts for ChatGPT, and I’m editing Claude’s instructions so it gets better at writing them.
