VacatureRadar logo

VacatureRadar

An explainable, self-hosted job-search assistant for Belgium.

Product tour · Features · Quick start · Deployment

VacatureRadar follows permitted employer sites, ATS pages, feeds and job-alert mailboxes, removes duplicate or irrelevant results, and ranks the remaining opportunities against your own search profile. It helps you discover, compare and track jobs while keeping the final decision with you. It never applies automatically.

Dashboard with fictional demonstration data

Product tour

These captures use a sanitised local demo; the visible counts are sample data.

Ranked matches Explainable job detail
Ranked matches and search filters Job analysis with fit and data-quality signals
Application tracking Source health
Application pipeline Source policy and health

Also explore the skills radar, employer intelligence, automation center and mobile profile.

Features

  • Personal radar: roles, skills, region, travel radius, work model and hard limits.
  • Source-aware ingestion: permitted sources only, URL and redirect validation, normalization and deduplication.
  • Explainable ranking: fit score, data quality, positive evidence and concerns shown separately.
  • Market context: recurring skills and employer activity compared with your profile.
  • Application pipeline: stages, notes, interviews and deadlines, always controlled by the user.
  • Operational visibility: source runs, pipeline status and explicit unknowns when data has not been measured.

External HTML, email and model output are treated as untrusted data. The system does not bypass CAPTCHAs or rate limits, crawl denied sources directly, or send applications without a person.

Run it locally

For a local development demo, install Python 3.12 or 3.13 and uv. Copy .env.example to .env, replace every CHANGE_ME value, leave DATABASE_URL empty for SQLite, then run:

uv sync --frozen --all-groups
uv run python manage.py migrate
uv run python manage.py bootstrap_instance --with-demo
uv run python manage.py runserver 127.0.0.1:8080

Open http://127.0.0.1:8080 and sign in with the admin credentials you set in .env. The bootstrap command loads fictional demo data. Keep this development server local.

Configure your own radar

After exploring the fictional demo, set your actual roles, skills, travel limits and work preferences. Review each source's policy before enabling collection, then inspect source health and a small set of ranked matches. Use the match explanation to distinguish missing data from a genuine mismatch.

Connect a job-alert mailbox only after its permissions and intended account are configured. Keep application dossiers and private notes in your persistent installation, outside Git. Tracking an application stage never sends an application: the user remains responsible for contacting the employer.

How it is built

flowchart LR
    Browser[Server-rendered Django UI] --> App[Django domain services]
    Sources[Permitted sites, feeds and mail] --> Ingest[Policy-aware ingestion]
    Ingest --> App
    App --> DB[(PostgreSQL)]
    App --> Queue[Redis and Celery]
    Queue --> Ingest

Django 5.2 provides the application and UI; PostgreSQL persists production state; Redis and Celery schedule ingestion and background work. Optional Ollama analysis never replaces deterministic filters or source policy. Microsoft 365 mailbox support uses app-only OAuth/XOAUTH2.

Deployment guide

The supplied docker-compose.yml starts web, worker, scheduler, PostgreSQL and Redis services. Before running it, create .env with unique DJANGO_SECRET_KEY, admin and database credentials, set a production DATABASE_URL, and keep DJANGO_DEBUG=0. The Compose file binds port 1226; restrict that port to a trusted interface or firewall and publish through an HTTPS reverse proxy. Persist local/ and PostgreSQL data, then test /health/ready/, backups and restore. Review source-specific terms before enabling any external fetcher.

apps/ contains domain modules, config/ contains Django and Celery configuration, templates/ plus static/ contain the UI, and tests/ contains unit, integration and security checks. See SECURITY.md for vulnerability reporting and LICENSE for the MIT license.

Public-source provenance

This is a reviewed content-only export from a private canonical repository. PUBLIC_SOURCE_MANIFEST.json records the source revision and file hashes; private Git history and operational deployment material are excluded.

S
Description
Opgeschoonde publieke broncode van VacatureRadar
Readme MIT
1.4 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 81.4%
HTML 11.7%
CSS 4.6%
Shell 1.4%
JavaScript 0.7%
Other 0.2%