Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

Filtering Freelance Leads: Recency Windows and Job‑Board Rules in My Home‑Hosted Scanner

Description and use

The author built a filter layer for a freelance job board scanner, limiting results to fresh posts and removing noise by applying recency windows and board‑specific rules.

Problem

Freelance job boards return stale or noisy listings, making it hard to identify fresh, relevant opportunities for personal projects.

Outcome

The filter pipeline reduces noise and stale data, delivering a focused set of fresh freelance leads to Slack.

Workflow

  • 1. Cron job triggers Node.js script every 30 minutes.
  • 2. Script fetches raw JSON feeds from each board.
  • 3. Normalises payloads into a common shape (id, title, board, postedAt, budget, description, url).
  • 4. Applies recency filter based on per‑board window (config/recency.json).
  • 5. Applies board‑specific rules (upworkRule, freelancerRule, guruRule).
  • 6. Sends surviving leads to Slack via webhook.

Evidence

When I started scanning freelance job boards for my own projects, I quickly ran into two problems: most listings were stale, and each board had its own quirks that made a naïve scraper return a lot of noise.

Source

The scanner runs on a modest Raspberry Pi 4 that I keep in my garage.

Source

A cron job triggers a Node.js script every 30 minutes.

Source

The filter reads this file at start‑up: // src/filters/recency.js ... const minutes = recencyConfig[job.board] || 60;

Source

I encode these as small predicate functions: // src/filters/boardRules.js ... function upworkRule(job) { if (job.budget === 0 && !/fixed-price/i.test(job.title)) return false; return true; }

Source

  • Record date: 2026-11-01T23:14:09.659Z