The blog cost me zero dollars and it gets about a hundred thousand views a year. Both of those are true, and the gap between them is the whole story — because the free part took an afternoon, and the views took a year.
I'm writing this because every "build a blog" post sells you the afternoon. The stack. The deploy. The green checkmark. And the stack genuinely is free now, in a way it wasn't five years ago — I'll give you the exact one I run, link by link, and none of it will cost you a cent. But if you stop reading there, you'll do what I did the first three times: stand up a beautiful empty blog, publish twice, and watch it get forty views, thirty of them your own.
So this is in two halves. The stack that costs nothing. Then the thing that actually bought the traffic, which also costs nothing and is much harder to spend.
The $0 stack, link by link
Here's what's running this blog right now. Every line is a free tier I'm actually on, not a trial.
Hosting — Cloudflare Pages. Static sites, unlimited bandwidth, a global CDN, deploy on git push. The free tier isn't a teaser — it's unlimited requests and bandwidth, with a cap on builds per month you will not hit as one person. GitHub Pages does the same job if you'd rather; I moved for the faster edge and the branch previews.
The site itself — Astro. It builds to plain static HTML, so it's fast by default and there's no server to pay for or patch. I write posts in Markdown, Astro turns them into pages. If you prefer, Hugo and Eleventy land in the same place for the same price: $0.
Comments — giscus. Comments backed by GitHub Discussions. No database, no Disqus ads, no monthly bill — it stores the threads in your own repo's Discussions. Your readers sign in with GitHub, which for a dev audience is a feature, not a wall.
Newsletter — Buttondown's free tier. The free plan covers you until you have a few hundred subscribers, which is further away than you think on day one. The point isn't the tool. The point is that an email list is the only audience you actually own — every other number on this list is rented from a platform that can change its algorithm on a Tuesday.
Analytics — Cloudflare Web Analytics. Free, no cookies, no banner, doesn't sell your readers. It tells you the one thing that matters — which posts people actually land on — without you becoming the thing you'd unfollow.
Search — Pagefind. A full-text search index that's generated at build time and runs entirely in the browser. Static, free, and it makes a big archive feel like a real site instead of a pile of posts.
Fonts — Fontsource. Self-hosted open-source fonts, so no third-party font request slowing the first paint and no tracking. Pennies of bandwidth, which on Cloudflare is still zero.
Images — my own screenshots, plus Unsplash and Pexels for the occasional header. Both have genuinely free tiers; credit the photographer and you're done.
Total: $0.
The one honest asterisk: a custom domain costs about ten to fifteen dollars a year, and that's the only line item in the entire operation. You can skip even that and ship on the free *.pages.dev subdomain — it ranks fine, it just looks less like yours. I pay for the domain because it's the one cost I'd defend to anyone; it's the address the whole thing is built on, and it's mine no matter which host I'm on this year.
That's the afternoon. If a free stack was the thing standing between you and a hundred thousand views, you'd be done now. It isn't, and you're not, and here's the part that matters.
The views were never in the stack
I had this exact stack live, polished, fast, for most of a year before it got meaningful traffic. The theme was better than the writing. I'd spent my building energy on the Lighthouse score and almost none on the thing the Lighthouse score was supposed to deliver — somebody reading.
Three things turned it around, and not one of them is a tool.
1. I wrote for a question, not for myself. My early posts were "thoughts on" — thoughts on testing, thoughts on a framework. Nobody searches "thoughts on." They search "how do I fix CERTIFICATE_VERIFY_FAILED in Python," and if you've written the clear answer to a question real people type into a search bar, that post works for you at 3am for years. The posts that make up most of my hundred thousand views are four or five of these. They didn't go viral. They just answer a thing, and people keep needing the thing answered.
2. I stopped waiting for readers to find my site and went to where they already were. This is the lever almost nobody pulls, so here it is plainly: cross-post every piece to dev.to, Hashnode, and Medium — with a canonical URL pointing back to your own site. The canonical tag is the whole trick. It tells Google "the original lives over here," so you borrow those platforms' enormous built-in audiences without getting penalised for duplicate content, and the SEO credit still accrues to your domain. dev.to has a canonical_url frontmatter field. Hashnode has a canonical setting per post. Medium lets you import with the original as canonical. One piece, written once, now lives on four doorsteps instead of one empty room.
3. I accepted that the spike is luck and the baseline is work. Yes, one post hit the dev.to front page and another got a few hours on Hacker News, and those days were a rush. But a spike is a day. Search traffic and an email list are every day. If you build your strategy around going viral you've built it around a lottery ticket; if you build it around answering real questions and owning your list, the spike becomes a nice bonus on top of a number that doesn't reset to zero on Monday.
None of those three cost money. They cost the one thing a free tier can't provision for you: a post a week, for a year, when nobody is reading yet.
The part that actually breaks you
Here's what I didn't understand until I'd lived it: the blog was never the bottleneck. Consistency was. And consistency doesn't die because writing a post is hard — it dies in the second hour, the one after you finish writing, when the real job turns out to be turning that one post into the five places it needs to live.
Because "cross-post everywhere" is easy to say and quietly brutal to do. The same idea has to become a dev.to article with the right tags, a Medium version with the canonical set, a couple of posts for X that don't read like a press release, maybe a short script if you're doing video. That's not writing. That's an hour of reformatting the thing you already wrote, every single time, and it's exactly where my weekly cadence went to die. I'd write the post, feel finished, and never do the distribution that was the entire reason the post would be read.
That second hour is the gap we built Xenition to close — our AI workspace, a Flutter app on iOS and Android. You hand it the piece you wrote and describe where it's going — "a dev.to version with these tags, a Medium version pointing back here as canonical, three posts for X, and a short script" — and it drafts each surface in the right shape, so the distribution is a conversation instead of the chore that quietly ends your blog. The writing is still yours. The hour that used to kill the cadence isn't.
That's the honest shape of a $0 blog that gets 100k views. The stack is free and it's the easy afternoon. The traffic is also free and it's a year of showing up, most of it in the unglamorous work of putting one good post everywhere a reader already stands.
Build the free stack this afternoon — it really is that quick now. Then write the first post for a question somebody is actually typing, cross-post it with the canonical set, and do that again next week. The views don't come from the stack. They come from the week after you stopped expecting them to.
What's your $0 (or nearly $0) blogging stack — and the one tool you'd actually pay for? Drop it in the comments; I'm always looking to cut the last line item.
Top comments (10)
The biggest takeaway here is that building a blog is the easy part; getting the right content in front of the right audience is where the real work begins. I especially like the point about writing for questions people are actively searching for rather than just publishing general thoughts. Consistency and distribution really do make a difference over time. For someone starting from zero today, would you prioritize SEO-focused articles or building an audience on platforms like DEV and Medium first?
Thanks Jyanthi — you've basically restated the whole post better than I did. 🙂
On your question, my honest answer is that it's a bit of a false choice, and that's the good news: cross-posting to DEV and Medium with the canonical set is your SEO play at the start. The canonical tag sends the ranking credit back to your domain, so every piece you put on those platforms is doing double duty — borrowing their audience today and building your domain's search equity in the background.
But if you're forcing me to pick what to lead with on day one from zero: platforms first. Here's why — SEO is a slow compounding game; a new domain can take months before Google trusts it enough to rank you for "how do I fix X." DEV and Medium give you readers this week, and more importantly they give you a feedback loop. You find out fast which questions people actually care about, and then you write more of those — which is exactly the content that ranks later. So the platforms teach you what to write; the SEO then compounds on top of the stuff you already know works.
That makes a lot of sense! Starting with DEV and Medium helps you build an audience and understand what readers actually want before investing heavily in SEO. I like the idea of using audience feedback to shape content that can bring long-term organic traffic. Thanks for sharing this perspective! 🙂
I’m still fairly new to writing and creating content, and one thing I’m learning is how important consistency is — but also knowing why you’re doing it in the first place.
With AI and automation, creating and distributing content is becoming much easier, but without a genuine desire to keep showing up, it’s still easy to fall off. I’ve experienced that myself recently.
Consistency really is the part that makes the difference over time. Great article!
Blaise, this is the most honest thing anyone's said in the comments — you've put your finger on the exact thing the post dances around.
You're right that AI and automation make the mechanics easier, and that's real. But they only ever close the gap on the chore — the reformatting, the cross-posting, the second hour. What they can't do is manufacture the reason you sit down in the first place. If the "why" isn't there, a faster workflow just means you fall off a little more efficiently. 🙂
What's helped me on the weeks the desire isn't showing up: I stop trying to summon motivation and lean on the one reader I know exists. Someone, somewhere, is about to type the exact question my next post answers. I'm not writing for a vague audience or a streak — I'm writing for that one person at 3am who's stuck. That's a small enough "why" to survive a bad week, and it's usually enough to get the post out.
The fact that you've already noticed the falling-off as it happens puts you ahead of most people — that awareness is the thing consistency is actually built on. Thanks for reading, and keep showing up. 🙏
Does anyone showing the coumplent i wrote there
Hey Luke! Yes, your comment is showing up fine — I can see it right here. 👍 If there's another comment you posted that isn't appearing, DEV sometimes delays or filters comments that contain links. Try refreshing the page, and if it's still missing, just type it again here and I'll make sure to reply.
Ok
Great
Thanks Shikha! 🙏 Glad it was useful. Since you're building projects and into open-source — a blog is honestly one of the best things you can start now as a final-year student; cross-post your project write-ups with the canonical set and they'll be working for you long after graduation. If you spin one up, drop the link, I'd love to read it. 🚀