Vol. I · No. 1 · Free & open source · Runs on your machine

Your job hunt, printed like a newspaper.

The Remote Ledger finds remote roles, tailors your résumé to each posting, drafts the cover letter and tracks every application, running entirely on your own machine with your own AI.

No account. No server. No telemetry. Your résumé never leaves your computer.


The board

Every role you are chasing, on one sheet

Drag a job from Saved to Applied to Screening to Offer. Fit scored against your actual résumé, not against the keywords you happened to type.

Nothing on this board was invented. Every posting was opened and read before it was filed, and anything whose application page did not resolve was dropped, not guessed at.

The Remote Ledger pipeline board, showing job cards in Saved, Applied, Screening, Interview, Offer and Rejected columns
The pipeline. 73 saved, 2 applied, 7 screening. Each card carries its fit score and the stage you moved it to.
8
job boards shipped, grown from 3 by the people using it
4
public feeds read with no AI and no key at all
15
lines of work, from customer support to healthcare
0
accounts, servers, or bytes of telemetry

What it does

Six things, each of which you would otherwise do by hand.

Finds the roles

Reads the free public job boards directly, with no key, no scraping and nothing imagined, then researches employers' own career pages when your runner can browse. Every posting is verified live before it reaches your board.

Tailors the résumé

Rewrites your résumé for one posting, from your real experience. An anti-hallucination guard checks every claim against what you actually gave it, so it never invents an employer, a metric or a year you do not have.

Remembers your work

A knowledge base built from your own projects, folders and notes. When a posting asks for something your résumé does not show, it asks you where you did it, then keeps the answer for next time.

Walks the application

A guided flow per job: analyse the match, close the gaps with evidence, tailor, cover letter, apply. Skip any step. Come back to any step.

Clips anything

A browser button that files whatever posting you are looking at, reads it in full, and scores it against your résumé before you have finished the tab.

Shows the bill

Every AI call is logged with what it was for and what it cost. Set a monthly cap. Nothing is billed anywhere you cannot see.

It would rather find nothing than invent something

The one thing a job tool must never do.

Ask a language model to find jobs and it will happily produce ten, beautifully formatted, several of which do not exist. This is the failure mode that makes AI job tools worthless, and it is not solved with a sterner prompt.

So finding is not a thing the model is trusted to do. Every posting is opened and verified before it is filed. In the run below the agent follows a link, discovers it is a board index and not a live role, says so, and moves on. That job never reaches your board.

When the runner you chose cannot browse the web at all, it does not pretend. It says so and reads the free public job feeds instead, where the postings are real because they were downloaded, not recalled.

The Crawl Shell showing the agent's live reasoning, web searches, page fetches, and a rejected board index
Run #379, live. Every search, every fetch, and the moment it rejects a dead link: "Appfire link was a board index (role gone)."

Runs on whatever AI you already have

Three ways to power it, and one of them is free.

1

An agent you already pay for

If you subscribe to Claude, ChatGPT, Cursor or Gemini, their command-line agent is part of that subscription. The Ledger uses it. No key, no per-token bill, and it can browse, which is what finding new jobs actually needs.

2

Your own API key

Paste a key from Anthropic, OpenAI, Google, Groq, Mistral or OpenRouter. It is encrypted on your machine and only ever sent to the provider you chose. OpenRouter carries free models that run the whole app.

3

Nothing but your laptop

Install Ollama from inside the app and run an open model locally. No account, no cost, and your résumé and salary history never touch the internet. The one thing a local model cannot do is browse, so the free job boards do the finding instead.

One posting, start to sent

The part that actually takes the afternoon.

Analyse the match. Close the gaps it finds. When a posting wants a skill your résumé does not show, it asks where you used it instead of writing you a new past. Tailor. Cover letter. Apply.

Everything you tell it goes into a knowledge base that is yours, so the next posting that asks the same question already has your answer.

A job page in The Remote Ledger showing the guided application stepper
The guided application. Five steps, none of them locked. Skip what this posting does not need.

It gets better because other people use it

The job-board list is the part of this that compounds.

The boards this ships with were short because one person wrote them. Everybody running the Ledger is quietly finding boards that work: a regional one, a niche one, one that is not tech-only. None of it ever came back.

Now it can. Track a board the shipped list does not carry and the Companies tab will offer it back as a pull request, opened from your own GitHub account, under your name. You see the exact payload, board by board, before any of it leaves. It stays opt-in, because switching it on is not consent to whatever today's list happens to hold.

Every board that arrives this way ships to everybody on the next update, with the notes about how to crawl it politely already attached.

