About six months ago I started The World Now as a side project, an attempt to build a news site where the pipeline is mostly automated but the editorial judgment still feels like a human made the call.
No filler, no scraped soup, no "10 things you won't believe." Here's where it's at and what's running under the hood.
## The stack
- Next.js 15 on Vercel, App Router, RSC where it makes sense. Turbopack for dev, which is genuinely fast but eats HMR state maybe once a day and forces a restart.
- MongoDB Atlas for articles, events, users, engagement. One DB doing most of the work.
- AWS Lambda + Serverless Framework for the article generation pipeline. Cron-triggered, drafts with Grok-4, runs an editorial QA pass, publishes when it passes.
- Resend for email — three audiences: free daily, free weekly, paid weekly deep-dive.
- Stripe for the paid tier.
- Mediavine for display ads on the free tier.
Nothing fancy. The interesting part isn't any single piece, it's the pipeline.
## The article pipeline
Every hour a Lambda wakes up, decides whether to publish, then:
- Pulls from ~20 sources (France24, Times of Israel, ReliefWeb, a few RSS endpoints I wrote custom parsers for).
- Dedups against the last 14 days of articles and against unique-image-across-all-articles.
- Drafts in one of two formats: BREAKING_NEWS (short, fast, ~1,100 words) or SITUATION_REPORT (long-form, context-heavy, ~1,500 words with secondary and tertiary images).
- Generates hero + secondary images, with placeholders while they render.
- Runs editorial QA — word-count checks, unique-image gate, citation format, no clickbait titles, no bare brackets, no word-count trailers leaking in.
- If QA fails: one retry. If it fails twice: drop the article entirely. I'd rather publish fewer good ones than patch bad ones.
Last 20 articles audited averaged 55 citations per BREAKING_NEWS and 70 per SITUATION_REPORT. That's the part I'm proudest of — the thing is genuinely grounded, every claim traceable.
## What's going wrong
Google doesn't love me. Every page in my ranking-target set is
showing "Crawled, currently not indexed" in Search Console. I've been at this for weeks now, structured data tightened, internal linking cleaned up, manual URL inspections, sitemap pings. Nothing moves.
Google then sees the pages, reads them, and shrugs.
Bing, on the other hand, is crushing it. +37.6% impressions week over week, consistent top-10 positions on a handful of competitive
queries, and a traffic mix that's well over 60% Bing at this point.
Which is a sentence I never expected to write.
So the plan is: double down on what's working, and keep trying to get out of Google jail.
## What's next
- Per-location earthquake pages (
/earthquakes-today/[location]) with live USGS data — 15 country/state variants, each with its own fault systems, safety playbook, and official channels (JMA for Japan, ShakeAlert for California, ITSAK for Greece, and so on). Generic templates with a name swap won't cut it; each one needs to actually be useful for that specific place. - A "listen on your commute" version of the weekly deep-dive using voice cloning. Evaluating VoxCPM2 vs Inworld TTS-1.5 vs ElevenLabs right now — cost vs quality is the current blocker.
- Getting out of Google jail. Somehow.
## The link
If you want to poke around:
the-world-now.com
If you've been through the "crawled, currently not indexed" wall and something actually worked — drop it in the comments. I'll owe you
Top comments (0)