Inspiration
Small nonprofits don't lose funding because their programs fail; they lose it because critical reporting requirements or follow-up tasks mentioned in a busy Slack thread get buried and forgotten. We realized that nonprofits don't need another noisy chatbot they have to actively talk to—they need a quiet, observant "chief of staff." We built Steward to ensure that nonprofits never miss a grant deadline or drop a verbal commitment, allowing them to stay compliant and fully funded without changing how they work.
What it does
Steward is an Agentic AI that sits quietly in the background of your workspace. As your team chats naturally in channels, Steward uses advanced Natural Language Processing to detect when someone makes a verbal commitment (e.g., "I'll send the site visit photos to the Ford Foundation by Friday").
When it detects a commitment, it sends a polite, private DM to the user asking if they want to track it. If confirmed, Steward opens an interactive Modal where the user can pick a reminder time. It then saves the commitment to a persistent database, logs it in the user's "App Home" notebook, updates a shared Slack Canvas for the whole team to see, and automatically schedules a Slack reminder so the deadline is never missed.
How we built it
We built Steward using Python and the Slack Bolt Framework, utilizing Socket Mode for secure, real-time event listening without needing exposed public webhooks.
For the "Agentic AI" brain, we integrated Google's Gemini 2.5 Flash model. Instead of relying on rigid keyword matching, Gemini reads the context of the conversation and outputs structured JSON data, categorizing messages and extracting due dates and funder names dynamically.
The backend is containerized using Docker, deployed as a Web Service on Render, and hooked up to a serverless PostgreSQL database hosted on Neon to ensure commitments are persistently tracked even if the server restarts.
Challenges we ran into
One of the biggest challenges was preventing the AI from being "spammy." We had to carefully engineer the system prompt and implement confidence thresholds so that the AI could distinguish between someone stating a calendar fact ("Ford Foundation meeting tomorrow") versus an actionable promise ("I will finish the Ford report tomorrow").
We also faced hurdles with Slack's Block Kit state management, specifically figuring out how to pass context seamlessly from a DM button click into a customizable dropdown Modal without losing the database IDs.
Accomplishments that we're proud of
We are incredibly proud of achieving a true "Agentic" workflow. Steward doesn't just answer questions; it observes, extracts structured data from unstructured human conversation, and proactively initiates workflows. We successfully built a tool that feels warm, helpful, and unobtrusive, perfectly matching the ethos of the nonprofit sector.
What we learned
We learned a massive amount about the Slack API ecosystem, specifically how to seamlessly weave together App Home tabs, Slack Canvases, Modals, and scheduled messages into one cohesive user experience. We also learned how to force Generative AI models to strictly adhere to JSON schemas for programmatic use, and how to deploy a full-stack Python Slack app to the cloud using Docker and Neon Postgres.
What's next for Steward
Our next step is to expand Steward's integration capabilities. We want to implement deeper Model Context Protocol (MCP) integrations so Steward can automatically cross-reference verbal commitments with tasks in Asana, Jira, or Salesforce. Eventually, we plan to convert Steward from an internal tool into an Org-Ready, publicly distributed Slack App so any nonprofit in the world can install it with one click!
Built With
- docker
- gemini
- google-cloud
- json
- neon
- postgresql
- python
- render
- slack-api
- slack-bolt
Log in or sign up for Devpost to join the conversation.