Skip to content

Releases

v0.2.1

Choose a tag to compare

@metimol metimol released this 17 Oct 19:41
7ca81bf

What's Changed

This release removes the AI match scoring feature from the job matching pipeline and updates the documentation and UI to reflect this change. It also simplifies the code and database schema accordingly.

Removal of AI Match Scoring:

  • Dropped the score column from the matched_jobs table in the database migration logic (app/database.py).
  • Removed the score field from the MatchedJob model and its __repr__ method (app/models/job.py).
  • Eliminated the score field from the API response model and feed endpoint, and removed the min_score query parameter and related logic (app/routers/feed.py).
  • Removed UI references to "match score" and "best match" sorting in all supported languages (app/locales/en.json, app/locales/de.json, app/locales/ru.json, app/locales/uk.json).

Documentation & UI Improvements:

  • Updated feature descriptions in all language files to remove references to AI scoring and rationales, and clarified deduplication and automation features (app/locales/en.json, app/locales/de.json, app/locales/ru.json, app/locales/uk.json).

Codebase Cleanup:

  • Removed unused imports related to scoring from app/models/job.py.
  • Cleaned up .pre-commit-config.yaml by removing an unnecessary exclude pattern.

These changes collectively remove the AI scoring logic and references from both backend and frontend, streamline the codebase, and ensure the documentation and UI accurately represent the platform's current functionality.

Full Changelog: v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@metimol metimol released this 04 Oct 07:51

✨ New Features

  • Dedicated Job Details Page:

  • Added a new /job/{job_id} routing and a responsive UI (job.html) to view full matched job details.

  • Features a visual "Match Score" ring, detailed job descriptions, and direct action buttons (Save, Dismiss, View on Arbeitsagentur).

  • Clickable Feed Integration:

  • Job cards in the feed now link directly to the new details page via clickable titles and a dedicated "View" button.

  • Lazy-Loading Descriptions:

  • The backend now automatically fetches and caches missing job descriptions from the Bundesagentur für Arbeit (BA) API when a user views a job's details.

  • Expanded Localization:

  • Added UI translations for the new job details interface across all supported languages (English, German, Russian, Ukrainian).

🛡️ Security & Data Integrity

  • Robust Text Sanitizer (text_sanitizer.py):

  • Implemented a new defense-in-depth HTML parser to strip malicious markup (e.g., <script>, <style>, <iframe>) from untrusted third-party BA API responses.

  • Automatically removes invisible formatting, zero-width, and private-use characters to prevent hidden prompt-injection payloads from reaching the LLM matcher.

  • Normalizes whitespace and safely truncates abnormally long text strings to protect database columns and LLM context limits.

  • Strict Schema Validation:

  • Hardened BAJobListing and BADetailedJob schemas to enforce strict data sanitization on initialization.

  • Added strict validation for external URLs (allowing only well-formed http/https) and reference numbers.

  • API Client Protections:

  • The ArbeitsagenturClient now proactively refuses to execute requests if the requested job reference number contains invalid or unsafe characters.

🧪 Testing & Chores

  • Added comprehensive test suites (test_text_sanitizer.py and test_job_info.py) to verify defense against adversarial payloads, entity-encoded XSS attacks, and malformed HTML.
  • Expanded API client tests to ensure missing fields and HTTP 404 errors from the BA API are handled gracefully without crashing the view.

Full Changelog: v0.1.3...v0.2.0

v0.1.3

Choose a tag to compare

@metimol metimol released this 03 Oct 17:01

Fixed missing dependencies error in pyproject.toml

Full Changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@metimol metimol released this 03 Oct 15:40

Fixed: idle connection error after 6-8 hours of waiting

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@metimol metimol released this 16 Sep 13:45

Add missing dependencies

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@metimol metimol released this 15 Sep 12:14

First release ;)