Skip to main content
Back to Canvas
BlogFebruary 3, 2026next.jsrssmindmapreactbestblogs

Added a Trending News feed to the mindmap (and why it’s not “AI” yet)

How I added a daily tech news digest to the mindmap — RSS from BestBlogs, topic buckets, a language toggle, and a list page for full browsing.

I’ve had this dumb interactive mindmap on the homepage for a while (React Flow, nodes for projects / blogs / about). Wanted to bolt on something useful: a trending news feed so I can skim tech/product/engineering stuff without leaving the site.

So I did.

What it is

  • On the mindmap: A “Trending” category node. Click it → you get buckets (Programming, AI, Product, Business tech, Featured). Click a bucket → up to 4 article cards + a “More…” that sends you to the list page.
  • One language switch on the Trending node (EN / ZH). No per-card toggles—pick once, everything under it follows.
  • Bucket list page (/news): Filter by bucket and/or language. Cards show title + summary (3-line clamp), and a full-height strip on the right with just a top-right arrow that opens the original article. No “Original” label—icon only.
  • Data: RSS from BestBlogs (curated tech/product/engineering). We fetch, parse, dedupe by URL, merge en/zh for the same article, and cache (in-memory + Upstash Redis when configured). No AI summarization yet—descriptions are whatever’s in the feed.

Why it’s not “AI” (yet)

The original idea was “AI news aggregation” and “AI summarized” links. For the first version I skipped that: BestBlogs already gives decent titles and snippets, and I didn’t want to burn tokens on every item or run a separate summarization pipeline. So right now it’s “RSS + mindmap + one global language + a readable list page.” If I add real summaries later, they’ll plug into the same buckets and links.

Nuts and bolts

  • Stack: Next.js App Router, server-side digest build, fast-xml-parser for RSS/Atom. SSRF guard: we only hit allowlisted BestBlogs hosts over HTTPS. Refresh is token-gated and rate-limited.
  • Mindmap: Buckets and items are filtered by the selected language. We only show buckets/subcategories with count > 0 so you don’t get empty rows.
  • List page: Uses the same lang query param the mindmap “View list” link sends, so the bucket page matches the language you picked on the node.

If you’re on the site, hit the Trending node and poke around. If something’s broken or you’d actually use AI summaries, I’m curious what would make it worth adding.