Discourse Cakeday

AI-generated summary

The Discourse Cakeday plugin, now bundled with Discourse core, decorates user avatars with celebratory emojis on their forum joining anniversaries and optional birthdays. While default settings enable this feature, administrators can customize emojis and toggle functionality via the admin/plugins page. The plugin offers a browsable directory of events at /cakeday/anniversaries/today and /cakeday/birthdays/today, and provides JSON endpoints for external integration RGJ.

Community discussions have highlighted several technical nuances and bugs:

  • Data Migration: Users migrating from other platforms often require manual database updates to correct join dates, as the plugin relies on the created_at timestamp Firepup650.
  • Staged Users: A known issue exists where staged users display birthday badges but do not appear in the public birthday list Ivan_Rapekas.
  • Anniversary Logic: Clarification was provided that the “All” tab for anniversaries typically shows users celebrating their first anniversary (one year post-join), rather than all registrations JammyDodger.
  • Profile Persistence: A critical bug was identified where saving a birthday fails to persist if the hide_profile setting is enabled mentalstring. This issue is scheduled for resolution via a core PR zogstrip.
  • Feature Requests: Users have requested the ability to input birthdates during registration and to manually edit anniversary fields via CSV, though the former is not currently supported copymonopoly.
:discourse2: Summary Discourse Cakeday decorates user avatars with a celebratory emoji on the anniversary of their joining day, and (optionally) on their birthday too. :cake: :birthday:
:open_book: Install Guide This plugin is bundled with Discourse core. There is no need to install the plugin separately.

Enabling Cakeday

The Cakeday plugin is default enabled but can be disabled/enabled from its settings, accessed from your admin/plugins page:

Cakeday settings

Features

  • Emoji displayed on posts, usercards, and user pages for forum joining anniversary and/or birthday: (Emojis displayed can also be customized)

  • Browsable directory of anniversaries and birthdays at /cakeday/anniversaries/today

  • Automatically uses join date for anniversaries, and adds an optional Date of Birth field on each user’s Preferences->Profile page (limited to Month and Date)

Settings

  • See all relevant site settings by searching your admin settings for “cakeday”
Name Description
cakeday enabled Show cakeday emoji[s] beside the user’s name on the date they joined Discourse
cakeday emoji The emoji[s] that will be shown beside the user’s name on the date that they joined Discourse. Multiple emojis can be specified by: smile
cakeday birthday enabled Show birthday emoji[s] beside the user’s name on their birthday
cakeday birthday emoji The emoji[s] that will be shown beside the user’s name on their birthday. Multiple emojis can be specified by: smile

:discourse2: Hosted by us? This plugin is available on all of our hosting tiers Cakeday | Discourse - Civilized Discussion

Last edited by @mcwumbly 2025-10-04T21:15:57Z

Check documentPerform check on document:
58 Likes

4 posts were split to a new topic: Only show anniversaries and not birthdays?

A post was split to a new topic: How to automatically create a post in a category when there’s a birthday?

Hi, just for notice, staged user has a birthday badge, but it doesn’t appear in the list of birthdays (only regular users are shown) :slight_smile:

3 Likes

Is it possible to manually edit (or ideally upload a CSV file) the anniversary field?

Our main issue is that we migrated our community from a very old platform (enjin) to Discourse. We managed to scrape most of the data including our old join dates but obviously when we created the new Discourse users their “join dates” now no longer correspond with when they actually joined our community back on enjin.

If you have access to rails, this works (Though is completely manual):

UPDATE users SET created_at = '2023-05-03 13:56:41' WHERE username_lower = 'username';

Hi, in my “forum joining anniversary” list I don’t have anything in /cakeday/anniversaries/all?month=3, though most of members joined that month, any idea? Thanks.

1 Like

Hmm. :thinking: Possibly the month is for this year, and no one celebrated an anniversary yet?

2 Likes

Yes but this URL (/cakeday/anniversaries/all) should show all registrations anniversaries, not birthdays.
For birthdays, it’s this URL: /cakeday/birthdays/all

1 Like

I meant that it could populate on the month when their first anniversary is celebrated (that is, a year after people joined the forum). The first day you join isn’t technically an anniversary. So if ‘March’ in this case is ‘March 2024’ and that’s the year they all joined then no one would be celebrating an anniversary yet.

I haven’t looked at the code though, so this could be conjecture. :slight_smile:

1 Like

Ok I am probably misled by the “All” tab:

1 Like

Is there some API or way I can grab the birthdays and anniversaries for today?

1 Like

Yes,

https://meta.discourse.org/cakeday/birthdays/today.json

https://meta.discourse.org/cakeday/anniversaries/today.json

3 Likes

Thanks a lot for that!

2 Likes

Thanks to your help, Richard, I managed to make a component!

3 Likes

Looks like there will be a new docker_manager image for this plugin soon?

Hi, I installed this plugin long ago but today I cannot find any trace of it in my site… what gives ? :roll_eyes: Is that plugin now in the core ?

1 Like

this plugin is now bundled with discourse core :partying_face:

2 Likes

Is it possible to have the “Month and Date” Date of Birth preference appear on the registration form, instead of only in each user’s Preferences → Profile page?

1 Like

I don’t think it’s currently possible.

2 Likes