Bops
A team of AI bots that runs your business ops: inbox, pipeline, invoices, reports. Each one has its own computer, email and phone number, and remembers everything.
Careers page monitor
Translation pending
BusinessTypeScript · JavaScriptGitHub @harrydrydenOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
personal life
Translation pending
Loading the full README. The saved excerpt is shown below.
Watches the careers pages of companies you list, once a day. Keeps a table of the roles that match
your keywords and your locations, tracks how long each has been live and when it closes, and
learns which roles to put in front of you from the reasons you give when you apply or skip. It also
recommends companies similar to the ones you already track.
Several people can share one deployment: each has their own account, companies, filters, learning and CVs, while every company is discovered and scanned once for everyone. Give it a homepage URL and it finds the careers page itself.Read the full README ↗Find your path.
Watches the careers pages of companies you list, once a day. Keeps a table of the roles that match your keywords and your locations, tracks how long each has been live and when it closes, and learns which roles to put in front of you from the reasons you give when you apply or skip. It also recommends companies similar to the ones you already track.
Several people can share one deployment: each has their own account, companies, filters, learning and CVs, while every company is discovered and scanned once for everyone. Give it a homepage URL and it finds the careers page itself.
| Add a company | Paste a homepage URL. Discovery finds the careers source: it harvests and scores links, probes well-known paths, reads sitemaps, and fingerprints applicant tracking systems in the markup, in JavaScript bundles and in the network calls a page makes. High confidence is accepted automatically; medium confidence asks you to confirm one of three candidates. |
| Scan daily | One run at your chosen local time. Applicant tracking system feeds are read as JSON (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, BambooHR, Workday, Pinpoint, Breezy). Everything else falls back to JSON-LD, then to model extraction that writes a CSS selector recipe, so later scans of an unchanged page cost nothing. |
| Filter | Roles enter the table only if they match your include keywords, avoid your exclude keywords, and sit in one of your locations. UK expands to its nations and cities; a remote role passes unless it names a different region. |
| Track change | A role closes only after it is absent from two consecutive successful scans. A failed or suspicious scan never closes anything. Reappearing roles reopen; near-identical reposts are linked. |
| Decide | Apply or skip, with a reason. The reason is tagged, folded into a versioned preference profile you can read and edit, and used to score every future role out of 100. |
| Learn | Weekly, the model proposes keyword, location and threshold changes with the evidence behind them. Roles that just missed your keywords but score well appear in a separate section, so learning can widen your search rather than only narrow it. |
| Recommend | Weekly, similar companies are proposed, each verified first: the homepage resolves, a careers source is discoverable, and its open and matching roles are counted. |
apps/web Next.js interface (Vercel)
apps/worker scheduler, scrapers, model calls, task queue (Render)
packages/core discovery, ATS adapters, extraction, the gate, change detection
packages/ai one function per model call site, schema-validated
packages/db Drizzle schema, migrations, task queue helpers
docs/SPEC.md the specification this implements
packages/core holds every decision that affects accuracy and is pure: fetchers are injected, so
all of it is tested against fixtures with no network.
Requirements: Node 22, pnpm 10, PostgreSQL 16.
pnpm install
createdb col_dev # or: psql -c 'create database col_dev'
cp .env.example .env # then edit it
export DATABASE_URL=postgres://postgres:[email protected]:5432/col_dev
pnpm db:migrate
# Interface: http://localhost:3000 — sign up with the administrator address (ADMIN_EMAILS, default [email protected]) and confirm it
export SESSION_SECRET=$(openssl rand -hex 32)
pnpm dev:web
# Worker, in another terminal
export ANTHROPIC_API_KEY=sk-ant-... # optional: without it, scanning works and scoring is skipped
export [email protected]
pnpm dev:worker
cd apps/worker
# Dry run: what would discovery find for a URL? Touches nothing.
pnpm cli probe https://www.anduril.com/open-roles
pnpm cli probe https://www.anthropic.com
pnpm cli add https://www.anduril.com https://www.anthropic.com
pnpm cli drain # runs queued work now instead of waiting for the scheduler
pnpm cli list # companies, the source found for each, role and follower counts
pnpm cli users # accounts and what each follows (COL_CLI_USER picks who the CLI acts for)
pnpm cli table # the roles table as text
pnpm cli scan # queue a full run
Full instructions, including what to set where and what to do when something is wrong, are in docs/DEPLOY.md. In short:
render.yaml is a
blueprint that creates the worker from Dockerfile; in Vercel, import the repository
and set the root directory to apps/web. Roughly £11 a month plus model usage./api/cron, which runs the same
scheduler and handlers inside the request. Roughly £5 a month, but there is no headless browser,
so a careers page whose roles arrive by JavaScript has to have its board URL pasted in by hand.This is the beginning of the README. Read the rest at the original. Read the full README ↗