# Discourse Yearly Review

**URL:** https://meta.discourse.org/t/discourse-yearly-review/105713
**Category:** Plugin
**Tags:** official, yearly-review
**Created:** [January 4, 2019, 9:23pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713 "2019-01-04T21:23:16Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [January 4, 2019, 9:23pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/1 "2019-01-04T21:23:16Z")

</div>

| | | |
| --- | --- | --- |
| :discourse2: | **Summary** | **Discourse Yearly Review** creates a topic on January 1st that summarizes the previous year’s forum activity. (See our examples here on Meta - #year-in-review) |
| 🛠 | **Repository Link** | [https://github.com/discourse/discourse-yearly-review](https://github.com/discourse/discourse-yearly-review) |
| 📖 | **Install Guide** | [How to install plugins in Discourse](https://meta.discourse.org/t/install-plugins-in-discourse/19157) |

> [@](#):
>
> :discourse2: As this is an #official plugin maintained by the Discourse team, #Support, #Contribute > Bug, #Contribute > UX, and #Contribute > Feature requests can be made in the respective categories here on Meta, and tagged with the appropriate plugin tag. Click on a link below to get one started. 👍
> 
> [❓&nbsp; **Support**](https://meta.discourse.org/new-topic?category_id=6&body=%3E%20Before%20asking,%20did%20you%20search%20first%3F%20Press%20%F0%9F%94%8D%20at%20the%20upper%20right%20to%20search.&tags=yearly-review "Ask for support on configuring and using Discourse Yearly Review") [🐛&nbsp; **Bug**](https://meta.discourse.org/new-topic?category_id=1&tags=yearly-review "A bug report means something is broken, preventing normal/typical use of the plugin") [👀&nbsp; **UX**](https://meta.discourse.org/new-topic?category_id=9&tags=yearly-review "Discussion about the user interface of Discourse Yearly Review, and how features are presented (including language and UI elements)") [💡&nbsp; **Feature**](https://meta.discourse.org/new-topic?category_id=2&tags=yearly-review "Discussion about how existing Discourse Yearly Review features can be improved or enhanced, and how proposed new features could work")

### Initial Setup

Head to your `/admin/plugins` page to click the discourse-yearly-review ⚙ Settings button:

![Yearly Review settings](https://global.discourse-cdn.com/meta/original/4X/8/7/2/87278d485ae9a39937a8f059c9251ae07e2af908.png)

1. Enter categories to pull data from into the `yearly review categories` setting. If left blank, it will default to the top 5 public categories.

2. Using the `yearly review publish category` setting, choose a destination category for the review to be posted.

3. Then, enable the plugin using the `yearly review enabled` setting.

### Features

As you can see at [2022: The Year in Review](https://meta.discourse.org/t/2022-the-year-in-review/250353), data is displayed in two sections - users and topics.

The users section includes:

- Most Time Reading
- Most Topics Created
- Most Replies Created
- Most Replied to
- Most Likes Given
- Most Likes Received
- Most Visits
- Users who have been granted a featured badge (the badge is set by the `yearly review featured badge` Site Setting

The topics section includes:

- Most Read
- Most Liked
- Most Replied to
- Most Popular
- Most Bookmarked

### Generating the Yearly Review

The plugin sets thresholds for deciding which topics to display. There need to be a minimum of 10 likes or replies, 5 bookmarks, a score of 10, or one hour’s read time before a topic will be displayed. The topic is published automatically through a background job. The job checks that the plugin is enabled and that it is within the first 31 days of the first month of the year. It then checks to see if a topic with the title `yearly_review.topic_title` has already been published by the system user. If all checks pass, the topic is published to the category set in the `yearly review publish category` setting. If this is not configured, the topic will be published to the Uncategorized category.

### Extra Options

#### Yearly review categories

Categories used in this section are those set in the `yearly review categories` Site Setting. If this setting is not configured, the 5 best public categories from the forum will be chosen. “Best” is determined by the category `topics_year` count.

Sub-categories of any categories specified in the `yearly review categories` Site Setting will _not_ be included in the yearly review report. If you want sub-categories to be included in the yearly review report, you will need to explicitly specify them in the `yearly review categories` Site Setting.

#### Yearly review exclude staff

The plugin has a `yearly review exclude staff` setting. It is enabled by default so that staff members are excluded from the users section and topics created by staff are excluded from the topics section.

#### Yearly review featured badge

A featured badge can be set via the `yearly review featured badge` setting. A maximum of 15 badge users are displayed. If more than 15 users have been granted this badge, a link to the badge’s page is displayed. If the `yearly review featured badge` is not configured, this section will not be displayed.

### Running the Yearly Review manually

If you don’t want to wait for the background job, you can publish the topic from the rails console with:

```plaintext
Jobs::YearlyReview.new.execute(force: true)

```

If you want to generate a report for a specific year just add `review_year: 'year'`, e.g.:

```plaintext
Jobs::YearlyReview.new.execute(force: true, review_year: '2021')

```

> :discourse2: Hosted by us? If you would like to run the Yearly Review manually you can contact us at [team@discourse.org](mailto:team@discourse.org) and we’ll be happy to arrange that for you.

### Settings

| Name | Description |
| --- | --- |
| yearly review enabled | Enable the yearly review. |
| yearly review categories | Public categories to pull topics from. The top 5 categories from this group will be selected. If left blank will default to the top 5 public categories. |
| yearly review exclude staff | Exclude Staff from user stats. |
| yearly review include user stats | Add user-identifying stats to the first post of the review topic. |
| yearly review include private categories | Include user activity from private or read-restricted categories in the review. |
| yearly review publish category | The category the review will be published in. |
| yearly review featured badge | Enter the full badge name. Can be left blank. |

> :discourse2: Hosted by us? This plugin is available on all of our hosting tiers [Yearly Review | Discourse - Civilized Discussion](https://www.discourse.org/plugins/yearly-review.html)

* * *

### Known Issues

- The data is displayed in HTML tables. Tables are wrapped in `div` tags that have `data-review-topic-users="true'` and `data-review-featured-topics="true"` attributes. This allows the tables to be styled when they are displayed on Discourse. The styles are not copied when emails for the topics are created. Emails sent out for the topic don’t look great.

- The first post in the generated topic is ≈ 40,000 characters due to using HTML. As a result, it cannot be edited unless you first increase the body character limit above this (see [Body is limited to 32000 characters; you entered 43659](https://meta.discourse.org/t/body-is-limited-to-32000-characters-you-entered-43659/157301))

- emojis in titles are not rendered in the featured topic links

> Last edited by @nathank 2025-01-06T21:23:15Z
> 
> > **Check document**
> >
> > Perform check on document:

---

<div class="post-metadata">

### Author: ![Samantha\_O](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/samantha_o/32/251273_2.png) [@Samantha\_O](https://meta.discourse.org/u/Samantha_O)
#### Post date: [December 15, 2023, 8:46pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/141 "2023-12-15T20:46:02Z")

</div>

A few nice enhancements that could be made to this plugin, I hope I’m sharing this in the right place? Let me know if not.

- Ability to exclude staff from user list, but still include the topics that they create
- Ability to exclude TL4 from user list (and like above, still include the topics they create)
- Ability to create multiple review posts so that we could have one for TL4 (we use this for employees) & staff members, and then have a community member only post

---

<div class="post-metadata">

### Author: ![Ayelen\_Rives](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ayelen_rives/32/226978_2.png) [@Ayelen\_Rives](https://meta.discourse.org/u/Ayelen_Rives)
#### Post date: [December 19, 2023, 1:34pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/142 "2023-12-19T13:34:10Z")

</div>

Hi!  
I installed the plugin this year, but even though it’s enabled, I don’t know when the review is posted, or if I should do anything else to publish it.

Can anyone let me know?  
Thanks a lot!!

---

<div class="post-metadata">

### Author: ![Aaron\_Walsh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaron_walsh/32/312661_2.png) [@Aaron\_Walsh](https://meta.discourse.org/u/Aaron_Walsh)
#### Post date: [December 19, 2023, 2:23pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/143 "2023-12-19T14:23:56Z")

</div>

Greetings @Ayelen_Rives,

Upon inspecting the administrative console, you will be presented with the following visual aid:

 ![Screenshot_20231219_141840_Chrome](https://global.discourse-cdn.com/meta/original/4X/3/4/9/349bc58d32638b77d144ea120d3d5e262a406043.jpeg)

Further scrutiny within the plugin titled ‘plugin:discourse-yearly-review’ reveals yet another illustrative example:

 ![Screenshot_20231219_141923_Chrome](https://global.discourse-cdn.com/meta/original/4X/e/b/0/eb00147ae91ba565c03a2d258ea50ec6d053164c.jpeg)

It is imperative that while configuring the settings, you designate the annual review’s publishing category either to the staff or another restricted category. This ensures a preliminary review before permitting broader visibility.

 ![Screenshot_20231219_142044_Chrome](https://global.discourse-cdn.com/meta/original/4X/0/b/5/0b584a8c66cc1c41dd510d5f7d82a3c69dd3ba14.jpeg)

---

<div class="post-metadata">

### Author: ![Ayelen\_Rives](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ayelen_rives/32/226978_2.png) [@Ayelen\_Rives](https://meta.discourse.org/u/Ayelen_Rives)
#### Post date: [December 19, 2023, 3:51pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/144 "2023-12-19T15:51:51Z")

</div>

Thank you so much, Aaron!

Unexpectedly, I don’t see those messages in the administrative console, neither on the settings:

 ![image](https://global.discourse-cdn.com/meta/original/4X/9/4/f/94f782d94c002b61e947277d27b78c3b6b18c565.png)

The publish category is Staff, so I’ll found out on January 1st if it is created.

Thanks again and happy holidays!

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [January 1, 2024, 10:12am UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/145 "2024-01-01T10:12:19Z")

</div>

Happy new year! 🥳

The plugin did not run here in two forums. And now shows the message for Jan 1st 2025. Strange.

I ran it manually in the rails console in one forum and it came back in English, not German, the language of the forum.

Something is/was wrong here.

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [January 1, 2024, 10:18am UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/146 "2024-01-01T10:18:07Z")

</div>

It’s not arrived here on meta yet either. I followed the advice and set it to publish to `#staff` first, which I think is the only difference to last year?

I was hoping it would magically turn up with a little patience, but I may be being optimistic.

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [January 1, 2024, 10:26am UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/147 "2024-01-01T10:26:13Z")

</div>

I did not change anything in the config, not even the forum to first check it as a staff member and then move it,

In my second forum there is still nothing. And it is 11:24am here.

It looks like something is broken.

Is there a need for a language flag when manually running it? I do not want to translate everything in the second forum, too. 😉

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [January 1, 2024, 10:44am UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/148 "2024-01-01T10:44:47Z")

</div>

I’d be tempted to leave it a bit longer to see if there’s a delay in the background job, but I’m also not sure why manually triggering it would give a different result to having the background job run on its own?

We may need someone more knowledgeable to chip in.

---

<div class="post-metadata">

### Author: ![packman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/packman/32/289322_2.png) [@packman](https://meta.discourse.org/u/packman)
#### Post date: [January 1, 2024, 11:18am UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/149 "2024-01-01T11:18:42Z")

</div>

Mine didn’t run automatically but I just ran it manually and it seems to have worked OK, although I wasn’t wanting it in a different language.

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [January 1, 2024, 12:47pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/150 "2024-01-01T12:47:01Z")

</div>

Today morning’ish sidekiq was telling to me yearly review will be scheduled in 50 mins time and at the moment that would be around 11 am local time. I didn’ wait, though, but did it manually. No issues and the language was right too.

After that I was forced downgrade my miderators and do sidekiq again because they were really upset — I was excluded staff… I couldn allow staff because then I as an really active admin would dominate lists totally, so I took fastest route.

Well, that is different story, but could we have a bit more free hands include or exclude groups?

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [January 1, 2024, 1:39pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/151 "2024-01-01T13:39:29Z")

</div>

Holy sh… On the other forum the 2023 thread is there… 2:31pm local time. And in German. So, still mysterious…

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [January 1, 2024, 2:24pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/152 "2024-01-01T14:24:39Z")

</div>

I triggered ours from Sidekiq in the end. 🚀

> [@2023: The Year in Review](https://meta.discourse.org/t/2023-the-year-in-review/290184):
>
> 2023's Top Users Most Time Reading User Hours Read [avatar] @Canapin294 [avatar] @Don233 [avatar] @Moin186 [avatar] @merefield158 [avatar] @pfaffman139 [avatar] @simon127 [avatar] @Arkshine118 [avatar] @Jagster117 [avatar] @ClawdiaWolf82 [avatar] @Heliosurge69 Most Topics User Topics [avatar] @twofoursixeight84 [avatar] @jordan-violet69 [avatar] @Don67 [avatar] @danielabc65 [avatar] @Jagster62 [avatar] @jidanni62 [avatar] @Cana…

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [January 3, 2024, 2:42am UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/153 "2024-01-03T02:42:46Z")

</div>

On my sites the topic was generated without me having to run it manually in sidekiq.

> [@Samantha\_O](#):
>
> - Ability to exclude staff from user list, but still include the topics that they create
> - Ability to exclude TL4 from user list (and like above, still include the topics they create)
> - Ability to create multiple review posts so that we could have one for TL4 (we use this for employees) & staff members, and then have a community member only post

These are great suggestions. Thank you! It’s interesting to hear about more use cases for this plugin. We will be looking at this more closely soon based on this year’s eperience, to see what we might be able to do to improve it before next year!

In the meantime, for this go round you can edit the post once it’s posted as you see fit.

One interesting behavior I noticed is that if you delete the generated topic it will create a new one the next day, as long as the plugin is enabled. So you could play around with the settings and generate multiple versions of the annual review topic, copy the text out of them, and then publish new topics yourself as you see fit. If you have access to `/sidekiq` you can find the job there and run it immediately.

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [January 3, 2024, 8:36am UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/154 "2024-01-03T08:36:35Z")

</div>

> [@tobiaseigen](#):
>
> if you delete the generated topic

And that’s why a tip to publish the review first at more private category, i.e. Staff, and then move to public, is actually not-so-good advice 😉 Unless an admin wants to keep two versions.

Not a biggie, though.

---

<div class="post-metadata">

### Author: ![Ayelen\_Rives](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ayelen_rives/32/226978_2.png) [@Ayelen\_Rives](https://meta.discourse.org/u/Ayelen_Rives)
#### Post date: [January 3, 2024, 4:07pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/155 "2024-01-03T16:07:58Z")

</div>

> [@Ayelen\_Rives](#):
>
> I’ll found out on January 1st if it is created.

Hi! Fortunately the plugin triggered itself on January 1st without any issue! 🙌

I come now with some questions about how it works because some reports (like Most Topics & Most likes given) show different results than the Users page for the same period.

For instance, for **Most topics** the Users page shows first the user “S”:

 ![image](https://global.discourse-cdn.com/meta/original/4X/2/d/c/2dca781a34fc557e39f94475ef67a153237c0e3e.png)

And the Yearly review shows first the user “C” and never shows user “S” in the table:

 ![image](https://global.discourse-cdn.com/meta/original/4X/7/2/0/7200cebd1345805542ab63aceef48bb2c3987c7f.png)

_(Sorry, I have to blur the images for company confidenciality, but I think it’s clearer if I add them. Also, the table is broken, you can ignore it 🙃)_

Does anyone know why this could be happening? Other reports show exactly the same information, but Most topics and Most likes given shows different users.

Thank you so much for your help! 💯

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [January 3, 2024, 4:56pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/156 "2024-01-03T16:56:53Z")

</div>

> [@Jagster](#):
>
> And that’s why a tip to publish the review first at more private category, i.e. Staff, and then move to public, is actually not-so-good advice 😉 Unless an admin wants to keep two versions.

Whoa, I was not aware that this is what happens. I just tested it and you are right! This is a bug. It should not create a second yearly review topic if one exists already.

Replication steps:

1. once yearly review topic is created, move it to a different category
2. trigger creation of yearly review topic via `/sidekiq`
3. second yearly review topic is created.

If you run afoul of this issue I’d suggest disabling the plugin. We are going to be looking at this plugin soon to fix bugs and improve it before next year.

---

<div class="post-metadata">

### Author: ![ganncamp](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ganncamp/32/106199_2.png) [@ganncamp](https://meta.discourse.org/u/ganncamp)
#### Post date: [January 3, 2024, 6:01pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/158 "2024-01-03T18:01:20Z")

</div>

> [@tobiaseigen](#):
>
> One interesting behavior I noticed is that if you delete the generated topic it will create a new one the next day, as long as the plugin is enabled.

🤔 how persistent is it? If I keep deleting it, will we still be doing the dance in June? 😂

And does this mean I don’t need to reach out to support to retroactively generate the post for my site? It’ll just appear some time tomorrow?

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [January 3, 2024, 6:11pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/159 "2024-01-03T18:11:21Z")

</div>

> [@ganncamp](#):
>
> how persistent is it?

Really. It works via sidekiq every day.

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [January 3, 2024, 6:27pm UTC](https://meta.discourse.org/t/discourse-yearly-review/105713/160 "2024-01-03T18:27:10Z")

</div>

> [@ganncamp](#):
>
> If I keep deleting it, will we still be doing the dance in June?

I would hope it will stop at the end of january.

> [@The Yearly Review plugin keeps creating new topics](https://meta.discourse.org/t/the-yearly-review-plugin-keeps-creating-new-topics/250716/14):
>
> Thanks for following up on this. Relying on the topic’s title to prevent creating multiple review topics is a really flaky approach (that’s my fault.) Once January ends, the issue won’t come up again until next year. @JammyDodger, maybe you could pass a note to the Discourse team to look into coming up with a better way of preventing multiple topics from being created. That should get done before January 2024. Time sure flies slight_smile

[Next page](https://meta.discourse.org/t/discourse-yearly-review/105713.md?page=2)
