Inspiration
I spent a decade as a product manager, and in every review cycle I watched the same pattern. The people who quietly held teams together, who onboarded newcomers, unblocked everyone, and answered the same question for the tenth time, were the hardest to see when promotions were decided. The confident self-promoters advanced. The work that mattered most was often the work nobody could point to. When I read the research on non-promotable tasks, I realized this was not just unfair, it was measured, and it fell hardest on women. The evidence of that work already existed, sitting in Slack, unread and uncounted. Receipts is the tool I wish those colleagues had had: something that lets the work speak for itself, so the quietest people finally get seen.
What it does
Receipts is a consent-first Slack agent that reads a person's own conversations, with permission and only what they can already see, finds the helping work they did for others, and turns it into cited, review-ready evidence. It lets the work speak so the person does not have to boast. It has the following features:
- The Ledger. Finds helping acts across the user's channels (answering, unblocking, mentoring, onboarding, coordinating), classifies each, estimates effort, and names who was helped. Every item links to its source thread, so it is proof rather than a claim. The user curates a weekly digest to keep the record honest.
- Glue Wrapped. A shareable year-in-review card: people helped, hours, top categories, and the biggest save of the quarter, with the receipt attached. This is the answer to the self-promotion trap: neutral numbers do the advocating, so a modest person is seen without the backlash of self-praise.
- The Drowning Detector. Privately tracks the user's helping load. When it spikes, it offers to prepare a factual summary for their manager; the user previews it, picks the recipient, and sends. Nothing sends automatically.
- Review narrative. Drafts an "impact beyond my role" section for a review or promotion packet, built only from confirmed, cited items.
How we built it
I led with pain points I had felt firsthand across a decade as a product manager, the invisible work that never made it into a promo doc, then validated each one against published research (used Manus AI) before building anything. That evidence became the backbone of the case above and kept the product honest. The build itself is a Bolt app in Python, running on a Replit Reserved VM so it stays live around the clock. It uses Slack's AI and agent surface for the assistant experience and the slash command, Slack's Web API to read conversations in place, and Anthropic's Claude as the classification and generation engine. The pipeline is three steps: harvest the messages the user can see, classify each into a helping act with a category, beneficiary, effort estimate, confidence score, and a permalink, then render the results as a Canvas ledger, a Glue Wrapped card, and Block Kit digests. A seeded demo workspace with six personas lets anyone see the full experience in about thirty seconds with one command.
Challenges we ran into
The hardest part was trust, not code. An agent that reads your messages and quantifies your colleagues has to be provably safe, so I designed it to read only what the user can already see, store nothing outside Slack, cite every claim, and never send anything without explicit approval. Classification was the sticky technical problem: getting the model to find genuine helping acts without inflating them meant confidence thresholds and user curation rather than trusting raw output. Keeping a Socket Mode app always-on for the judging window also took a few rounds with the deployment configuration.
Accomplishments that we're proud of
I shipped a working, always-on Slack agent solo, from idea to deployed product, with live AI classification that turns real conversations into cited evidence. I am most proud that the hardest design choices went toward restraint: no manager dashboard, no surveillance, no auto-sending. The tool advocates for the user without ever exposing them. And the demo makes an abstract, measured injustice tangible in about thirty seconds.
What we learned
I learned how much of Slack's value is the conversational record itself, and that the interesting problem is not storing more data but rescuing the signal already there before retention deletes it. I learned that for a tool like this the trust model is the product, because every feature decision came back to whether the user stays in control. And building on the agent surface showed me how quickly a genuinely useful assistant comes together when the platform does the heavy lifting.
What's next for Receipts
I built the demo on-demand, which surfaces four honest limitations, each with a clear path forward. Receipts classifies only what Slack still holds at the moment it runs. Under a 90-day retention policy, helping work older than that is deleted before it is ever recorded. Next: scheduled background capture that snapshots evidence into the persistent Canvas ledger on a weekly cadence, ahead of the retention clock, so the record outlives the messages.
The proof behind each item is a permalink, which breaks once the source message is purged. Next: store a short quoted snippet at capture time alongside the link, so the evidence survives even when the original thread does not.
Shared artifacts name the colleagues who were helped, who never agreed to appear in someone's promotion case. Next: anonymize or aggregate beneficiaries in anything shared outside the user's private ledger.
Receipts sees only Slack, and effort figures are AI estimates rather than measured time. Next: merge structured-work evidence (GitHub, Jira) for a complete promotion packet, user-adjustable estimates, fairness auditing of the classifier, opt-in visibility badges, and localization beyond English.
Built With
- anthropic-claude
- block-kit
- bolt-for-python
- canvas)
- manusai
- replit
- slack-(ai-and-agent-surface
Log in or sign up for Devpost to join the conversation.