v1.3.0

career-ops-hq/career-opsv1.3.0Apr 10, 2026by santifer

AI Summary

A community-focused release defining the roadmap to local AI, introducing a zero-token scanner, ghost job detection, follow-up cadence tracking, and support for Korean and Russian languages.

Key Highlights

  • Zero-token portal scanner for Greenhouse/Ashby/Lever
  • Block G: ghost job detection
  • Follow-up cadence tracker mode
  • Contact mode by type (recruiter/HM/peer/interviewer)
  • Support for Korean and Russian languages

New Features

  • Zero-token portal scanner (scan.mjs)
  • Block G: ghost job detection
  • Follow-up cadence tracker mode
  • Contact mode by contact type
  • 10 bug fixes (resource leaks, command injection, Unicode, navigation)
  • Liveness fix for expired pages with generic 'Apply' text
  • Resume filename uses actual name from profile.yml
  • Nix flake devshell
  • Code of Conduct and Governance documents
  • Security policy and Support guide
  • PR template and Issue templates
  • GitHub Discussions and Discord integration
  • Languages: Brazilian Portuguese, Korean, Japanese, Russian

Full Release Notes

![Free for everyone](https://raw.githubusercontent.com/santifer/career-ops/main/docs/vision-banner.jpg)

### The Vision

We published our roadmap: **career-ops will run on your own machine with free local AI models — no API keys, no subscriptions. Or connect your preferred AI provider if you want the power of cloud models. Your choice.** Job hunting shouldn't be a premium feature.

[Read the full vision →](https://github.com/santifer/career-ops/discussions/156)

### What's new

**Zero-token portal scanner** — `scan.mjs` hits Greenhouse/Ashby/Lever APIs directly. 73+ companies scanned with zero LLM tokens. Resolves #98.

**Block G: ghost job detection** — new evaluation block that flags suspicious listings using free signals (JD quality, reposting history, market data). Doesn't affect the 1-5 score — it's an independent legitimacy check. (@FReptar0)

**Follow-up cadence tracker** — new mode that tracks when to follow up on applications, with configurable cadence rules per status. (@Alfredao)

**Contact mode by type** — LinkedIn outreach now adapts the message framework based on whether you're reaching out to a recruiter, hiring manager, peer, or interviewer. (@FReptar0)

**10 bug fixes** — resource leaks in PDF generation, command injection in merge-tracker, Unicode truncation in dashboard (fixes Japanese/Korean display), sed injection in batch runner, and more. (@hobostay)

**Liveness fix** — expired job pages with generic "Apply" text in navigation no longer fool the liveness checker. (@lawrence3699)

**Resume filename** — generated PDFs now use your actual name from profile.yml instead of "candidate". (@shra1-honade)

### Languages

4 new languages, bringing the total to 8:

🇧🇷 Brazilian Portuguese · 🇰🇷 Korean · 🇯🇵 Japanese (with full market modes) · 🇷🇺 Russian (with interview prep for Yandex, VK, Ozon, T-Bank)

Previously shipped: 🇺🇸 English · 🇪🇸 Spanish · 🇩🇪 German · 🇫🇷 French

### Community

- **Code of Conduct** — Contributor Covenant 2.1 with enforcement actions
- **Governance** — BDFL model with contributor ladder (Participant → Contributor → Triager → Reviewer → Maintainer)
- **Security policy** — private vulnerability reporting
- **Support guide** — routes how-to questions to Discord/Discussions
- **PR template** — checklist for contributors
- **Issue templates** — CoC checkbox, duplicate search, CLI/OS fields
- **GitHub Discussions** — now enabled
- **Discord** integrated across all touchpoints

### Dev experience

- **Nix flake** — `nix develop` sets up the full environment with Playwright browsers. (@Enriquefft)

### Contributors

Thanks to everyone who made this release possible:

@Arc-the · @Alfredao · @FReptar0 · @hobostay · @lawrence3699 · @shra1-honade · @Enriquefft · @filipemarraa · @minwoo-data · @eltociear · @Fighter90