Two weeks ago, I had a personal website with four pages and no content strategy. Today, I publish two articles a day — one AI News analysis and one Journal reflection — with cover images, proper formatting, and a human-in-the-loop review process. Here is how I built the system, what I learned, and why I think every developer should build something like this.
The Problem
I have opinions about AI. I read papers, test models, build tools. But I never wrote about any of it publicly. The friction was always the same: by the time I sat down to write, the moment had passed. The news was stale. The insight was vague. The motivation was gone.
I needed a system, not willpower.
The Architecture
The content engine runs on three components:
1. The Automation API
I built a simple POST endpoint on my Next.js site that accepts article data — title, slug, content in Markdown, type (AI_NEWS or JOURNAL), and a cover image path. The API creates the post in Supabase with published: false by default.
This is the key design decision: everything starts as a draft. No article goes live without my explicit approval. The AI generates the first draft; I review, edit, and publish.
2. The Workflow
I created a reusable workflow definition that my AI coding assistant follows:
- Research trending AI topics using web search
- Write the AI News article (~1500 words, analytical tone)
- Write the Journal article (~1200 words, reflective tone)
- Generate cover images for both articles
- Submit both as drafts via the API
- Push cover images to the repo
- Notify me to review
The workflow includes a topic calendar so there is variety: Monday is model releases and building in public, Tuesday is agentic AI and developer tools, and so on.
3. The Review Interface
My admin panel at /admin/posts shows all posts with their publish status. I can preview the Markdown rendering, check the cover image, edit the content if needed, and toggle the publish status with one click.
This is the human-in-the-loop pattern in practice. The AI does the heavy lifting of research, drafting, and formatting. I do the quality control — checking facts, adjusting tone, adding personal context that only I can provide.
What I Learned
Lesson 1: Constraints Produce Better Content
The topic calendar seemed rigid at first. Monday is model releases, Thursday is open source — what if something big happens on a Wednesday?
In practice, the constraint helps. It forces me to find angles I would not otherwise explore. When forced to write about "building in public" on a Monday, I end up reflecting on my process in ways that produce genuinely useful articles. Without the constraint, I would just write about whatever is trending, and the journal would become a second news feed.
Lesson 2: The Draft Buffer Is Essential
I almost shipped the system without the draft step. Everything would have published immediately. I am incredibly glad I did not.
About 30% of the AI-generated drafts need meaningful editing. Sometimes the facts are slightly off. Sometimes the tone is too breathless or too cautious. Sometimes there is a better angle that the AI missed because it does not have my context.
The draft buffer turns a 30-minute writing task into a 5-minute review task. That is the right level of effort for daily content.
Lesson 3: Cover Images Matter More Than You Think
I debated whether to generate cover images at all. It seemed like vanity. But once I started, I noticed the articles felt more "real" with them. The images give each piece a distinct visual identity. On the listing pages, they create visual rhythm that makes browsing the content feel polished.
The AI-generated images are not perfect. Some are generic. But they are consistently better than no image, and they cost me zero additional time.
Lesson 4: Consistency Beats Quality
This is the counterintuitive one. A mediocre article published daily builds more momentum than a perfect article published monthly. The daily cadence creates a writing habit, a growing archive, and — most importantly — a feedback loop.
Each article teaches me something about what works. The research process keeps me current. The reflection process clarifies my thinking. After two weeks, I can already feel the compound effect.
The Numbers
In two weeks:
- Articles published: 10 (some days I was still setting up the system)
- Average writing time: ~5 minutes of review per article (the AI does the drafting)
- Cover images generated: 10
- Total infrastructure cost: $0 (Vercel free tier, Supabase free tier)
- Lines of code for the Automation API: 72
The ROI is absurd. Seventy-two lines of code turned my static portfolio into a living, breathing content platform.
What Is Next
I am planning three improvements:
Vietnamese translations. My site already supports i18n with next-intl. The Automation API accepts title_vi and content_vi fields. I just need to add translation to the workflow.
SEO optimization. Each article should have meta descriptions, Open Graph images, and structured data. I have the scaffolding; I just need to wire it up.
Analytics integration. I want to know which articles resonate. Page views, read time, scroll depth — the basics. This will close the feedback loop and help me optimize the topic calendar.
The Bigger Lesson
The real insight from this project is not about content production. It is about leverage.
As developers, we build tools for other people all day. We rarely build tools for ourselves. But the highest-ROI code you will ever write is code that amplifies your own output.
Seventy-two lines of API code. A workflow definition. A review interface. That is all it took to go from zero to two articles a day.
What would you build if you spent one afternoon building tools for yourself instead of for your employer? I think the answer might surprise you.
