Back

Pipeline & tracking

Job Search Command Centre

Supabase + React app that runs my entire job search as a pipeline. Apify scrapes, OpenRouter scores, Slack notifies, a 14-stage pipeline tracks applications, an interview coach generates STAR-graded practice questions. The hero example of the 3-layer pattern at full scale.

What was broken

The job market in NL is saturated and LinkedIn applications feel near-futile. I was tracking applications in spreadsheets, losing context between conversations, missing follow-ups, and forgetting which roles had which JDs by the time recruiters replied. The operational problem was obvious: I had no system, just a list of to-dos pretending to be one.

What I built

A full Supabase + React app that runs my entire job search as a pipeline. Apify scrapes LinkedIn and Indeed against saved search profiles. A cheap fast model pre-screens jobs against a plain-English persona I wrote. A stronger model scores survivors 0–100 with explicit matches, gaps, and a one-line application tip. Jobs that score above my threshold trigger a Slack digest. Anything I apply to enters a 14-stage pipeline with notes, contacts, and reminders. When a recruiter replies, the interview coach generates ten tailored questions — three behavioural targeting my known gaps, three technical, two situational, two strengths — and practice answers get scored on STAR with feedback.

How the 3-layer pattern shows up here

Search profiles and AI personas are directives — plain English describing what I want. Edge functions are orchestration — deciding when to scrape, when to pre-screen, when to score, when to notify. Apify, OpenRouter, Slack, pg_cron are execution — deterministic, paid, reliable.

I don't ask the LLM to do scheduling. I don't ask cron to make judgement calls. Each layer gets the work it's good at.

Tech

React, Vite, Tailwind, Supabase (Postgres + RLS + Edge Functions + pg_cron + Storage), OpenRouter, Apify, Slack webhooks, Vercel. Ten tables, eight edge functions, twelve build milestones from auth to interview coach.

Why it matters for an ops team

Every operational system I've worked in has had the same shape as this one — pipeline stages, scoring, escalation, follow-up. I built this because I needed it, but the muscle is identical to what an inbound lead routing system or a customer health dashboard needs. The discipline of separating "what should happen" from "who decides" from "who does it" is the same discipline that keeps a Salesforce instance from turning into a swamp.

What I'd do differently

Built the persona-based pre-screening too late. I was scoring every scraped job for the first three weeks, burning model credits on roles that any human would have rejected in two seconds. Once I added the cheap-model pre-screen layer, my scoring spend dropped meaningfully and the queue became clean enough to actually act on.

Source

Open source pieces on GitHub. Full code private (it has my real search history and contacts). Happy to walk through the schema and edge function logic in a conversation.