That’s just a list of what I expected the feel of site to be, the reddit-ish theme/Discourse had most of that built in
Topic List Previews was the very first implementation of this.
Which helps no-one, this post is about trying to see what I can achieve with some help from other members and hopefully it will help others if possible ![]()
I’ve tried to help but you’ve only pushed back.
Best of luck.
Sorry I am not pushing back, i’ve answered your questions, you sent me a link to Starzen which isn’t what i am trying to achieve? Then i answered that I have seen them posts that you linked and they are talking about building something, I am trying to build something. Sorry you feel i am pushing back but that is not the case. I am unsure where your trying to go with this tbh
I just thank the OP for their inspiration (who kindly shared to my ask about the used plugin in their navbar a few weeks ago).
My intention is not to replicate the social media interface but rather to offer something more comfortable for our users, and I’m working on it. I’ll gladly share findings, the final result, and the repo when the time comes ![]()
By the way, I’m sharing something that is always good to remember and that some users might forget when responding or interacting: Core Rules of Netiquette
Indeed, so I also fully support the OP and everyone’s new attempts!
I’ve been thinking on this and it’s a bit more nuanced than that. Yes, everything is focused around discussion but reading is a very important factor. We acknowledge that there is a huge audience of readers/consumers and I love the idea of making that experience frictionless. I’ve been a proponent of an easily personalisable feed for a long time.
Initial design is complete for the “build your feed”
Next is to insert new tables into the DB, something like
| Field | Purpose |
|---|---|
user_id |
The member |
category_id |
Category being measured |
impressions |
Meaningful appearances |
opens |
Topics opened |
likes |
Topics liked |
replies |
Replies made |
dwell_seconds |
Accumulated reading time |
affinity_score |
Calculated preference |
updated_at |
Last recalculated |
For the first version, only the interests table is required. The behaviour table will be added later once i figure out which route to take.
Today I see something related in the Nodeloc forum: NodeLoc
I am not familiar with this approach, but I look forward to seeing where it is going!
Thats truly impressive, i thought about the /r route a lot but decided it against it due to the category limitations. Wonder how thats been implemented
The initial feed selection is added and working, no styling done yet as above until final phase.
The selection pops up on a users first visit to feed and cannot be closed until user has selected 3 categories of interest, a select all is also added.
An edit interests tab is also added
The initial personalisation feed is done and working, no cpu spikes yet, feels fast and works as intended.
It now:
- Scores topics using 55% interests, 25% freshness, 10% popularity and 10% randomness.
- Prefers a discovery topic every sixth position when available.
- Avoids three consecutive topics from one category when alternatives exist.
- Keeps pagination independent of deleted, consumed items.
- Reloads and reorders the feed after interests change.
- Includes the working pop-up and Select all.
and then when you change your feed
I thought i’d finish off the styling before i carry on.
Next to do is
Optimise what we’ve built before adding behaviour tracking:
-
Limit cached feed sessions per user so repeated refreshes don’t accumulate six hours of cached lists.
-
Improve category mixing to reduce CPU work on large queues.
-
Measure feed loading time and cache usage.
After that comes behaviour tracking: recording genuine impressions, topic opens and reading time. Prefetching must not count as reading.
Initially we’d collect those signals without changing the order. Once tracking is reliable, we can gradually introduce 15% behaviour weighting as users see 30–50 posts.
Love the initiative!
You might even say that “reading is fundamental”, which was a foundational blog post when I started out as a community manager:
@Damian_Boon how would this system work if there aren’t any images attached to a topic?
The Demo uses AI generated header images, which I hope isn’t going to be the default? The occasional one is fine, but fake image after image becomes grating fairly quickly ![]()
There’s also a bit of a bug on Safari Desktop, where related topic links don’t open:
Exactly the same, its only the topics viewport it uses. So you would see the what you see now with just the image missing. I would highly advise against using a lot of the functions on a site that is not media heavy though.
This is a demo site where all the content is ai generated for this test case.
Thanks for that, I will look into that later as its using a cache from the homepage.
With what i have created so far, i need to test server load, I have an openrouter account and want to test 10 bots posting at the same time. What is the best route to go with testing say
bots:
-
username: wtf_gaming
category: Gaming
personality: gaming-news
posts_per_hour: 30
replies_per_hour: 15 -
username: wtf_tech
category: Tech
personality: tech-news
posts_per_hour: 30
replies_per_hour: 15
then have 10 logged in bots refreshing the /feed page every 30 seconds for instance.
Or make a small standalone Python service that talks to Discourse + OpenRouter, rather than putting AI requests directly inside the Discourse Rails process.
What would be the best way to test
It looks great! Will it ultimately be released as a new theme?
A Theme Component with the category selector feed should be great!


