morgenruf.dev

Member Profile

A short profile each person keeps in Morgenruf: birthday, start date, role, location and what to ask them about.

Overview

Slack has no standard birthday field, start dates exist only on some Enterprise Grid plans, and custom profile fields differ from workspace to workspace. So Morgenruf keeps its own small profile for every member. It is part of the core rather than a module, so it is always there and cannot be switched off. Celebrations reads the dates from it.

The profile lives in its own table, separate from the member list that Morgenruf syncs from Slack, so the sync never overwrites what a person typed.

Fields

Field What it holds
Birthday Day and month only. The year is never stored, from any source. 29 February is accepted, and is celebrated on 28 February in other years.
Started on The full start date, year included, because work anniversaries count years. It can be up to a year in the future, so new hires can be entered before they start.
Role Free text, up to 80 characters. For example Backend engineer.
Location Free text, up to 80 characters. For example Berlin.
Ask me about Free text, up to 200 characters. For example Rust, bouldering, sourdough.
Don't celebrate me publicly A checkbox, off by default. Anyone with a date on file is celebrated unless they tick it. Ticking it keeps the dates and posts nothing.

Every field is optional. A birthday needs both the month and the day, or neither.

Edit Your Profile

There are three ways in. All of them open the same form and go through the same validation.

App Home

Open Morgenruf in Slack and go to the Home tab. The Your profile section has an Edit button that opens the form. Until you add anything, the section reads "Add your birthday and start date so the team can celebrate with you." Once filled in it looks like this:

Your profile                                        [ Edit ]
πŸ’Ό Backend engineer   πŸŽ‚ 14 March   πŸ—“οΈ Joined Mar 2023   πŸ“ Berlin
Ask me about: Rust, bouldering
slack app home

If an admin changed your profile last, the section says "Last changed by an admin. Edit it if anything is wrong." If you opted out, it says "You asked not to be celebrated publicly."

/morgenruf profile

Run it from any channel or DM to open the same form:

/morgenruf profile
slack

After you save in Slack, the form turns into a Saved summary of what is stored. The Home tab shows the change the next time you open it.

Dashboard: My profile

Every member can sign in to the dashboard, not only admins. My profile sits in the sidebar, above Sign out, and edits the same fields.

Clearing a date

You can remove your own dates at any time. In Slack, set the birthday month and day back to Not set, and tick Remove my start date (it appears once a start date is stored). In the dashboard, empty the fields and save.

ℹ️

The App Home is drawn by the standups module. In a workspace with standups switched off there is no Home tab, so use /morgenruf profile or the dashboard instead.

Admin Editing

A workspace admin can edit anyone's profile. On the Members page each person's card shows their profile and an Edit profile button, and the page shows how many people have dates on file. A profile an admin changed is marked as set by an admin, so the person can see it and correct it.

Editing other people's profiles and importing dates is for workspace admins only. Feature admins, including Celebrations admins, can edit only their own profile.

Importing Dates from a CSV

The quickest way to cover a whole company is an export from your HR tool. On the Members page, choose Import dates, then paste the CSV or choose a file.

email,birthday,start_date
priya@example.com,03-14,2023-03-01
tom@example.com,1990-07-04,2021-09-13
csv
  • Header row required. It names the columns. Names are matched in any order and any case, and extra columns are ignored, so an export can be pasted as it comes. You need email plus birthday, start_date or both.
  • birthday is MM-DD or a full YYYY-MM-DD date. The year of a full date is used only to check the day exists, then dropped. It is never stored.
  • start_date is YYYY-MM-DD.
  • Matched by email against the Slack directory, so people the bot has never messaged are matched too. If Slack cannot be reached, it falls back to the members Morgenruf already knows.
  • A blank cell means "leave this alone", never "clear it".
  • The same email twice in one file makes the second row invalid.
  • At most 5,000 rows and 1 MB per import. Split a larger file.

Preview before anything is written

The first step is always a preview. Nothing is saved until you have checked it and confirmed. Each row gets one of these outcomes:

Outcome Meaning
Will be savedThe row matches a member and changes their dates.
Already on fileThe profile already holds these dates.
Kept, set by the memberThe person entered their own profile, and overwrite is off.
No member with this emailNobody active in the workspace has that address.
InvalidThe row itself is wrong, for example a date that does not exist. The reason is shown.

Entries members made themselves

By default the import never touches a profile the person wrote themselves. The whole row is kept, including fields they left empty: filling those in would mark the profile as set by an admin, and the next import would then overwrite what they typed. To replace member entries anyway, tick Overwrite entries members made themselves before previewing.

Who Can See What

Who What they see
The member Their own profile, in the App Home, the form and My profile.
Workspace admins Every current member's profile, all fields, on the Members page. Hiding birthdays from the admins who imported them would protect nothing.
Celebrations admins The next 30 days of birthdays and anniversaries on the Celebrations page, and how many people are missing dates. Not the full profiles.
Everyone else No one else's profile in the dashboard. In Slack, only what a Celebrations post says: whose birthday or anniversary it is, and for an anniversary how many years.
MCP clients The get_member_profiles tool returns current members' profiles, with birthdays as MM-DD, to anyone holding an MCP API key for the workspace. See MCP.

Data Removal

  • When someone leaves. When Morgenruf sees a person has left (they are deactivated as a member, or the six-hourly Slack sync no longer finds them), their profile is marked. A nightly job deletes profiles marked more than 30 days ago.
  • When they come back. Reactivating someone within those 30 days clears the mark, so a Slack deactivate and reactivate loses nothing. An active person's profile is never deleted.
  • Uninstalling Morgenruf removes every profile along with the rest of the workspace's data.
  • At any time, anyone can clear their own dates, or tick Don't celebrate me publicly to keep them and post nothing.
  • No birth year is stored anywhere, including from a CSV import.