JOBBOTNIGHT SHIFT

18:00

A Rust bot that runs a job search. Everything on this page is fictional data.

The bot worksthe hours I don’t.

From 18:00 to 09:00, jobbot reads public job boards, scores what it finds, tailors a CV and fills the forms. It stops at every point where a person should decide.

SCROLL: THE SHIFT STARTS AT 18:00

This is the real panel.

A Rust server renders it. You are looking at its demo build, with fictional data.

Public boards only.
No logins, no keys.

Greenhouse, Lever and Ashby publish their listings on purpose. jobbot reads exactly that.

OFFERS READ
0
ABOVE THRESHOLD
0
TOP SCORE
0

412 fictional offers. The default threshold, 60, is the real one.

Five layers between an offer and a send.

  1. POSTING

    A public listing, read from the board’s own feed. Duplicates and excluded companies are dropped first.

  2. SCORE

    One number from six weighted factors: fit 30, stability 20, pay 15, learning 15, interview style 10, other 10. Below 60 the offer stays out of the queue.

  3. CV

    My master CV is reordered for the posting and gets one added sentence. It can only use skills already on it.

  4. ANSWERS

    Known answers come from a file I wrote. A question with no answer is left blank, never guessed.

  5. GATE

    Every send is a dry run until I approve it. Live mode sends only what is approved.

It leaves blanks.
It never invents.

Every field it knows, it types. Every question it can’t answer, it frames and leaves to me.

FILLED
0
NEEDS ME
0

A dry run: the page is filled, a screenshot is saved, nothing is sent.

One Rust program,
on my own PC.

A scheduled task wakes it outside my work hours. It follows one chain of modules, and a person is the last link.

Under the chain: a clock that knows my calendar, a SQLite file that remembers every state, and the server behind the panel you saw.

LINES OF RUST
0
OFFLINE TESTS
0
DEPENDENCIES
0

Counted by scripts/receipts.py: #[test] attributes in src/, tests/ and crates/ that run offline, not a test run.

boardspublic job feeds discovery.rsdedupe, exclusions scoring.rs6 factors, 0 to 100 cv.rsnever adds a skill form.rsPlaywright fills gate.rsevery check first handoff.rsfills, never sends a personconfirms the send window.rsquiet in busy hours tracker.rsSQLite, 12 states panel/tiny_http, the panel you saw

Silence
is not the end.

Every reply moves an application one step along the line. Ghosted is a state like the others: a late answer can still turn it into a test, an interview or an offer.

Demo numbers. The states are the real ones in crates/jobbot-domain/src/state.rs: submitted, replied, technical_test, interview, offer and ghosted.

38SUBMITTED 11REPLIED 4TEST 3INTERVIEW 1OFFER ghostedstill open A LATE ANSWER MOVES IT AGAIN

The bot proposes.I approve the first five.

After five approvals it runs by itself, at most 25 a day. Until then, every send is mine.

  1. It never invents a skill.

    src/cv.rs
  2. It leaves a blank before it guesses.

    src/form.rs
  3. Nothing goes out without the gate, and never on LinkedIn or Upwork.

    src/gate.rs
  4. Where a bot would be flagged, it fills the form and I send it.

    src/handoff.rs
  5. It stays quiet in my busy hours.

    crates/jobbot-domain/src/window.rs

Built with AI assistance. All data on this page is fictional; the counts come from the real code (scripts/receipts.py). The source is on GitHub.