DEV Community

AI Predictions Dev
AI Predictions Dev

Posted on

I built a product-rankings site that writes itself on a local LLM — the stack

Most "best X tools" sites are a content treadmill: someone has to keep researching, writing and refreshing dozens of roundups. I wanted to see how much of that could run itself, on hardware I already own, with zero cloud-AI cost. The result is live at topratingshub.com — independent, data-driven rankings of software, apps, AI tools, devices and finance products. Here's the architecture and the lessons.

The stack

  • Astro (SSG) — every page is static HTML, 0 KB of JS shipped. Fast, cheap to host, great Core Web Vitals.
  • A local LLM as the writer, served with vLLM on an ARM64 box. The pipeline is ground → extract facts → write → quality-gate → revise. The quality gate is another local model call that scores the draft; anything under threshold gets one revision pass or is dropped.
  • Real grounding: before writing, it fetches and extracts current pricing/specs from primary sources and feeds the top sources (big context budget) to the writer, so the output has actual numbers instead of vibes.
  • systemd timers, not a babysitter: one nightly content run, a monthly topic-discovery job, health checks every 15 minutes, daily backups, a weekly digest.
  • IndexNow + JSON-LD (Article, ItemList, Breadcrumb, FAQ) so search engines pick up changes fast.

Topic discovery for free

Instead of guessing what to write, a monthly job pulls Google Autocomplete suggestions for seed terms per category. Those are real, popularity-ordered queries ("best crm for small business", "notion vs airtable"), so the content targets things people actually search — no paid keyword tool required.

The lesson that mattered most: never let a transient outage mutate durable state

The shared LLM crashed under load a few times. The first version of the nightly job kept running anyway and marked ~200 topics as permanently error (they hit the retry cap while the model was down). A transient infra blip had quietly burned real work.

The fix was two lines of principle:

  1. Gate on the dependency. The nightly job now checks the model's health first; if it's down, it skips the whole run and burns nothing.
  2. Self-heal + alert. A watcher restarts the model container after sustained downtime and pings me, instead of failing silently for days.
# nightly content job, simplified
if ! curl -sf http://localhost:8000/v1/models >/dev/null; then
  echo "writer down — skipping run, no topics burned"; exit 0
fi
run_batch && build && indexnow_ping
Enter fullscreen mode Exit fullscreen mode

If you're building anything autonomous: monitor your linchpin dependency, not just your own web endpoints, and make outages harmless rather than destructive.

Takeaways

  • You can run a genuinely useful, self-updating content site on local hardware for the cost of electricity + a domain.
  • Grounding + a quality gate is the difference between "AI slop" and something worth reading.
  • The hard part isn't generation — it's the operational safety net around it.

The live result is topratingshub.com. If you run a product in one of those categories and want a clearly-labeled placement, that's on the advertise page — the editorial ranking itself is never for sale, which is the whole point of it being trustworthy.

Happy to answer stack questions in the comments.

Top comments (0)