SignalDesk is an intelligent opportunity monitoring system that automatically discovers, filters, and delivers freelance and job opportunities from multiple platforms. It uses AI to classify opportunities, filter by skills, and send relevant matches directly to your WhatsApp.
-
Multi-Platform Monitoring: Automatically fetches opportunities from:
- Reddit (r/forhire, r/hiring, etc.)
- Hacker News (Jobs, Who's Hiring)
- Product Hunt
- GitHub (Job postings)
-
AI-Powered Filtering:
- Classifies opportunities using Groq AI
- Filters by your skills and preferences
- Generates personalized replies and cover letters
- Creates tailored resumes
-
WhatsApp Integration:
- Sends filtered opportunities directly to WhatsApp
- Includes opportunity details and generated responses
- Supports feedback collection
-
Automated Daily Processing:
- Runs daily at midnight via cron jobs
- Tracks and logs all activities
- Prevents duplicate processing
-
MongoDB Storage:
- Stores all opportunities and ingestion history
- Tracks delivery status and feedback
- Automatic cleanup of old posts
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher recommended)
- npm or yarn
- MongoDB (local or cloud instance like MongoDB Atlas)
- Google Chrome (required for WhatsApp Web.js)
-
Clone the repository
git clone <repository-url> cd SignalDesk
-
Install dependencies
npm install
-
Set up environment variables
cp env.example .env
Then edit
.envand fill in all the required values (see Environment Variables section below). -
Set up MongoDB
- Create a MongoDB database (local or cloud)
- Update
MONGODB_URIin your.envfile - The application will automatically create the necessary collections and indexes
Create a .env file in the root directory with the following variables:
| Variable | Description | Required |
|---|---|---|
MONGODB_URI |
MongoDB connection string (e.g., mongodb://localhost:27017/reddit_opportunities or MongoDB Atlas URI) |
✅ Yes |
GROQ_API_KEY |
Your Groq API key for AI processing | ✅ Yes |
REDDIT_CLIENT_ID |
Reddit API client ID | ✅ Yes |
REDDIT_CLIENT_SECRET |
Reddit API client secret | ✅ Yes |
REDDIT_USER_AGENT |
Reddit API user agent (format: platform:appid:version (by /u/username)) |
✅ Yes |
PRODUCTHUNT_API_TOKEN |
Product Hunt API token | ✅ Yes |
GITHUB_TOKEN |
GitHub personal access token | ✅ Yes |
RECEIVER_WHATSAPP_NUMBER |
WhatsApp number to receive opportunities (format: countrycode+number, e.g., 1234567890) |
✅ Yes |
- Groq API Key: Sign up at console.groq.com and create an API key
- Reddit API: Create an app at reddit.com/prefs/apps
- Product Hunt API: Get token from api.producthunt.com
- GitHub Token: Create a personal access token at github.com/settings/tokens
npm run devThis uses nodemon to automatically restart the server when files change.
npm start-
When you first run the application, WhatsApp Web will need to be authenticated:
- A QR code will appear in your terminal
- Scan it with your WhatsApp mobile app
- The session will be saved for future runs
-
The application will:
- Connect to MongoDB
- Initialize WhatsApp
- Run the first daily processing cycle
- Schedule future runs at midnight (00:00) daily
-
Check the console logs for:
- Connection status
- Processing results
- AI call counts
- Error messages (if any)
SignalDesk/
├── ai/ # AI processing modules
│ ├── api.js # Groq API integration
│ ├── classify.js # Opportunity classification
│ ├── skillFilter.js # Skill-based filtering
│ └── platforms/ # Platform-specific AI prompts
├── db/ # Database modules
│ ├── connection.js # MongoDB connection
│ ├── ingestion.js # Data ingestion logic
│ ├── posts.js # Post management
│ └── state.js # Application state
├── filters/ # Platform-specific filters
├── integrations/ # External API integrations
│ ├── github/
│ ├── hackernews/
│ ├── producthunt/
│ ├── reddit/
│ └── whatsapp/ # WhatsApp Web.js integration
├── logs/ # Logging utilities
├── orchestrators/ # Main processing orchestrators
├── pdf/ # Resume generation
├── utils/ # Utility functions
├── index.js # Main entry point
└── resume.json # Resume template data
- Fetching: The system fetches new posts from all configured platforms
- Filtering: Posts are filtered by keywords and basic criteria
- AI Classification: Remaining posts are classified using AI to identify opportunities
- Skill Matching: Opportunities are matched against your skills and preferences
- Response Generation: AI generates personalized replies and cover letters
- Delivery: Relevant opportunities are sent via WhatsApp with generated responses
- Storage: All data is stored in MongoDB for tracking and deduplication
The application provides detailed logging:
- Daily summaries of processed opportunities
- Platform breakdowns
- AI call counts and costs
- Error tracking
- Delivery status
- Node.js - Runtime environment
- MongoDB - Database
- Groq AI - AI processing
- WhatsApp Web.js - WhatsApp integration
- Playwright - Web scraping
- node-cron - Scheduled tasks
- Express - Web server (if needed)
- The application runs daily at midnight (00:00) by default
- WhatsApp session is stored locally and persists between runs
- Old posts are automatically cleaned up from the database
- The system prevents duplicate processing of the same opportunities
- All AI calls are rate-limited to prevent API throttling
- Ensure Google Chrome is installed
- Check that the terminal supports QR code display
- Try running in a different terminal
- Verify your
MONGODB_URIis correct - Ensure MongoDB is running (if local)
- Check network connectivity (if cloud)
- The application includes rate limiting for AI calls
- If you hit limits, wait a few minutes and restart
- Ensure all required variables are set in
.env - Check that
.envfile is in the root directory - Verify no typos in variable names