Skip to content

v0.4.0 β€” six boards, seven countries

Choose a tag to compare

@Stupidoodle Stupidoodle released this 25 Aug 09:38
· 47 commits to main since this release

What's new

swissdevjobs-cli is no longer Switzerland-only. The operator of swissdevjobs.ch runs the same platform on five sister boards, and one release now covers all of them:

Board Country Currency
πŸ‡¨πŸ‡­ swissdevjobs.ch Switzerland CHF
πŸ‡©πŸ‡ͺ germantechjobs.de Germany EUR
πŸ‡¬πŸ‡§ devitjobs.uk United Kingdom GBP
πŸ‡ΊπŸ‡ΈπŸ‡¨πŸ‡¦ devitjobs.com US & Canada USD
πŸ‡³πŸ‡± devitjobs.nl Netherlands EUR
πŸ‡«πŸ‡· devitjobs.fr France EUR

That's ~4,700 salary-transparent postings across 7 countries, up from ~240 β€” searched, deduplicated, and applied to with the same confirmation-gated flow.

Highlights

  • sdj list --country de --country uk, sdj config --countries ch,de (or all) β€” every board searched by default
  • MCP search_jobs gains a country parameter; the apply preview now names the board it would submit to
  • Salaries format in each board's own currency
  • The applied-jobs ledger is shared across boards: apply once, the same company+role is hidden everywhere
  • Fixed: the warm cache no longer drops expLevel / hasVisaSponsorship / techCategory, so --visa and --level filters now work against cached results

Under the hood

  • Full restructure into enforced cosmic-python layering (domain / adapters / service_layer / dto / entrypoints) β€” import-linter contracts plus an ast-based architecture test fail the build on violations
  • Tooling: uv_build, ruff, ty, PostToolUse quality hook, CI on Python 3.9 and 3.14
  • 172 offline tests (fakes per port, no mocks), 90% branch-coverage gate, opt-in read-only live lane
  • Still zero runtime dependencies β€” stdlib only, including the MCP server

Install

/plugin marketplace add Stupidoodle/swissdevjobs-cli
/plugin install swissdevjobs@swissdevjobs

or uvx --from git+https://github.com/Stupidoodle/swissdevjobs-cli@v0.4.0 sdj list

Existing plugin installs are pinned to v0.3.0 β€” update with:

/plugin marketplace update swissdevjobs
/plugin update swissdevjobs@swissdevjobs

After updating, the jobs cache migrates automatically (it's rebuilt on first run); your applications ledger is untouched.

πŸ€– Generated with Claude Code