A few months ago I got tired of my static Slack avatar staring back at everyone. Same face, every day, every context. Monday energy, Friday energy, doesn't matter, one photo. I decided to fix that with a small Raycast extension and a folder full of selfies.
The result is a Slack profile picture that quietly rotates throughout the week, picks up on what I'm doing, and never demands more than a launcher keystroke from me. It's silly. It also turned out to be one of my favorite quality-of-life automations.
What it does
Two triggers cause my Slack profile photo to change:
1. Setting a status. Any time I mark myself as AFK, going to lunch, out sick, or on PTO, the photo updates to match the context. Lunch status gets a lunch photo. Sick status gets a sick photo. The mood is set without me thinking about it.
2. Midnight rollover. A scheduled job fires every night at 12:00 AM and swaps in a fresh photo for the new day, so my avatar is always contextually current even if I haven't touched a status.
Here's the routing logic in full:
assets/lunch/ (9)assets/pto/ (4)assets/sick/ (4)assets/afk/The weekday pools are where the personality lives:
Friday has the most photos. This was not an accident.
The tech stack
It's a Raycast extension, invoked from the launcher like any other command. No background daemon, no menu bar app, no extra process to babysit. Raycast is already my daily driver for launching apps and running quick actions, so it was the natural home for this.
The extension talks to the Slack API using a personal user token. Two API calls do everything:
users.profile.set sets the status emoji, status text, and an auto-clear timestamp so the status quietly vanishes when my lunch (or PTO) is over. users.setPhoto uploads the chosen image as multipart form data and Slack handles the rest.
The midnight automation uses Raycast's built-in scheduled commands feature. You point it at any extension command and give it a cron-style schedule. No crontab editing, no launchd plist wrangling, no extra tooling. Raycast wakes the command up at the right time and goes back to sleep.
The whole automation budget is one Raycast extension, one scheduled job, and however many selfies you're willing to take.
The photo resolution logic
Photos live in organized asset folders and follow a dead-simple naming convention. The day name (or status name), a dash, and an index. That's it.
assets/ ├── days/ │ ├── Monday-0.png │ ├── Monday-1.png │ ├── … 17 more … │ ├── Friday-0.png → Friday-20.png │ └── … ├── lunch/ │ └── lunch-0.png → lunch-8.png ├── pto/ │ └── pto-0.png → pto-3.png └── sick/ └── sick-0.png → sick-3.png
When the extension needs a photo, it asks a tiny question: which folder, which prefix? Then it scans that folder, filters by the prefix, and picks one entry uniformly at random. For the weekday pool the prefix is whatever today is. For statuses, it's lunch or pto or sick.
Adding a new photo to any pool is just dropping a file in with the next number in the name. Zero config edits, zero code changes, zero deploy step. The folder is the config.
The status photos
The fun thing about routing photos to statuses is that the photos themselves can be a bit. Lunch is a noodle slurp. Sick is a "leave me alone" face. PTO is sunglasses and an excuse not to type a real status message.
You need a Slack user token (the kind that starts with xoxp-) with users.profile:write and users:write scopes. Bot tokens won't work, because the bot doesn't own your photo. The whole setup takes about ten minutes from "create a Slack app" to "first selfie uploaded."
Is it worth it?
Objectively, no. Practically, it's one of my favorite quality-of-life automations. My teammates occasionally notice the photo changed. I get to curate a little photo library for each day of the week. Friday is well-represented.
The whole thing is maybe two hundred lines of code, a Raycast scheduled job, and however many selfies you're willing to take. The barrier to entry is low. The return on vibes is high. And every time someone messages me right after midnight on a Sunday and sees a fresh Monday face, I'm a little delighted, even if they aren't.
Software doesn't have to be useful to be worth building. Sometimes the right project is the one that makes you smile every time you go to lunch. Thanks for reading ✦
Comments