About the project
Inspiration
Keeping up with competitor news is a full-time job: blog updates, social posts, funding rounds, job listings, app-store reviews… yet most teams still rely on manual Google searches, Slack pings, and scattered spreadsheets. We knew there had to be a smarter way to surface only the signals that matter—on the channels teams already use. Enter Competitor Pulse: built for fast-moving startups that need AI-powered competitive intelligence in real time.
What we built
Competitor Pulse automatically:
- Crawls a watch-list of URLs (company sites, blogs, social feeds) via a Firecrawl MCP server
- Uses Claude (Anthropic API) to classify relevance and urgency
- Compiles structured digests via Gumloop MCP
- Delivers actionable notifications to Slack, Email, and Notion
A lightweight React frontend lets you manage your watch-list, preview digests, and tweak filters. Under the hood, a Node.js/Express API orchestrates MCP calls, stores metadata in Supabase, and handles webhooks for Slack and Notion.
What we learned
- MCP orchestration: Chaining Firecrawl → Claude → Gumloop taught us how to design robust, retry-safe pipelines.
- Prompt engineering at scale: Balancing precision (don’t miss anything important) with recall (don’t overload users) required iterative A/B testing of classification prompts.
- Integrations: Building secure, low-latency webhooks into Slack and Notion APIs sharpened our understanding of enterprise-grade delivery.
Challenges we faced
- Authentication scopes: Ensuring our service keys had just the right permissions across two MCP servers without over-privileging was tricky.
- Rate limits: We hit Anthropic rate caps during heavy crawls—so we implemented exponential backoff and batched requests.
- Deduplication: Many companies publish the same update across multiple channels; de-duplicating on semantic similarity took extra tuning with embedding-based hashing.
Built With
- claude-(anthropic-api)
- firecrawl-mcp
- gumloop
- node.js
- react
- typescript
- vercel

Log in or sign up for Devpost to join the conversation.