38boards shipped, and the newest is one for people who are not engineers
  • Remotiko
  • Dynamite Jobs
  • Dice
  • We Work Remotelynew
  • InclusivelyRemotenew
  • Jobspressonew
  • BruntWork Careersnew
  • Truly Remote Worknew

Why it looks like a newspaper

Before job boards, before LinkedIn, before any of this, you found work in the paper. The Situations Vacant column came out on a Tuesday, and people bought the early edition, went down it with a pen, circled what looked possible, and moved fast, because everybody else in town had the same page in front of them.

Those adverts were terse because you paid for them by the line. No filler, no “fast-paced dynamic environment”, no six paragraphs about the mission before the salary. What the job was, where it was, what it paid, and how to apply. The constraint made them honest.

That is the feeling this is built around, and not only because it looks good. A tool that pads is a tool that is inventing, and the discipline the classifieds got from a price per line, this gets from refusing to write anything it cannot evidence. So the fit is one number. The fine-print is one line. A posting it could not verify does not appear at all.

Hence the ledger, the ruled columns, the two-colour press and the crop marks. It is a broadsheet because a broadsheet is what a job hunt used to be, and because the shape carries the argument.

The contract

Plainly, so you can decide before you install instead of after.

What it does

  • Keep everything in one SQLite file in a folder you chose
  • Encrypt your API keys with a key that never leaves the machine
  • Back itself up every six hours, and before anything destructive
  • Log every AI call with what it was for and what it cost
  • Let you clear the whole thing and start over, from inside the app
  • Run on a free local model if you never want to pay anyone

What it refuses to do

  • Invent a job, a company, or an application link
  • Claim a skill on your behalf that you did not say you had
  • Send your résumé, notes or keys anywhere but the AI you picked
  • Ask you to make an account, because there is no server to hold one
  • Phone home. There is no analytics in it, at all
  • Hold your data hostage; delete the folder and it is genuinely gone

Reasonable questions

Is it really free?

The app is open source and costs nothing. The AI behind it is whatever you choose: free on a local model or on OpenRouter's free tier, included if you already subscribe to an agent CLI, or metered per token if you bring a paid key. The app shows you the cost either way.

Do I need to be technical?

You need to be comfortable installing something and running one command. The setup wizard handles the rest. It detects what is on your machine, installs a local model for you if you want one, and proves each step works before moving on.

Is it only for software jobs?

No. You pick your line of work, from customer support to design, marketing, sales, finance, healthcare and teaching. The search, the scoring and the résumé writing all follow it.

Will it invent things on my résumé?

It is built specifically not to. Tailoring runs through a guard that checks each claim against the experience you supplied, and a skill is only ever added when you say where you used it. Where it cannot evidence something, it leaves it out and tells you.

Where does my data go?

Into data/jobs.db in the folder you installed it in. Nowhere else, except the prompts sent to the AI provider you selected.

How does the job-board list get better?

From the people using it. When you add a board the shipped list does not carry, the Companies tab can offer it back as a pull request from your own GitHub account. It sends four things: name, address, your note, and how many roles it actually produced for you. Four fields, shown to you first, opt-in, one board at a time. It went from 3 boards to 8 that way.

Install it

Three commands, and the wizard takes it from there.

Before you startNode 22+the app runs on it; nothing is compiledGitto clone it, and to take updates laterCaddyonly for the real https address; skip it and use localhost
  1. 1

    Clone it

    git clone https://github.com/dark-matter08/remote-ledger.git && cd remote-ledger

    About 30 seconds. Nothing is installed globally.

  2. 2

    Install the dependencies

    Pulls the packages and a Chromium for rendering résumé PDFs. No native build step, no compiler.

    npm install
  3. 3

    Start it

    One command. It installs what is missing, gives the app a real web address, runs it in the background, and brings it back every time you log in. It asks for your password once, to bind ports 80 and 443, add the hostname, and trust the local certificate.

    npm run ledger start

    → https://remoteledger.dp.local. Open it and the six-step wizard starts.

Afterwards
npm run ledger status
Is it running, and on what address.
npm run ledger doctor
What start would find, without changing anything.
npm run ledger restart
Take an update: discard local edits, pull, rebuild, restart. The app also offers this in the sidebar when there is a new version.
npm run ledger stop
Stop the background service.

Prefer not to bind ports or install Caddy? npm run dev serves it on http://localhost:5173 with everything else identical. Set LEDGER_DOMAIN for a different address.

Take it for a run

Free, open source, and yours in about two minutes.