Using Discourse to Build a Blog, Reddit, X or Facebook-Style Scrolling Platform

I’m starting this topic to document my journey as I try to turn Discourse into a more visual, continuously scrolling platform—something closer to the browsing experience offered by Reddit, X and Facebook.

I’ll use this topic to share what I try, what works, what doesn’t, the components I’m using and any problems I encounter. Hopefully, it will also help anyone else interested in using Discourse for something beyond a traditional forum layout.

The starting point for this project was the 90–9–1 rule.

It suggests that on most social media, blogs etc:

  • 90% of users mainly browse and consume content.

  • 9% occasionally react, like, share or comment.

  • 1% actively create most of the content.

Obviously the exact percentages will vary between communities, but the principle remains relevant: most visitors are readers, not contributors.

Discourse is excellent at serving the 9% and the 1%. It is built around discussions, replies and active participation. However, I want to make it equally attractive to the much larger group who simply want to open the site and browse interesting fresh content.

What I’m Trying to Build

I want to use Discourse to create a more visual, continuous feed similar to Reddit, X or Facebook.

The experience would ideally look something like this:

  • Open the homepage and immediately see a feed of relevant topics.

  • Scroll continuously from one topic to the next.

  • Preview the topic’s content without opening a separate page.

  • See images, videos and excerpts directly in the feed.

  • Like, bookmark or reply when something catches your attention.

  • Automatically move previously scrolled content out of the way.

  • Return later and see fresh or unseen topics rather than the same homepage every time.

  • Gradually personalise the feed using categories, tags and topics the user interacts with.

Some people might call this “doom scrolling”, but it is also simply how a huge number of people now consume online content. They may read dozens of posts without ever commenting, yet they are still genuine users generating views, sharing links and potentially returning every day.

Why Build It With Discourse?

Discourse already provides most of the difficult parts:

  • User accounts and profiles

  • Categories and tags

  • Likes, bookmarks and notifications

  • Trust levels and moderation

  • Topic creation and replies

  • Read and unread tracking

  • Suggested and related topics

  • A mature plugin and theme-component system

What appears to be missing is a feed designed primarily around discovery and passive consumption. (obviously Discourse wasn’t designed to be this way)

Where I Am So Far

  1. I started with the awesome Redditish theme by @awesomerobot which i had to fork so i could edit various aspects such as removing the custom sidebar. I also highly edited the CSS to design it how we wanted it.
  2. Enabling Nested Views was a must as this covers the style needed for this kind of site.
  3. I made and added a Youtube style scrollable menu that shows all the categories and custom links. I used Custom Top Navigation Links to customise and add links.
  4. A topic preview modal was a must and i started to design this but the legend @Don built a better version which can be found here
  5. A static cached right sidebar everywhere was a must so i started with right sidebar blocks then made a theme component to show it on topics etc.
  6. Using custom header links (icons) i added a “Create a Post” in the header to make the container cleaner.
  7. Images on posts set central with a blurred background to make it look neater (similar to reddit)
  8. Setting topic excerpts to 150 characters and showing inbetween title and image on topic cards was a must (similar to Facebook and X)

The next steps would be a dedicated feed that could:

  1. Start with recent content from a defined period, such as the previous 14 days.

  2. Prioritise topics from categories and tags the user follows.

  3. Mix in popular or trending topics for discovery.

  4. Record when a topic has genuinely been viewed or scrolled past.

  5. Reduce the priority of viewed topics without permanently hiding them.

  6. Allow direct reactions and replies from the feed.

This wouldn’t replace traditional topic lists or discussions. It would be an additional way of discovering and consuming the same Discourse content.

Follow the Journey

I’ll continue updating this topic as the project develops, including the components I test, the changes I make and the obstacles I run into.

I’d also be interested to hear from anyone who has attempted something similar, particularly regarding:

  • Whether existing read-tracking data could support this.

  • How a feed could work for anonymous and newly registered users.

  • How much personalisation could be achieved without introducing a complex recommendation algorithm.

  • Whether continuous topic previews would create significant performance problems.

The goal is to recognise that the silent 90% are an important part of a community and give them an experience designed around how they actually use the internet.

The test site i will be using for this project is

https://www.m8wtf.com/

11 Likes

I really like this—I’m following along. I took a very quick look at your demo and it’s great! I’ll check back when I have space.

4 Likes

We tried using Discourse’s Unified New page as the homepage because it appeared to offer exactly the feed we wanted. With a plugin that removes posts from /new when the user scrolls past the viewport. ( @Don got this working)

