# Weekly or monthly "best new user" badge

**URL:** <https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065>\
**Category:** Feature\
**Tags:** feedback\
**Created:** [2017年三月28日 22:06 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065 "2017-03-28T22:06:05Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2017年三月28日 22:06 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/1 "2017-03-28T22:06:05Z")

</div>

We know that healthy communities are always growing, through an influx of new users. Without a steady stream of new users, a community can only hope for, at best, stagnation. Discourse can’t magically deliver new users to your site. However, it _should_ help you reward and appreciate the great new users that do arrive on your site!

For the 1.8 #releases we’re building in a way to automatically reward your best new users.

 ![](https://global.discourse-cdn.com/meta/original/3X/d/d/dd07b3370c4c3b1214d4068e932de9d6d5147aa6.jpg)

Sort of a “rookie of the month” kind of badge that says …

- hey thanks for showing up!
- we really appreciate what you’re contributing
- in fact, you’re one of the **best new users this month** and you get a special badge and letter to permanently commemerate

I think this badge has to be based on _posting_, because as much as I believe [reading is fundamental](https://blog.codinghorror.com/because-reading-is-fundamental-2/), new arrivals who spend a lot of time reading aren’t moving the needle in quite the same way that new arrivals who post do.

My initial brainstorming leads me to this criteria for the badge:

- of the user accounts created in the last (x) weeks …
- take the top (y) users by post likes
- consider _ratio_ of total new user posts in the interval to likes, so we aren’t necessarily rewarding one post with 50+ likes
- for the interval, award two users the badge and send out a congratulatory email (we provide the default copy)
- we _might_ want to ignore other new user votes to favor only votes by established users?

Note that the badge must be marked with the interval, so we know when it was awarded; it’s more meaningful that way:

> Rookie of the month, November 1962

---

<div class="post-metadata">

**Author:** ![cpradio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cpradio/32/4970_2.png) [@cpradio](https://meta.discourse.org/u/cpradio)\
**Post date:** [2017年三月28日 22:25 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/7 "2017-03-28T22:25:13Z")

</div>

I personally do not have a problem with it. Plus it would make it extremely hard for new users to earn said badge if existing contributing users are thrown in the mix. As they are likely a big source of the contributions to the site and therefore there would be several new members who would likely not get awarded for a long time and thus have zero motivation to stay.

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2017年三月28日 22:26 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/8 "2017-03-28T22:26:45Z")

</div>

> [@cpradio](#):
>
> Plus it would make it extremely hard for new users to earn said badge if existing contributing users are thrown in the mix

How so? did you read this closely?

> [@codinghorror](#):
>
> - of the user accounts created in the last (x) weeks …
> - take the top (y) users by post likes

---

<div class="post-metadata">

**Author:** ![cpradio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cpradio/32/4970_2.png) [@cpradio](https://meta.discourse.org/u/cpradio)\
**Post date:** [2017年三月28日 22:29 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/9 "2017-03-28T22:29:37Z")

</div>

Sorry, let me rephrase. I meant, I’m okay with current members not being able to earn said badge, because, if they could, they would be competing against the new users. The existing users are likely already contributing a lot to the site, which would make it harder for new users to stand out (potentially?).

I just imagine those who have been contributing for a while, would likely be posting better content than most new users.

I personally like it targetting new users only (that is all I was really trying to accomplish with that prior post). It offers a quick motivation to new users who “jump in with both feet”

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2017年三月28日 22:33 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/10 "2017-03-28T22:33:23Z")

</div>

Well yes, there are tons of badges for existing users. The whole point is to focus on the pool of new users and see who’s doing well and really congratulate them in a special, unique way. You know “welcome to the neighborhood” and so on.

It’s not inconceivable that you could do something similar for _all_ users…

 ![](https://global.discourse-cdn.com/meta/original/3X/f/a/faa31f1a789774c42f3ccaedd43f30eb7cd61c8b.jpg)

… but I honestly feel that kind of effort is best spent rewarding your _new_ users because they are so absolutely critical to the long term survival of a community.

---

<div class="post-metadata">

**Author:** ![cpradio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cpradio/32/4970_2.png) [@cpradio](https://meta.discourse.org/u/cpradio)\
**Post date:** [2017年三月28日 22:35 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/11 "2017-03-28T22:35:29Z")

</div>

> [@codinghorror](#):
>
> Well yes, there are tons of badges for existing users. The whole point is to focus on the pool of new users and see who’s doing well and really congratulate them in a special, unique way. You know “welcome to the neighborhood” and so on.

Yeah, I’m with that 100%. As a crazy idea and maybe to help @jomaxro side of things. The initial badge could be bronze for new users, silver for users that have been around for a year, and gold for 2+ years? (and maybe take into account other metrics too, not just likes, maybe number of replies)

---

<div class="post-metadata">

**Author:** ![SidV](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sidv/32/119460_2.png) [@SidV](https://meta.discourse.org/u/SidV)\
**Post date:** [2017年三月28日 22:41 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/12 "2017-03-28T22:41:26Z")

</div>

> [@codinghorror](#):
>
> we might want to ignore other new user votes to favor only votes by established users

I like that… maybe not any “established user”, maybe some groups, such “_[bug reporter](https://meta.discourse.org/t/what-is-this-bug-reporter-badge/17987)_” that’s needs a vote for discourse member group?

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2017年三月28日 22:43 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/13 "2017-03-28T22:43:40Z")

</div>

I was thinking more in terms of fraud and bad actors. But established user likes are more significant, so removing new user likes also helps there.

---

<div class="post-metadata">

**Author:** ![barryvan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/barryvan/32/82635_2.png) [@barryvan](https://meta.discourse.org/u/barryvan)\
**Post date:** [2017年三月29日 06:50 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/14 "2017-03-29T06:50:25Z")

</div>

It’d be good to take other measures – from the official plugins – into consideration, too. For example, a new user whose suggestions get a lot of votes (from established users?) or who has been answering questions (and had those answers accepted).

I do also like @cpradio’s idea of having this apply to established users as well by segmenting it into various groups; perhaps something along these lines:

- Most valuable new member (bronze): account created within the past three months. Awarded monthly.
- Most valuable established member (silver): account created between three and 12 months ago. Perhaps awarded quarterly?
- Most valuable veteran (gold): account created greater than 12 months ago. Perhaps awarded quarterly?

There is, I think, value in having these sort of recurring, aspirational but _limited_ badges. Discourse has some great recurrent badges already (like “Nice share”, “Nice reply”, “Nice topic”, and so on), but adding a little bit of competition into the mix could really help drive people to engage positively with the community.

---

<div class="post-metadata">

**Author:** ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)\
**Post date:** [2017年三月31日 19:14 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/15 "2017-03-31T19:14:01Z")

</div>

Okay, I’ve just committed what I think is a good first stab at this:

- The job runs once a month

- It finds any users created in that period, and comes up with a score based on how many likes they’ve received out of how many times they’ve posted.

- Likes from older accounts are weighed more than likes from new accounts, to prevent abuse via creating new accounts to get the badge.

- A like from an account \< 1 week old = 0.1

- A like from an account \< 1 month old = 0.5

- A like from an account \> 1 month = 1.0

- Two users are selected, and they receive a PM from the system congratulating them on the badge.

The sticky bit is this:

> [@codinghorror](#):
>
> the badge must be marked with the interval

This could be really complicated. We’re either talking about creating a new badge every month (which is much more complicated for system badges, not to mention clutters up the database), or perhaps just changing the display of the text.

For now, the PM the user receives says

> Congratulations, you’ve been awarded the **Rookie of the Month award for %{month\_year}**.

So it’s quite clear to the user who received it what month they received it for. Other users can also figure it out pretty easily from the badges page:

 ![](https://global.discourse-cdn.com/meta/original/3X/6/4/64732fcbd70cd11a1bdf92b59de0a639caa938f1.png)

Now, I _could_ add a flag to the badge type that would make it show the month/year the badge was awarded on that page. Instead of 22h it could say “Granted Mar, 2017” if the flag is set. Would that work?

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2017年三月31日 19:41 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/16 "2017-03-31T19:41:19Z")

</div>

This is probably ok. We need some copy changes including the badge title though. I don’t think “rookie” is going to be easy to translate and I didn’t mean it literally as the title of the badge.

---

<div class="post-metadata">

**Author:** ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)\
**Post date:** [2017年三月31日 19:43 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/17 "2017-03-31T19:43:18Z")

</div>

Ah oops. Let me know what you want it to be – I’ll be changing a bunch of places in Ruby code too to reflect it.

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2017年三月31日 19:48 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/18 "2017-03-31T19:48:47Z")

</div>

I suggest “New User of the Month” as that is simple to translate.

---

<div class="post-metadata">

**Author:** ![jomaxro](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jomaxro/32/126216_2.png) [@jomaxro](https://meta.discourse.org/u/jomaxro)\
**Post date:** [2017年三月31日 20:48 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/19 "2017-03-31T20:48:28Z")

</div>

> [@eviltrout](#):
>
> A like from an account \< 1 week old = 0.1  
> A like from an account \< 1 month old = 0.5  
> A like from an account \> 1 month = 1.0

I like where this is going, but I question if time is the best measurement here. If the only goal is to prevent abuse, then time is great. If the goal is to give long-time users more influence, could further multipliers be added for high TL and/or staff? A user’s vote would be worth the highest possible modifier - so a 1-day old staff account would be worth 2.0 points (not 2.1 or 0.1).

- Perhaps:
- A like from a TL3 account = 1.25
- A like from a TL4 account = 1.5
- A like from a staff account = 2.0

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2017年三月31日 20:51 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/20 "2017-03-31T20:51:51Z")

</div>

One new requirement we are adding based on our initial testing:

- New user must have at least 2 posts
- New user must have posted in at least 2 topics

If no users meet this criteria, then no badge will be awarded for the monthly period.

I also agree with @jomaxro it is better to tie the multipliers to trust level than age of account @eviltrout.

---

<div class="post-metadata">

**Author:** ![jomaxro](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jomaxro/32/126216_2.png) [@jomaxro](https://meta.discourse.org/u/jomaxro)\
**Post date:** [2017年三月31日 20:54 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/21 "2017-03-31T20:54:12Z")

</div>

> [@codinghorror](#):
>
> I also agree with @jomaxro it is better to tie the multipliers to trust level than age of account @eviltrout.

To be clear I was suggesting both…but my idea could be expanded to solely use Trust Levels.

---

<div class="post-metadata">

**Author:** ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)\
**Post date:** [2017年三月31日 20:58 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/22 "2017-03-31T20:58:53Z")

</div>

Okay great feedback guys. I’ve pushed a few updates:

- It’s now called “New User of the Month”
- It requires 2 posts in 2 different topics
- The score is calculated based on the trust level of the person who liked it, not their account age. You can [see the table I came up with here](https://github.com/discourse/discourse/blob/master/app/jobs/scheduled/grant_new_user_of_the_month_badges.rb#L36-L40).

---

<div class="post-metadata">

**Author:** ![jomaxro](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jomaxro/32/126216_2.png) [@jomaxro](https://meta.discourse.org/u/jomaxro)\
**Post date:** [2017年三月31日 21:08 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/23 "2017-03-31T21:08:28Z")

</div>

Just to check that I’m reading that correctly - that doesn’t account for staff, right? So if a user is staff but never bothered to change their trust level they’re vote will not account for being staff?

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2017年三月31日 21:14 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/24 "2017-03-31T21:14:28Z")

</div>

Probably a good idea to consider staff explicitly there @eviltrout, as staff likes are definitely important.

---

<div class="post-metadata">

**Author:** ![ChrisBeach](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/chrisbeach/32/214628_2.png) [@ChrisBeach](https://meta.discourse.org/u/ChrisBeach)\
**Post date:** [2017年四月1日 05:36 UTC](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065/25 "2017-04-01T05:36:18Z")

</div>

Our first two “Users of the Month” got automatically awarded today. Brilliant feature, and nicely implemented.

One very minor point. There’s a copy issue: misspelt “permamently” in the email that goes out. The issue is in:

```
system_messages.new_user_of_the_month.text_body_template

```

No big deal and was easily fixed on our instance.

Thanks for implementing another really neat feature of Discourse 👍

[下一頁](https://meta.discourse.org/t/weekly-or-monthly-best-new-user-badge/60065.md?page=2)
