Open comments for this post
Devlog 3
Built an OAuth server using Express so users can install the bot into their own Slack workspaces via an “Add to Slack” button.
Got a shallow knowledge on how OAuth works and learnt how to build a express server to catch the code and proceed with OAuth
Deployed it as a second systemd daemon on Hack Club’s server. Now both the bot and the OAuth server run 24/7 without my laptop being on.
Open comments for this post
Devlog 2
Turns out one AI provider isn’t enough — so I added OpenAI support to the /summarize command via the -model flag.
The interesting part wasn’t the API call itself. It was realising that Gemini and OpenAI have completely different request formats — different URLs, different auth methods, different JSON body structures. So I had to refactor the whole AI section: pulled the Gemini logic into its own askGemini() function, then built an askOpenAI() twin next to it. Also learned the hard way that OpenAI’s free tier doesn’t exist for developers. Got a clean 429 back .
Finally SSHed into Hack Club’s server, set the bot up as a systemd service, and now it just… runs. 24/7.
Open comments for this post
Dev Log 1
Joined Stardance at the start of June — now it’s about to end. Spent a month learning a language that took its developer 10 days to prototype!
Finally shipped my first JS project: a Slack bot.
Still a bash loyalist at heart, so I built a CLI parser (a minimal implementation) that lets users interact with the bot like a command-line tool.
I’ve added a /summarize command to help me triage unread messages across Slack. It fetches the last n hours of messages (-time flag) from a target channel (selectable via -channel flag), pipes them to the Gemini API, and lets users fine-tune the AI’s output with a custom -prompt flag.
The dopamine hit of shipping this without blindly dumping AI-generated code was unmatched — the kind of serotonin you only get from debugging your own stack traces at 1 AM. And somewhere along the way, I learned to collaborate with the weirdo.