Recall — Institutional Memory for Slack Inspiration Every company we've worked at loses the same battle: the "why" behind decisions evaporates into Slack scrollback. Six months later, someone re-litigates a solved problem because the original thread is buried under 40,000 messages. Native Slack AI summarizes — it doesn't remember, cite, or catch contradictions. We wanted a system that treats a workspace like a living knowledge base: queryable, auditable, and proactive.
What it does Recall turns Slack into your company's institutional memory.
Ask Desk — natural-language Q&A over your Slack history with streamed answers, inline citations, and follow-up suggestions. Contradiction alerts — when a new decision conflicts with a prior one, Recall flags it in real time. Expertise routing — learns who actually knows what (from message patterns, not org charts) and routes questions to the right human. Decisions & Briefings — auto-curated decision log and periodic briefings so context survives turnover. Watchlists & Knowledge Gaps — standing topic subscriptions, plus a backlog of questions Recall couldn't confidently answer (your docs to-do list). Conversational Slack surface — @Recall in any channel, DM the bot, or use /recall. App Home tab gives each user a personal dashboard. Production MCP server — 14 audited tools at /mcp so Claude, ChatGPT, and Cursor can query your workspace brain directly. Public REST API + API keys, PII redaction, Slack-mirrored ACLs, audit trails, and per-workspace rate limiting. How we built it Stack: TanStack Start (React 19 + Vite 7) on Cloudflare Workers, Supabase (Postgres + pgvector + RLS) for multi-tenant storage, Lovable AI Gateway for embeddings + Gemini-2.0-flash generation. Retrieval: hybrid ranking (pgvector semantic + Postgres FTS) with HyDE query expansion, cross-encoder reranking, and a confidence scorer that decides when to abstain. Ingest: incremental conversations.history sync with content-hash dedup, trivial-message filtering, thread expansion, PII redaction, and per-channel ACL mirroring. Real-time Events API for edits/deletes/new messages, with auto-join on not_in_channel. Proactive layer: contradiction detection, watchlist embeddings-match, auto-answer in threads, and daily digests via pg_cron. MCP server: built on @lovable.dev/mcp-js with Supabase JWT auth, per-tool audit logging, and workspace-scoped role enforcement. Billing: Paddle (Free / Pro / Team / Enterprise) with feature gates and quota enforcement. Challenges we ran into Enterprise Grid compatibility. Slack's Enterprise Grid requires team_id on nearly every API call — a subtle divergence from standard workspaces that broke channel listing, seeding, and OAuth mid-hackathon. We patched the core slack() wrapper to auto-inject team_id from workspace context on every request. not_in_channel on ingest. Bots don't auto-join public channels. We added a graceful auto-join with scope-error surfacing so users get an actionable message instead of a stack trace. Cold-start hallucinations. Naive RAG happily answers with zero relevant context. We added a confidence gate + HyDE + reranker so Recall abstains and surfaces the question in Knowledge Gaps instead. Multi-tenant safety. RLS everywhere, service_role only inside verified server contexts, deny-all on embedding_cache, and a security-definer has_role() for admin checks — no role columns on user tables. MCP production-readiness. First pass worked but had no auditing or rate limits. We wrapped every tool in a runtime that enforces auth, workspace scope, per-user rate limits, and writes to mcp_tool_calls for full traceability. Accomplishments that we're proud of Full multi-tenant SaaS — auth, billing, RLS, quotas, audit — in 8 weeks. Production-grade MCP server (v0.3.0) with 14 tools, structured error codes, and safety annotations. Answers stream token-by-token with live citation chips that open the exact Slack thread. Contradiction detection actually works on seeded data — catches real conflicts, not just keyword collisions. Cross-source ready: Slack today, Notion + GitHub connectors already wired in. Every server function is typed end-to-end; the whole app deploys on the edge. What we learned Enterprise Slack is a different product than standard Slack — assume nothing about team_id, distribution, and install context. RAG quality is 80% retrieval, 20% generation. HyDE + reranking + a confidence gate beats a bigger model. MCP is only useful if it's auditable and scoped — an unaudited "read anything" tool is a security incident waiting to happen. Multi-tenant defaults matter more than features. Getting RLS + grants right on day one saves weeks later. What's next for Recall More sources: finish Notion, GitHub, Linear, Google Docs ingest into the same knowledge graph. Agentic workflows: let Recall not just answer but act — draft the RFC, open the PR comment, ping the expert. Team analytics: decision velocity, knowledge concentration risk, onboarding time-to-context. Native Slack Canvas integration for briefings and decision logs. Self-hosted / VPC deployment for regulated customers.
Built With
- cloudflare-workers
- framer-motion
- gemini
- lovable
- lovable-ai-gateway
- paddle
- pg-cron
- pgvector
- postgresql
- rag
- react
- rls
- slack-api
- slack-events-api
- slack-oauth
- supabase
- tailwindcss
- tanstack-query
- tanstack-router
- tanstack-start
- typescript
- vite
- zod
Log in or sign up for Devpost to join the conversation.