badrish

The problem

Employer sites and job boards publish opportunities in different formats, with inconsistent location, language, and freshness information. A useful search experience needs more than a collection of scraped titles: it needs normalized records, provenance, and an ingestion process that survives failures.

THE DATA FLOW

01Employer feed adapters02Normalize & deduplicate03Searchable job catalog04Personal application workspace

What I built

Python ingestion adapters bring ATS and public-source records into a Germany-scoped catalog. Source-aware identifiers reduce duplication, while SQLite FTS5 supports local full-text search. A React and FastAPI interface connects discovery to reviewed CV profiles and application tracking.

Reliable background work

The ingestion system uses leased tasks, checkpoints, worker heartbeats, and stale-worker fencing. A worker that stops or loses its lease should not continue writing over newer work. Rate and budget controls keep source requests bounded.

AI where it earns its place

Optional AI features can draft a structured profile from a CV and assist with fit analysis. The person reviews the profile. Routine catalog search and matching can run locally, without making a language-model request for every listing.

Keeping shared and private records separate

Job facts belong in the catalog; CV profiles and application notes belong to the relevant owner. That separation informs the database model, access checks, session handling, and API boundaries.

This is a working independent application. Feed configuration does not guarantee complete or continuously fresh market coverage. No user records or private application data are included in this portfolio.

Contact on LinkedIn ↗