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

Echo

  • 3 Devlogs
  • 8 Total hours

A Slack AI assistant that remembers team's knowledge, summarizes conversations, answers questions, and helps developers search projects faster.

Ship #1

I built a Slack bot named "Echo" with Node.js and Slack Bolt API, it handles instant Q&A, web search with summaries, conversation summarization, project context retrieval, and documentation lookup.

The Challenges
e biggest challenge was contextual intelligence: teaching an AI to sift through messy channel histories and pinned messages to understand a project's current state without getting distracted by unrelated chatter. I’m particularly proud of the /echo-project command; it analyzes real-time team discussions to generate structured status reports, identifying active members, key decisions, and blockers automatically. It effectively turns a chaotic Slack thread into a professional project brief in seconds.

What I'm Proud Of
The speed. Getting answers in 2 seconds is no joke when you're juggling AI inference + web search + Slack's API. I'm also proud of the conversation summarization. it actually understands context, not just pulling random snippets.

How to Test It
Add Echo to your Slack workspace and try these commands: `/echo-ask "your question"`, `/echo-search "topic"`, `/echo-summary` (in a thread), `/echo-project` (in a channel), `/echo-docs "what you need"`. Start with simple queries, then get creative. DM me what breaks or what you wish it could do.

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

4h 58m 43s logged

I finished the last two most complex commands — /echo-summary and /echo-project and then finally deployed it on Nest with Hackclub

1. Finished the final commands

/echo-summary The command accepts today, yesterday, last N, and unread. I had to translate each of these into Unix timestamps for Slack’s conversations.history API

Filtering bot messages: The API returns bot messages too. Added .filter(m => !m.bot_id) to skip Echo’s own messages, otherwise Echo would summarize its own responses as if they were team decisions.

2. Deployed the project on Nest

Finally deployed it on Nest as this

  • Pushed all my project to Git (except my .env file)
  • Made a container in nest and got the key
  • Logged in my laptop using that key ssh [email protected]
  • Made a folder for Echo and downloaded all the neccessary dependencies
  • Clone the repo from my git and ran systemctl start echo.service and Echo became 24/7 online :)

I’ve also shared a tutorial video on youtube to help you understand any command and how to use Echo on slack
https://youtu.be/Wu7u665-Njo

0

Loading discussion…

0
8
Open comments for this post

2h 17m 1s logged

I gave some real commands and functions to Echo and connect it to the Hackclub workspace. By the end of the my work today , Echo had:

  • A working /echo-ask command — ask it anything, get an AI answer
  • A working /echo-help command — shows all commands
  • A working /echo-search command — live web search with cited sources
  • A working /echo-docs command — searches technical documentation
  • An onboarding event — sends a welcome message when added to any channel
  • A proper utils.js service for shared helpers

What I Did

1. Built the AI Brain services/ai.js

The first thing I needed was a way for Echo to actually think and give responses. I built a single getAIResponse() function that every command would call:

  • HackClub AI API as the backend, it let me use OpenAI and Google LLMs, and I could use it with my HackClub key
  • temperature: 0.7 I’ve used temperature attribute so make model more creative in responsing.
  • Default model gpt-4o-mini for speed and cost, but I made the model parameter swappable so different commands can use better models when needed.
  • Cool personality, I gave Echo an anime girl personality with soft expressions. This was intentional — bots that feel like characters are more fun to use and easier to remember

2. Built services/utils.js , Helpers module

Before building commands, I wrote the utilities they’d all share. I’ve used a cache logic so that commands like /echo-summary loop through 50-100 messages and need user names for each one. Without caching, that’s 100 API calls. With caching, it’s only as many unique users as exist.

3. Built command files

Then I built the files for each command in ordered manner in my project so that I can manage them easily. You can see the code of each file on my git repo

Problems I Hit and Fixed

Slack’s 3-second ack timeout: Slack requires every slash command to be acknowledged within 3 seconds or it shows a timeout error to the user. AI calls take 3-10 seconds. Solution: await ack() immediately at the top of every handler, then do the slow work after. This was the first bug I had to fix.

User IDs in messages: Slack stores messages with raw user IDs like <@U123ABC> instead of names. When I was building search, I realized the AI would receive these IDs and not know who said what. so I built resolveUserMentions() to replace them with real names before sending to the AI.


0

Loading discussion…

0
5
Open comments for this post

38m 31s logged

What I Built

Today I started Echo , an AI Slack bot that acts as a teammate inside your workspace. The idea hit me because our team was constantly switching tabs to look things up, ask questions, check what happened in a channel yesterday. I thought what if there was a bot that just lives in Slack and handles all of that?


What I Did

1. Created the Slack App

Went to api.slack.com/apps and created a new app from scratch.

  • Chose Socket Mode instead of HTTP webhooks, this means the bot connects outbound to Slack, so I don’t need to expose a server or set up ngrok during development. Way easier for local dev.
  • Added the required OAuth scopes: chat:write, commands, channels:history, users:read etc everything Echo would need to read messages and respond.
  • Grabbed the three tokens I’d need:
    • SLACK_BOT_TOKEN (xoxb-…)
    • SLACK_SIGNING_SECRET
    • SLACK_APP_TOKEN (xapp-… for Socket Mode)

2. Initialized the Node.js Project

I’ve used Node.js for my project

npm install @slack/bolt dotenv axios cheerio

Dependencies I’m working with:

  • @slack/bolt — Slack’s official framework for building bots. Handles all the event routing, slash commands, and ack() timing .
  • dotenv — keep tokens out of the code
  • axios — for hitting the HackClub AI API later
  • cheerio — for parsing web content (I’ve planned for search in some cmds)

Problem I Had:

Socket Mode confusion , at first I wasn’t sure whether to use Socket Mode or HTTP. Read through the Bolt docs and realized Socket Mode is the right call for development because I don’t need a public URL. HTTP is for production deployments.

0

Loading discussion…

0
14

Followers

Loading…