I’m looking at using the new Unified New view as the main feed/homepage on my Discourse site, but I’d like it to behave a bit more like X/Twitter or Facebook.
What I’m trying to achieve is:
-
A topic appears in the Unified New feed.
-
The user scrolls down and the topic has been visible in their viewport.
-
Once they’ve scrolled past it, Discourse considers that topic “seen” or dismissed for that user.
-
If they refresh or come back to
/newlater, that topic no longer appears.
Ideally I wouldn’t want the row to disappear immediately while scrolling, as that could cause the page to jump. I’d just want it marked as seen/dismissed in the background so it’s gone on the next load.
I’m also using Don’s Topic Preview Modal, which already prefetches topics around the viewport. Because of that, I’d want to distinguish between a topic simply being prefetched and the user actually seeing it.
For example, something along the lines of:
Topic is at least 50% visible for 200–400ms → mark as seen → user scrolls past it → dismiss it from Unified New.
Has anyone implemented something similar?
Is there an existing Discourse API or frontend method for dismissing an individual topic from Unified New for the current user, or would this require a plugin/theme component?
I’m basically trying to turn Unified New into more of a personalised “things you haven’t seen yet” scrolling feed rather than requiring the user to actually open every topic.

