all projects
Freelance Job Finder preview

Freelance Job Finder

Privatetools

Node.js bot that scrapes 4 freelance platforms hourly and pushes new listings to Telegram in real time. Deployed to shared LumaDock VPS with PM2 + Docker.

Node.jsPuppeteerTelegram APIPM2DockerVPS
Land the first hour of every freelance job before the competition wakes up.

The problem

Best-paying freelance gigs go to whoever applies in the first 60 minutes. Refreshing Upwork, Toptal, and two other platforms manually is tedious and you still miss them in your sleep.

The approach

Same shape as the pharmacy bot, retargeted at freelance platforms with filtering for stack + budget. Container is shared on a LumaDock VPS to keep hosting cost trivial. Listings are filtered server-side against my stack preferences so only relevant ones hit Telegram — signal over noise.

Tech decisions

Stack + budget filter
Generic alerts become noise fast; filtering at the source keeps alerts actionable
Shared Docker host (LumaDock)
Trivial cost amortized across multiple small bots on the same VPS
Puppeteer with stealth flags
Several platforms aggressively block headless browsers; stealth profile is required
Telegram channel per stack
Separate channels mean I can mute irrelevant ones without losing the signal

Outcomes

  • Sub-hour latency from listing → notification
  • Stack + budget filter strips noise before alerting
  • Multiple Telegram channels for different work types
  • Running on shared VPS with negligible per-bot cost

What I learned

Apply latency is the single biggest factor in winning competitive freelance gigs. A 30-minute head start on a posting wins more bids than a 30% better proposal.