You are browsing as a guest. Sign up (or log in) to start making projects!

akcodex

@akcodex

Joined June 1st, 2026

  • 4Devlogs
  • 1Projects
  • 1Ships
  • 0Votes
Open comments for this post

48m logged

Spent tonight making the bot fun instead of only useful.

It does memes, trivia, a magic 8ball and roasts now. The bigger piece is XP:
you get points for finishing tasks, saving memories and building automations.
100 points is a level and every level has a title. You start as a Lurker. Stick
around long enough and you become a Certified Menace. There’s a leaderboard,
and you can shout someone out which hands them 25 XP.

Three things fought me.

The meme API defaults to r/dankmemes. This is going into a Slack full of
teenagers so that was never happening. Locked it to ProgrammerHumor,
wholesomememes and softwaregore, and I check the nsfw flag on every post too.

The trivia API rate limits to one request every 5 seconds and 429’d me in the
middle of testing my own feature. So I wrote 15 questions myself as a backup.
Trivia never just dies now.

Then the first meme it posted came through titled “partialContent”. Turns out
r/ProgrammerHumor writes every title in camelCase, so I had to split them back
into real words before posting.

Also caught myself farming XP by spamming /sos-done on the same task. It only
pays out now if the task wasn’t already finished.

If you want it shorter, this version keeps the two best details:

Made the bot fun tonight. Memes, trivia, roasts, and an XP system where you
level up for finishing tasks and building automations. You start as a Lurker
and work your way to Certified Menace.

Two things I didn’t expect. The meme API defaults to r/dankmemes, which is not
what you want in a Slack full of teenagers, so I locked it to a safe list and
check the nsfw flag. And the first meme posted with the title “partialContent”
because r/ProgrammerHumor writes everything in camelCase. Had to split the
titles back into words.

Also had to stop myself farming XP by spamming /sos-done on the same task.

0
0
15
Ship

SlackOS is a Slack bot that does what you say instead of what you click.

You type /ask remind Divine to finish the UI by Friday and it saves the task.
You type /ask what did we decide about the logo? and it answers from something
the team told it weeks ago. You say /ask when someone joins #design DM them the
handbook and it builds the rule, then runs it by itself when a real person joins.

That last part took me the longest. My member_joined_channel listener never
fired. No logs, no error, nothing. I checked my scopes about six times before I
worked out the bot could post into the channel without being in it, which is what
chat:write.public does, so it looked present when it wasn’t. Slack only sends you
join events for channels the bot has joined. Fixed it with one /invite.

The other headache was the AI never returning the same shape twice. Same
sentence, different JSON. Sometimes task1/deadline1, sometimes a tasks array.
One time I asked it to DM someone and it gave me send_direct_message while my
code was looking for “direct message” with a space, so a private handbook went
out to the whole channel. Everything gets flattened now before I match on it.

My network blocks Hugging Face, so no embeddings. Instead I hand the stored
memories to Groq and let it pick the relevant one. Good enough at this size.

What I’m proud of: it runs on my own Nest box under systemd with Postgres in
Docker, and the memory search answers questions I asked it weeks earlier.

To test it, the demo link is a simulation of the real bot, so you don’t need a
Slack account. Press the lightning button. It fires a fake channel join and the
bot DMs the new person the handbook on its own, without anyone typing a command.
The panel on the right is the bot’s state, and it changes while you type. Try
/tasks, then /done 10, then /ask what time is standup?

I used Claude Code for a good part of this, mostly debugging and cleanup.

A few notes on why it’s built this way:

The bug story is the strongest part. Reviewers see a lot of “I built a Slack bot.” Almost nobody explains that chat:write.public made their bot look present in a channel it had never joined. That detail proves you did the work.

The send_direct_message bug is worth keeping even though it’s unflattering. A private handbook going out publicly is a real, specific failure with a real fix. It reads as honest in a way that “I learned a lot about APIs” never does.

Try project → See source code →
Open comments for this post

8h 31m 41s logged

Changed the name to SlackOs(more sleek ig). Also designed the logo and finished it up. Time to deploy

0
0
3

Followers

Loading…