π° Passion Intelligence β Devpost Submission
Inspiration
I kept seeing the same injustice in hiring: resumes reward pedigree, polish, and network β not evidence. Meanwhile, the people genuinely obsessed with a problem are already building toward it in public: GitHub repos at 2am, hackathon weekends on Devpost, write-ups on Dev.to, threads on Hacker News. Nobody reads that evidence, because it lives scattered across the internet and nowhere near where hiring conversations actually happen.
And where do those conversations happen? Slack. Every "does anyone know a good engineer for X?" message I've ever seen was typed into a Slack channel. So instead of building another website that recruiters have to remember to visit, I asked: what if talent discovery lived exactly where the decision is made β as a native AI agent inside Slack?
I had previously built this idea as a standalone web app (a multi-agent pipeline running Gemma on an AMD GPU). For this hackathon I rebuilt it from scratch as a Slack-native agent, because the platform finally has the primitives to do it right: the Assistant API and the new agent-grade Block Kit.
What it does
Passion Intelligence finds the builders already obsessed with your problem β by evidence, not resumes β entirely inside Slack.
You give it a mission ("a serverless LLM inference platform", "climate risk mapping for communities"). Then:
- β¨ Free Discovery β it searches GitHub from your mission's keywords and investigates builders who never applied to you.
- π― Match applicants β you paste GitHub handles and it vets them by their real public work, auto-discovering their Dev.to, Hacker News, and Devpost footprints too.
An 8-agent pipeline profiles your mission, gathers cited evidence, assesses repo quality, detects genuine passion, computes semantic similarity, and ranks builders with a weighted composite score. Results arrive as rich Block Kit cards: π₯π₯π₯ ranks, six score bars per builder, and three buttons β Details, Evidence, and Why these scores, which exposes the exact math and evidence behind every number. Every claim cites a real URL. Nothing is invented.
Every builder ever discovered lands in a persistent talent pool you can browse from the App Home.
The impact: it surfaces overlooked builders by what they make, not who they know. A self-taught engineer in a small town with brilliant repos outranks a polished resume with no evidence. That's talent discovery for good β evidence over privilege.
How I built it
I went deep on Slack's newest agent platform, on purpose β Slack is the sponsor, and Slack is the product:
- Slack Assistant API (Bolt
Assistantclass) β Passion Intelligence is a first-class AI agent in the β¨ assistant panel: suggested prompts on thread start, live status while agents run ("is running passion detectionβ¦"), and thread titles set from your mission. - New agent-grade Block Kit β results render as the new
cardblocks, with a resilientpostRich()pattern that gracefully falls back to classic section/actions blocks on any surface that rejects them. The UX upgrades where supported and never breaks where it isn't. - App Home β a hero landing with one-tap quick-start missions, recent analyses, and the talent-pool counter.
- Modals with live updates β the mission form (
/passion) toggles between Free Discovery and Match modes in place viaviews.update, preserving what you've typed. - Live progress in one message β the pipeline streams progress events and I edit a single message in place (
chat.update, throttled): eight agent rows with status dots and aββββββββββ 80%bar. It feels like watching the agents work. - Socket Mode β no webhooks, no tunnels; the whole app is a single Node.js process.
The rest of the stack:
- Node.js + @slack/bolt v4 (ES modules, zero other runtime dependencies)
- OpenAI Responses API (
gpt-5.6-terra) powering four reasoning agents: project understanding, repo/hackathon analysis, passion explanations, and recruiter storytelling + executive brief - OpenAI embeddings (
text-embedding-3-small) for missionβevidence semantic similarity, blended with tag-overlap (Jaccard) scores - Evidence sources β GitHub REST API (profiles, repos, discovery search), Devpost (hackathon projects), Dev.to API (writing), Hacker News via Algolia (community activity)
- Deterministic scoring core β passion heuristics (domain alignment, builder consistency, voluntary effort, innovation) and a weighted ranking blend (40% similarity Β· 25% passion Β· 15% domain Β· 10% tech Β· 5% innovation Β· 5% evidence quality), so scores are auditable, not vibes
- JSON-persisted talent pool and a
doctor.jspreflight script that checks Slack, OpenAI, and every data source before a demo
Challenges I ran into
- Translating a web UI into Block Kit without losing the soul. My web app had score bars, candidate cards, evidence cards, and a live progress tab. I rebuilt each one natively: score bars became monospace
ββββββbars in section fields, candidate cards became the newcardblocks, and the progress tab became a single self-editing message. Slack's constraints (3,000-char sections, 3 buttons per card, block counts) forced a discipline that honestly made the design better. - The new agent blocks are bleeding-edge. Their message-surface support isn't uniformly documented, so I built a try-rich/fallback-classic poster instead of betting the demo on one block type.
- Rate limits and update storms. Editing the progress message on every pipeline event tripped Slack's rate limits, so I wrote a throttled updater with trailing flush. Unauthenticated GitHub gives you 60 requests/hour β each candidate costs ~5 β so the app supports an optional token and the doctor warns you before a demo dies.
- Keeping the AI honest. An LLM will happily flatter any candidate. I inverted the design: the LLM never scores β deterministic heuristics and embeddings do. The LLM only explains, and it may only reference evidence IDs that map to real URLs.
Accomplishments that I'm proud of
- A complete multi-agent product that lives 100% inside Slack β five surfaces (assistant panel, App Home, slash command, mentions, DMs), one process, no web frontend at all.
- Auditable AI. Tap "Why these scores" on any candidate and see exactly how every number was computed and which cited evidence produced it. In my smoke test, the pipeline correctly rated a famous-but-generic GitHub account as merely "Adjacent" instead of inventing expertise β the anti-hallucination design held.
- The live progress message β watching eight agents light up green inside a Slack thread is the moment the demo clicks for people.
- Porting an entire GPU-hosted Gemma web app to a Slack-native OpenAI agent in a single hackathon sprint, and having it run end-to-end in ~18 seconds per analysis.
What I learned
- Slack is a real application platform now. Between the Assistant API, App Home, modals, and the new agent blocks, I never once missed having a browser frontend. Meeting users where they already work beats asking them to visit your URL.
- Progressive enhancement applies to chat UIs: try the richest block, fall back gracefully, never break the message.
- The right division of labor for trustworthy AI: deterministic math for judgment, LLMs for language. Users trust a score they can audit.
- Constraints are a design tool β Slack's block limits produced a cleaner information hierarchy than my unconstrained web UI had.
What's next for Passion Intelligence
- Slack-native sourcing: let the agent read opt-in #intros and #show-and-tell channels so internal talent and community members surface in the pool alongside GitHub discoveries.
- Team workflows: share a candidate card to a hiring channel with one tap, collect π/π reactions as structured feedback, and draft evidence-grounded outreach messages.
- More evidence, more good: Kaggle, personal sites, and conference talks; plus a "hidden gems" mode that explicitly boosts builders with strong evidence but low follower counts β doubling down on the for-good mission.
- Slack Marketplace: harden multi-workspace state (the talent pool moves from JSON to a real database) and submit it so any team without a recruiting budget can hire on evidence.
Log in or sign up for Devpost to join the conversation.