DEV Community

Cover image for TrendHub: I Was Tired of Checking Six Sites a Day, So I Built One Feed Instead
Kudzai Murimi
Kudzai Murimi Subscriber

Posted on Edited on

TrendHub: I Was Tired of Checking Six Sites a Day, So I Built One Feed Instead

Every morning looked the same for me. dev.to, then Hacker News, then Stack Overflow's hot questions, then Product Hunt, then Lobsters, then Mastodon if I had the energy left. Six tabs. Six different ranking systems. Six different "what's hot right now" signals. No way to tell if the same story was blowing up on more than one of them at once.

So I built TrendHub. It is a single unified feed that pulls what's trending across dev.to, Hacker News, Stack Overflow, Product Hunt, Lobsters, and Mastodon. It ranks everything on one comparable scale. I can read it like one site instead of six.

The problem was never that any one platform was bad. The problem is that trend checking had become a tax on my attention. This is my attempt to get that time back. And to make it something other developers could use too.

What TrendHub Actually Does

At its core, TrendHub is a fetch and rank pipeline. Background jobs pull the latest posts from each source on their own schedule. They normalize each post's engagement signal, reactions, points, votes, favourites, whatever that platform measures, onto a common 0 to 100 trending score. Then everything drops into one feed you can scan in a few minutes.

Features

Unified, ranked feed. Every post from every source lands in one timeline. Sorted by a trending score, not by which tab you happened to open first.

Per platform toggles. Don't care about Product Hunt today? Flip it off in the sidebar. Preferences save per user. Your feed stays exactly the way you like it.

Search, tags, and time range filters. Search matches both post titles and tags. You can restrict the feed to the last day, the last week, or all time.

Cross platform duplicate detection. Sometimes the same story trends on both Hacker News and Lobsters at once. It happens more than you'd think. TrendHub tags it "also trending on" instead of showing it to you twice.

Trending velocity, the rising fire icon. Posts don't just get a static score. They get a velocity indicator based on how their score moved since the last fetch. You can spot what's accelerating, not just what's already popular.

Bookmarks and hide or dismiss. Save something to read later. Hide a post you're not interested in. Hidden posts stay hidden until you choose to bring them back.

Daily digest email. Opt in and get a daily rollup of what's trending sent to your inbox. No login required to stay in the loop.

Personal RSS feed export. Every user gets their own token based RSS URL. Your filtered, ranked feed can slot into whatever feed reader you already use.

Keyboard shortcuts. j and k to navigate. o to open. b to bookmark. x to hide. Built for people who'd rather not touch the mouse.

Dark mode. Because it's a developer tool. Developer tools ship in dark mode.

Per post share menu. Share to X, Facebook, LinkedIn, Reddit, WhatsApp, email, or just copy the link. Straight from the feed.

Source health panel. A small sidebar panel shows the last fetch time and status per platform. You always know how fresh the data is. And if a source's API is having a bad day.

Under the Hood

TrendHub is built on Laravel 10, Inertia.js, Vue 3, and Tailwind CSS. Postgres runs in production. SQLite runs for local development. Each source has its own dedicated fetcher class. A scoring service normalizes engagement metrics across wildly different scales. A Hacker News point is not a Mastodon favourite. A grouping service handles the cross platform duplicate matching.

It's deployed on Render, running as a single web service with a managed Postgres database.

Try It

Live: trend-hub-204c.onrender.com

It runs on a free tier. If it's been quiet for a while, the first load might take 30 to 50 seconds to wake back up. That's not a bug. Just a cold start. Register an account. It's instant, no email verification loop. Toggle platforms on and off to make it yours.

What's the trend checking equivalent of "context switching fatigue" in your own workflow? Do you have a tool for it, or are you still juggling tabs like I was? I'd love to hear what I'm missing.

Top comments (4)

Collapse
 
amitfeldman profile image
Amit Feldman

"Checking six sites a day" is exactly the kind of itch that makes a good first product — aggregating into one feed is a real time save.

Ran a passive check of the site while reading (public response headers and homepage HTML only, nothing a first-time visitor's browser doesn't see):

  • All six baseline security headers are missing — Strict-Transport-Security, Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy. You're behind Cloudflare, so this is dashboard work, not a deploy: one Response Header Transform Rule covers the set, HSTS is a toggle under SSL/TLS, and CSP can ship report-only first so nothing breaks.
  • Discoverability layer is thin: no meta description, no canonical link, no Open Graph tags, and the served HTML has no H1 (the Inertia shell renders client-side). For a product whose whole value is "one place people check daily," search and social previews are the front door — worth an hour.
  • Minor: sitemap.xml returns 404. robots.txt is fine.
  • Note, not a bug: my very first request timed out entirely, then warm loads came back ~1.6s — that's the free-tier cold start on Render. A keep-alive ping or the paid tier kills it.

Happy to re-run the check free any time if you want a before/after.

Collapse
 
respect17 profile image
Kudzai Murimi

This is genuinely useful, thank you for taking the time to check.

The security headers are a fair miss. Since I'm on Cloudflare already, a Response Header Transform Rule is the right fix, not a deploy. I'll add HSTS, CSP (report-only first, like you said), X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy this week.

Good catch on discoverability too. No meta description, no canonical, no OG tags, and no H1 because the Inertia shell renders client-side. That last one's a real problem for a feed aggregator specifically, since search and social previews are basically the whole pitch. I'll add a static meta layer and probably server-render the initial H1 so it's in the raw HTML, not just after hydration.

sitemap.xml 404 is on me too, easy fix.

And yes, that cold start is exactly what it looks like. Free tier Render, first hit after idle can take 30 to 50 seconds. I'll either add a keep-alive ping or move to a paid instance once there's enough real traffic to justify it.

Appreciate the actual specifics here, way more useful than a generic "nice project" comment. I'll follow up in this thread once the headers and meta tags are live.

Collapse
 
amitfeldman profile image
Amit Feldman

That plan covers everything — report-only CSP first is the right sequence, and server-rendering the initial H1 fixes the raw-HTML problem without touching hydration.

Two small additions from watching this exact fix set before:

  • For the meta layer on Inertia: put the tags in the server-rendered root template, not the JS. Crawlers and social scrapers never run the hydration step, so anything client-side is invisible to them.
  • On the keep-alive: a ping every ~10 minutes keeps a free Render instance warm, but it burns your free monthly hours around the clock. Fine as a bridge — just don't mistake it for a fix if traffic stays light.

Happy to re-run the same passive check once the headers and meta layer ship — before/after, same six headers plus meta/canonical/OG and sitemap. Drop a note here when it's live.

Collapse
 
respect17 profile image
Kudzai Murimi

Okay thanks, Boss!
Working on it!