All case studies
AI Tool

Pursuit

Bobi Labs · internal build

Role

PM-builder · internal tool

Duration

Built Q2 2026 · in active use

Status

Live · internal · synthetic-data demo planned

Overview. What needs attention: fresh scrapes awaiting scoring, high-fit jobs with no proposal yet, drafts ready to send, and per-source health at a glance.

Overview. What needs attention: fresh scrapes awaiting scoring, high-fit jobs with no proposal yet, drafts ready to send, and per-source health at a glance.

The problem

A small studio misses good contract work for a boring reason: nobody has time to watch a dozen job boards continuously, and the postings that matter expire in hours. The signal is real but it is buried in a high-volume, low-relevance feed, and the act of reading every posting to find the few worth pursuing is itself the bottleneck.

Even when a good lead surfaces, writing the first proposal is slow enough that the studio either responds late or responds generically. We wanted the watching and the first draft automated, the judgement kept human, and the whole thing observable enough to tune over time rather than trust blindly.

The approach

Scraper-per-source architecture. Each source (WeWorkRemotely, RemoteOK, Working Nomads, Remotive, Remote Rocketship, Upwork RSS, HN 'Seeking Freelancer', Jobspresso, Jobicy, Himalayas, targeted subreddits, and a bobilabs.dev inbound form) normalizes into one jobs table. Sources are individually toggleable so noise can be cut without code changes.

A Claude scorer rates every posting 0 to 100 against a configurable fit profile, classifies employment type (FTE / contract / contract-to-hire / talent network), and tags signal like stack match, fair budget, and verified client. The score threshold that promotes a job is operator-controlled, so the funnel tightens or widens by config, not redeploy.

Proposals are auto-drafted for high-fit matches but never sent. Every outbound stays human-gated by design. A drafted proposal lands in a review queue with a push notification; the operator edits and sends manually. An Intelligence surface tracks source mix, fit distribution, and win-rate so the profile can be tuned from real outcomes.

What shipped

  • A dozen-plus source scrapers normalizing into one jobs table, each individually enable/disable-able with per-source health monitoring.
  • 15-minute cron driving scrape → score → draft, with a manual 'run all now' override.
  • Claude fit-scoring with a tunable profile, employment-type classification, and signal tagging; operator-controlled promotion threshold.
  • Auto-drafted proposals into a human-gated review queue with push notification on every high-fit match.
  • Intelligence dashboard: source mix, employment mix, fit-score distribution, and win-rate by source from marked outcomes.

Stack & decisions

Next.js + TypeScript

App Router. Dashboard-heavy: Overview, Pipeline, Job Studio, Sources, Intelligence, Stats. The review surfaces are the only heavy client components.

Supabase + RLS

Postgres holds jobs, scores, and proposal drafts. Single-operator tool, so RLS posture is simple; the schema is built to add tenants later.

Claude API

One model call scores fit, classifies employment type, and tags signal in a structured response. A second call drafts the proposal only when a job clears the threshold, keeping spend proportional to real opportunities.

Cron

15-minute scrape → score → draft loop with a manual override. Per-source health surfaced so a silently-broken scraper is visible, not invisible.

Outcome

  • In active internal use for Bobi Labs' own pipeline. Hundreds of postings scanned per cycle, the operator only ever reviews the handful that clear the fit threshold.
  • Every outbound proposal is human-edited before send. The tool drafts and surfaces; it never speaks for the studio on its own.

What you won't see in screenshots

Screenshots show the real tool with internal pipeline data. A public demo running the same code on synthetic postings and fabricated scores is planned; no real lead or proposal data would be exposed. Live walkthrough available over screenshare in the meantime.

Have something we should ship?

60-minute scoping call, then a clear plan for how we'd approach it.