-
-
The agent welcoming and guiding upon first time opening a DM with it
-
The agent proactively monitors for image uploads in a channel and sends ephermal message to the user to not clutter the channel.
-
The agent making sure that the user understands how to interact with it after the user talks to it in a DM.
-
The policy of organization pinned in #accessbility-standards public channel which the Alt-Text Assistant will pick up before recommendation
-
The AI Agent thinking as soon as the image is dropped in its DM
-
The Agent in few secs responding with the Alt-Text (considering policy in #accessbility-standards fetching via Slack's new Real Time Search)
-
If the alt text is added to the image as per policy defined in #accessbility-standards then AI agent confirming that alt text is accurate.
-
Alt-Text Assistant works retrospectively, providing alt text recommendations for images uploaded to a channel before the agent was installed
-
Alt-Text Assistant works retrospectively, providing alt text recommendations for images uploaded to a channel before the agent was installed
-
AI Agent follows policy in #accessbility-standards by not suggesting alt-text for images posted in configured channel (#random in this case)
Inspiration
Digital accessibility is a fundamental human right, but in fast-paced corporate communication, it is often treated as an afterthought. While Slack provides a native setting to remind or force users to add alt-text to their image uploads, it suffers from a massive compliance gap: it cannot evaluate the quality of the text.
Users frequently bypass the platform's warning by typing lazy placeholders like "a graph", "image", or "test". While this technically fulfills the platform's requirement, it fails the core mission of inclusion, leaving blind and low-vision colleagues who rely on screen readers completely in the dark. I am inspired to build Alt-Text Assistant to bridge this exact platform gap.
What it does
Alt-Text Assistant is an agent that audits image uploads inside Slack against an organization's specific accessibility policies.
- Proactive Monitoring: When a user drops an image into a public channel without high-quality alt-text, the agent instantly analyzes it. Instead of a generic warning, it sends a helpful nudge containing a fully drafted, context-rich alternative text description that the user can copy-paste to edit their post.
- Interactive Workspace Drafting: Users can direct message (DM) the assistant. This allows teams to safely draft and optimize complex image descriptions in a private sandbox before sharing them publicly.
How I built it
The project is built on Node.js using the Slack Bolt for JavaScript framework. The core architecture relies entirely on the latest generation of Slack capabilities and advanced AI reasoning:
- Slack AI Capabilities & Real-Time Search (RTS) API: When an image is uploaded in DM, the agent dynamically triggers the RTS API to query the workspace for pinned company accessibility documents (such as policies pinned in an
#accessibility-standardschannel). - Vision LLM Processing: The live policy snippet and the raw image payload are securely fed into OpenAI's GPT-4o Vision engine. The model evaluates whether the existing text is compliant, and if not, generates a highly precise description according to the guidelines.
- Stateless Resiliency: By fetching rules via the RTS API on demand, the agent remains completely stateless. Workspace admins can change the pinned policy document, and the bot instantly obeys the new rules on the very next upload—requiring no external database.
Challenges I ran into
- Slack API Ephemeral Limitations: I discovered that Slack's
chat.postEphemeralAPI behaves unpredictably and often fails silently when attempting to send ephemeral messages inside existing threaded conversations. To guarantee delivery and ensure a smooth user experience, I engineered a bifurcated routing system: the agent sends private ephemeral nudges for top-level channel messages, but seamlessly pivots to standard, anchored public replies when operating inside a thread. - Complex State Handling in Vision Prompts: Evaluating image metadata using an LLM required highly precise decision logic. I had to engineer a strict set of prompt constraints to ensure the Vision model could reliably handle three distinct scenarios: when alt-text was entirely empty, when it was present but inaccurate or lazy (e.g.,
"test"or"image"), and when it was already highly accurate. Balancing this logic so the model wouldn't hallucinate or unnecessarily rewrite perfectly good text took extensive iteration. - Designing a Proactive Onboarding Flow: I wanted the bot to actively educate users without being spammy. Designing this required hooking into Slack's
app_home_openedevent and dynamically evaluating the user's direct message history. I implemented logic that checks if it is the user's first time interacting with the agent; if their message history is empty, it triggers a comprehensive, one-time welcome guide explaining our accessibility standards and how to use the private DM sandbox.
Accomplishments that we're proud of
- A Legitimate Product Fix: I didn't just build a fun bot; we successfully identified and fixed an active enterprise gap in Slack's native compliance infrastructure.
- Zero-Clutter UX: The agent works beautifully through inline context nudges and assistant panes, keeping main channels completely clear of bot noise.
- Enterprise-Ready Statelessness: I built a highly dynamic compliance tool without needing to manage, host, or pay for a dedicated database, relying purely on Slack's native context layers.
What we learned
I learned a massive amount about working with Slack's modern Agentic framework and the realities of designing for accessibility. We discovered that building great software for assistive technologies requires shifting from a "checkbox mindset" to evaluating semantic quality. I also gained deep experience in prompt structuring for LLMs to guarantee outputs suitable for production code.
What's next for Alt-Text Assistant
- Dashboard: Giving workspace admins a weekly analytics view of channel accessibility scores and compliance rates.
- Multi-Language Support: Auto-detecting the primary language of a channel to draft alternative text localized to global teams.
- Deep Native Integration: If Slack releases an API that lets agents to modify the alt-text for an image then our agent will use it to automatically write the approved alt-text into the image object programmatically, removing the copy-paste step entirely.
Built With
- ai
- node.js
- platform-as-a-service
- rts
- slack
- websockets
Log in or sign up for Devpost to join the conversation.