Discourse Daily Challenges

:information_source: Summary Run time-limited daily check-in challenges with leaderboards, automated posts, and badge awards.
:hammer_and_wrench: Repository Link GitHub - R23DPrinting/discourse-daily-challenge · GitHub
:open_book: Install Guide How to install plugins in Discourse

The Story

I run a health and wellness community that recently made the move from Discord to Discourse. On Discord, I had built a custom bot to run monthly fitness challenges — members would post their daily workouts, the bot tracked check-ins, posted weekly leaderboards, and announced winners at the end of each month. It was one of our most popular features.

After the move to Discourse, members started asking for the challenges back. I looked for an existing plugin and came up empty. So I built one.

What started as a quick solution turned into a full-featured challenge system that honestly works better than the original Discord bot. Since it might be useful to other communities, I’m sharing it here.

Features

  • Hashtag or photo check-ins — members check in by posting the challenge hashtag (e.g. #AprilFitness) or uploading an image to the challenge topic. Both trigger a valid check-in.
  • One check-in per day — enforced at the application and database level. Each user’s daily window is based on their profile timezone.
  • Per-challenge timezone — set the challenge timezone independently from your server timezone so no member gets cut off at midnight UTC.
  • Real-time admin dashboard — shows all active challenges simultaneously with participant count, average check-ins, streak tracking, completion percentage, and a ranked leaderboard.
  • Multiple simultaneous challenges — run several challenges at once, each with its own topic, hashtag, schedule, and badge.
  • Archived challenges — completed challenges preserved in a collapsible archive showing final stats, winners, and completion rates.
  • Automated weekly leaderboard posts — posted to the challenge topic on a configurable day and hour in the challenge’s own timezone.
  • Final results post — automatically posted the day after the challenge ends, listing everyone who met the check-in goal.
  • Custom badge awards — automatically creates a Discourse badge for each challenge and awards it to eligible participants when the challenge ends.
  • Admin check-in management — add or remove check-ins for any user directly from the admin panel.
  • Manual leaderboard trigger — post the leaderboard at any time from the challenge detail page.
  • Inclusive end date — if you set the end date to March 31, check-ins on March 31 count.

Configuration

Creating a Challenge

Go to Admin → Plugins → Daily Challenge → Challenges → New Challenge

Enter a Topic ID to link the challenge to an existing topic. The plugin will display the topic title as confirmation. Fill in the hashtag trigger, start and end dates, and the number of check-ins needed to complete the challenge.

Set the Challenge timezone to your community’s primary timezone to ensure date boundaries are evaluated correctly for your members.

If you want automated weekly leaderboard posts, enable the toggle and set the day and hour. If you want a completion badge, enable the toggle and enter a badge name (e.g. “April Fitness Champion”).

Click Save challenge — if badge awarding is enabled, the badge is created automatically.

Running a Challenge

Once created, the challenge is immediately active. Members post in the linked topic with the hashtag or an image to check in. The admin dashboard (Admin → Plugins → Daily Challenge → Dashboard) shows real-time stats for all active challenges.

Tips

  • Ask members to set their timezone in Profile → Preferences → Interface → Timezone for accurate daily check-in windows.
  • Use the Post Leaderboard Now button on the challenge detail page to trigger a leaderboard post at any time.
  • Use the Check-ins section on the challenge detail page to manually add or remove check-ins for any user.

Settings

Name Description
daily_challenge_enabled Master on/off switch for the plugin
Topic ID The topic where participants post check-ins
Hashtag trigger The hashtag to watch for, without the #
Start date First day check-ins are accepted
End date Last day check-ins are accepted (inclusive)
Check-ins needed Number of check-ins required to complete the challenge and qualify for the badge
Description Optional internal note about the challenge (not shown to participants)
Challenge timezone Timezone used for date boundaries and weekly post schedule
Enable weekly leaderboard post Toggle automated weekly posts on/off
Post day of week Day the weekly post is published
Post hour (0-23) Hour the weekly post is published in the challenge timezone
Award completion badge Toggle automatic badge creation and awarding
Badge name Name of the badge created for this challenge

What’s Next

Planning for v2:

  • DM confirmation after each check-in with current stats
  • Daily reminder DMs for participants who haven’t checked in yet
  • @mention commands for checking personal stats

Support & Feature Requests

If you run into any issues or have ideas for new features, please open an issue on GitHub or reply to this topic.

4 Likes