The confusion came from the fact that I’ve always tested Discourse using an established, logged-in account, so my Unified New page was always full of posts. I hadn’t fully understood how it worked for brand-new users.

After creating a new test account, we discovered that Unified New was completely empty because older topics weren’t considered “new” for that user. That means it can’t currently provide the populated homepage feed we had planned.

Wow, thanks so much for the comment and for some positive feedback, I know this isn’t your cup of tea and goes against what Discourse was intended for.

@don is working on a new plugin that introduces a new /feed style system and homepage . This shows users actual new posts, then removes them if a user scrolls past (using the viewport) . If all posts have been seen it redirects to /latest. This is work in progress.

1 Like

Massive thanks to @don and his new unreleased plugin the feed is now working so users always see fresh content, he kept the replies to act the same though, they don’t disappear on viewport. (this encourages users to open and reply hopefully)

New users now when they signup see all posts from the last 14 days but this can be adjusted in Top page default timeframe.

2 Likes

Next on the agenda is making a component/plugin to personalise the feed, something like

Feed score =

40% interests
25% freshness
15% previous behaviour
10% site popularity
10% randomness/discovery

so a feed would look like

WARDOGS Early Access launches Thursday
New PS5 update causes weird controller bug
Someone builds a 70mph eScooter
Netflix confirms new Inbetweeners
Glasgow WTF story
Random popular Food & Drink story

For a new user something like

25% Gaming
15% TV & Film
15% WTF News
15% Tech
10% Food & Drink
10% Sports
10% Wheels & Thrills

Then after they’ve scrolled through 30–50 posts, their feed starts adapting.

or i have thought about making a component that on signup they choose their interests e.g categories

What are you into?

:check_box_with_check: Gaming
:check_box_with_check: WTF News
:check_box_with_check: Tech
☐ Politics
:check_box_with_check: TV & Film
☐ Sports
:check_box_with_check: Wheels & Thrills
☐ Food & Drink

This is going to take time and testing

1 Like

I like that on mobile clicking a topic gives you a preview of the topic in a sheet, and you can choose to go further, or close it and continue in your feed. Nice work!

1 Like

Thats down to @don theme component :wink: Topic Preview Modal

2 Likes

What is the goal of this journey ? A theme, component or something unified ? A theme bundled with components and so on ?

Its something like this I have been waiting for for years. The UX of Discourse has everytime stopped me from using it. It is … really not … as awesome as Discourse is in itself.

I wish you luck on your journey.

Your demo is looking great on mobile.

1 Like

There will be a guide :slight_smile: I will upload all the components i’ve made to github along with links to components others have already made/making. It would feel wrong for me to bundle it up as others have largely contributed.

Exactly this, the backbones is awesome, hence the reason for using Discourse to see if i can achieve something decent that’s not the usual Discourse.

1 Like

There some themes that bundle components. Maybe consider that. And universally perhaps use lucide icons ?

1 Like

Looks really good. There is a theme-creator to decorate the Op in posts after the Op post.

Ok looking at another topic with replies. I see you maybe already using Don’s TC Author badge

Very nice work.

2 Likes

No thats some custom CSS i used before i installed

1 Like

Like Topic List Previews (TLP)?

Good example here: https://www.starzen.space/

Not really, more backend stuff rather than visuals

1 Like

Oh ok, I was sent down a path by this statement and if I were to score TLP on your other requirements:

  • Open the homepage and immediately see a feed of relevant topics.

    :white_check_mark:

  • Scroll continuously from one topic to the next.

    :white_check_mark:

  • Preview the topic’s content without opening a separate page.

    :white_check_mark: (although could be more sophisticated - I’ve worked on a Discourse fork with much more sophisticated version of this)

  • See images, videos and excerpts directly in the feed.

    2/3rds :slight_smile: (I’ve worked on a Discourse fork with much more sophisticated version of this that plays live video on the Topic List :+1:)

  • Like, bookmark or reply when something catches your attention.

    :white_check_mark:

  • Automatically move previously scrolled content out of the way.

    :white_check_mark:

  • Return later and see fresh or unseen topics rather than the same homepage every time.

    :white_check_mark:

  • Gradually personalise the feed using categories, tags and topics the user interacts with.

    :cross_mark: not yet, back-end sure. One of the reasons this doesn’t exist in core is that people are resistant to have the server track your behaviour.

So I’m somewhat perplexed by your response, most of your requirements are front-end engineering with some backend tweaks and TLP fulfils the bulk of these

btw, this has come up before, e.g.:

I know have read them all, no-one has actually done it

1 Like

I know of at least one, but it’s closed source.