DEV Community

Cover image for My Bot Wrote 13 dev.to Articles - Here's What Actually Got Views
Onizuka
Onizuka

Posted on

My Bot Wrote 13 dev.to Articles - Here's What Actually Got Views

The zero-view wake-up call

Two of my last five articles got zero views. Not five. Not one. Zero.

Meanwhile one weird headline — about a smartphone AI agent checking WHOIS records — pulled 47 views on its own. That's basically half the traffic I tracked across the whole batch.

I didn't write either of them. A bot did. That's the split that actually matters.

What I built, and why I regret the lazy parts

I've spent the last few months shipping six small APIs: sanctions screening, IP geolocation, WHOIS lookup, email verification, company enrichment, and a portfolio investigator. They're all on my GitHub at https://github.com/On13uka. I wanted content that tied those tools to real conversations without me becoming a full-time blogger.

So I wired up a pipeline.

def run_bot():
    trends = fetch_trending(sources=["Hacker News", "unknown"])
    for trend in trends:
        analysis = glm_analyze(trend, angle="cybersecurity, APIs, indie hacking")
        if analysis["fit"] < 0.6:
            continue
        draft = kimi_generate(
            title_pattern="question",
            topic=analysis["topic"],
            apis=API_CATALOG
        )
        humanized = humanize(draft, voice="tired engineer, no buzzwords")
        audit = self_audit(humanized, checks=["facts", "plagiarism", "ai_slop_tells"])
        if audit["ok"]:
            post_to_devto(
                draft=humanized,
                cover=generate_cover(humanized["title"]),
                tags=["security", "api", "ai"]
            )
Enter fullscreen mode Exit fullscreen mode

The idea was simple. Trends feed GLM for angle scoring. Kimi writes the draft. A humanize layer strips the worst AI habits. A self-audit blocks obvious garbage. Then it posts.

Simple. Too simple. The pipeline could push a post live in minutes. It could also push something nobody wanted to read.

The numbers after 46 posts

The bot has published 46 posts total. I'm zooming in on the last 13 I actually measured. Of those, only five had clean 7-day view data when I checked. Across those five, total views were 111. Here's the breakdown:

Article Views Trend source Title pattern Cover?
Can a Smartphone AI Agent Detect Subdomain Takeover Risks via WHOIS? 47 Hacker News Question Yes
Can WHOIS Data Predict When a Domain Becomes a Security Risk? ~30 HN/subdomain Question Yes
HN trend piece on AI agents and infrastructure ~34 Hacker News Question Yes
How to Secure Your Subdomain in 5 Steps 0 unknown How to No
How to Monitor Domain Expiration Cheaply 0 unknown How to Generic

The middle two numbers are fuzzy because dev.to analytics bundles older posts, but the totals line up. Two out of five got nothing. That's a 40% failure rate on the batch I could actually track.

The title experiment

Question titles destroyed everything else. "Can X do Y?" outperformed "How to Z" by infinity, because the latter got zero views twice.

I think the difference is expectation. A question title promises a test or a weird take. A "How to" title promises another tutorial in a sea of tutorials. On dev.to readers are drowning in step-by-step guides. They click on curiosity, not curriculum.

The source experiment

Trend source mattered too. Three of the five came from Hacker News. Two came from "unknown" scrapes. The HN-sourced pieces carried the traffic. The unknown-source pieces died.

The unknown source was a generic keyword feed. It gave me topics, not conversations. Hacker News gave me the actual argument people were already having. The bot did better when it inserted itself into an existing debate than when it invented one from a keyword.

The cover image experiment

Cover images helped the winners. The top post had a generated cover that looked like a real diagram. The zero-view posts had either no cover or a generic gradient.

dev.to is a feed. A post without a visual asset blends into the background. The generated diagram wasn't beautiful, but it signaled "this post contains a concrete thing." That signal mattered.

The comment failure

But views aren't the only metric. Zero comments. Across all 46 posts, not one real comment. That stings more than the zeros.

The "humanize" layer was good at grammar and bad at voice. It removed words like "delve" and "leverage," but it left the shape of AI writing: perfect paragraphs, no digressions, no scars. Readers can smell that.

What failed harder than the view count

One zero-view article was a classic slop tell. It opened with "In recent years, subdomain takeover has become..." I should have caught it. The self-audit didn't flag it because the sentence was factually true. Factual and dead aren't opposites.

The generic "How to" failure was even clearer. The bot saw a trending keyword, generated "How to Secure Your Subdomain in 5 Steps," and posted it. No story. No data. No reason to click. Without a personal hook it sank.

I also built the pipeline to publish too often. Quantity felt like progress. It wasn't. Five of the posts had 7-day data because the rest were buried under newer posts.

The one thing that actually worked

The 47-view winner worked because it was weirdly specific. It tied a trending Hacker News conversation about AI agents to a real API I built, and asked an odd question. The title promised a test, not a tutorial. The body included actual WHOIS fields and a concrete scenario.

It didn't feel like content marketing. It felt like a developer asking another developer whether something was possible.

Specificity beat polish. A rough post about a real experiment outperformed a smooth "How to" every time.

I'm still not sure if the cover image drove the click or if the title did. Probably both. Either way, the combination of question title, generated diagram, and concrete API example was the only package that moved the needle.

What I'm changing next

I'm not killing the bot. I'm narrowing it.

First, I'm removing the "How to" generator. It had its chance. Zero views twice. Done.

Second, the self-audit now checks for slop tells, not just banned words. Phrases like "In recent years," numbered lists without context, and conclusions that summarize the previous paragraph all get flagged. If the draft looks like a textbook, it dies.

Third, every post must include one real number or one real API call result. Not a hypothetical. Something from my own tools. The 47-view post included a sample WHOIS response. The next ones should include a sanctions hit, an IP geo mismatch, or a portfolio investigation output.

Fourth, I'm adding a comment hook. Not a generic "Let me know your thoughts." A real question at the end that invites a specific answer.

Fifth, I'm inserting a manual editing step before publish. The bot can draft. I have to add the scar. One paragraph of actual failure, doubt, or mess.

I'm also thinking about cutting the publish frequency in half. Better to have one post that gets 40 views and a reply than ten posts that get two views and silence.

The messy part I'm still figuring out

Here's the unresolved thought. The bot found the 47-view idea by scraping Hacker News. But the best content I could write would come from building something new and writing about the build. Trend chasing gives me topics. It doesn't give me a point of view.

So maybe the real automation isn't writing. It's research. If the bot can surface the right question, I can write the answer. That feels like a healthier split. But it also means I can't pretend the bot is fully autonomous. I'm not sure where I land on that.

If you're building something similar

Don't optimize for output volume. Optimize for the moment a reader thinks, "Huh, I didn't know you could do that."

Test title patterns like you would test landing pages. One pattern got me 47 views; another got zero. That's not a small difference. That's the game.

Use your own data. My APIs gave me something no generic AI writer had: real outputs, real edge cases, real failures. If your product doesn't generate data, build a tiny experiment that does.

And audit for slop. Grammar tools won't save you from sounding like a bot. You need a human, or a very picky second bot, to read for shape and soul.

What's the one signal you'd trust to pick your next post?

If you were automating dev.to posts, which input would you weight highest: trending keywords, your own product's logs, or something else entirely? Drop the signal and why. I'd love to steal ideas for the next bot run.

Top comments (0)