2026 · Solo · Open source
The Remote & Ledger
An open-source, local-first job tracker that tailors your résumé to every job with your own AI — printed like a newspaper.

Architecture
Mission
Job hunting is a pipeline problem wearing a spreadsheet costume. I wanted a tool that crawls remote roles into a local database, tailors a résumé per job with the AI I already pay for, drafts the cover letter, and tracks every application on a kanban with funnel numbers, without my data ever leaving the machine.
For whom: engineers running a serious remote search. Constraints: privacy first (data and keys stay local), bring-your-own AI across seven providers or a CLI subscription, no auto-submit ever, and a three-to-four-week build window because I was using it on my own search at the same time.
Manifest
| Layer | Choice | Version | Why |
|---|---|---|---|
| app | React Router 7 (SSR) | 7 | Framework mode gives me loaders and actions without a separate API. |
| app | Tailwind | 4 | Fast to hand-set a letterpress system without a component library. |
| data | Node SQLite | — | One file on disk; the whole point is that nothing leaves the machine. |
| agents | Seven AI providers + CLI subscriptions | — | Use the AI you already pay for; keys encrypted locally with AES-256-GCM. |
| agents | Playwright | — | Renders résumé PDFs and assists form filling; never submits. |
| services | IMAP | — | Reads replies so the kanban moves without manual bookkeeping. |
Decisions
SQLite on disk, nothing in the cloud. Jobs, résumés, notes, and BYO keys (AES-256-GCM) live in one local database.
An anti-hallucination guard on every tailored résumé. Generated bullets are checked against the knowledge base before they can be accepted; anything unsupported is flagged.
A knowledge base that reads project folders. It scans repositories and drafts factual bullets, then draws a force-directed graph of skills, projects, jobs, and companies.
Assist auto-apply, never submit. Playwright fills forms and stops; the human presses the button.
Hand-set "Heritage Press" design system. Letterpress type and an amber accent, with a dark "Night Press" mode. It looks like a ledger because it is one.
Impact
- Lines of TypeScript
- ~29k
- AI runners
- 11 — 4 CLI, 7 API
- Installs from one file
- macOS · Windows · Linux
- Commits
- 221
About 10k lines of TypeScript in three to four weeks, dogfooded on a real job search, published under MIT. It is the tool I run my own pipeline on.
What broke
Dogfooding on the live database bit me. While iterating on the knowledge-base schema I ran a migration against the same jobs.db I was using for my real job search. A DROP in that migration took the knowledge base with it, and the only copy was that one file.
Fixed structurally: the app snapshots the database before every migration, migrations are additive by default, and a dry-run prints the plan before anything executes. It is also why this site ships nightly dumps to object storage instead of trusting a single box.
Ship log
- First commit
- First real application sent from the pipeline
- Runs as a background service, reachable over HTTPS behind dropport
- Local models: Ollama installed from inside the app, with web search handed to it as a tool
- One binary per OS that installs everything — vendored Node, nothing to set up first
- Tested on real Windows and Linux machines; theremoteledger.org went up
- v0.2.0 — job profiles, autopilot, and moving machines; theremoteledger.org gains a changelog read from the repository
- v0.2.1 — a score you can check, prep for every round, and Windows that finds your agent
- v0.2.2 — the https address on Windows without a package manager; SearXNG installed from inside the app there too
- Now: MIT, ~29k lines of TypeScript and 1.2k of Go, 221 commits, 18 releases