# VacatureRadar **Van vacature-overload naar een kleine, uitlegbare selectie die bij jou past.** VacatureRadar is een persoonlijke vacature-assistent voor België. De applicatie volgt toegestane werkgeversbronnen, ATS-pagina’s, feeds en vacaturemails, verwijdert dubbels en irrelevante resultaten en rangschikt de overblijvende kansen tegen jouw zoekprofiel. Jij behoudt altijd de controle: VacatureRadar helpt zoeken en opvolgen, maar solliciteert nooit automatisch. ![Dagoverzicht van VacatureRadar in licht thema](docs/screenshots/readme/dashboard-light.png) ## Voor wie is dit? VacatureRadar is bedoeld voor één persoon of een eigen, afgeschermde installatie die: - meerdere vacaturebronnen wil volgen zonder iedere site dagelijks te openen; - alleen aantoonbaar relevante vacatures wil beoordelen; - wil begrijpen waarom een vacature wel of niet past; - sollicitaties, deadlines en opvolging op één plek wil bewaren; - lokale controle over profiel-, vacature- en brondata belangrijk vindt. ## Zo gebruik je VacatureRadar 1. **Stel je radar in.** Kies rollen, skills, regio, afstand, werkmodel en harde grenzen. 2. **Laat toegestane bronnen verwerken.** De radar ontdekt, haalt op, normaliseert en dedupliceert vacatures volgens bronbeleid en SSRF-beveiliging. 3. **Beoordeel de beste signalen.** Iedere match toont score, datakwaliteit, positieve signalen en aandachtspunten. 4. **Leer van de markt.** De Skillsradar laat zien welke technologieën terugkomen en waar je profiel dekking heeft. 5. **Volg acties op.** Bewaar interessante vacatures, beheer sollicitatiedossiers en houd gesprekken en deadlines bij. 6. **Controleer de werking.** Het Automation center maakt bronruns, pipelinegezondheid en onbekende runtime-informatie zichtbaar. ## Wat zit erin? | Onderdeel | Wat je eraan hebt | |---|---| | Dagoverzicht | Prioriteiten, beste matches, open trajecten en radarstatus in één beeld | | Vacatureverkenner | Zoeken en filteren met een uitlegbare detailanalyse naast de resultaten | | Skillsradar | Actuele marktvraag naast de skills uit je eigen profiel | | Sollicitatiepipeline | Dossiers, status, notities, deadlines en een auditbare tijdlijn | | Bronnenbeheer | Veilige bronconfiguratie, gezondheid, handmatige import en mailboxkoppelingen | | Automatisering | Eerlijke 24-uursmetingen; niet-gemeten informatie blijft expliciet onbekend | ## Productbeelden De beelden hieronder komen uit de lokale demo-omgeving. De getoonde cijfers zijn omgevingsdata, geen marketingclaims. | Vacatureverkenner | Automatisering | |---|---| | ![Vacatureverkenner met gerangschikte matches en detailanalyse](docs/screenshots/readme/matches-dark.png) | ![Automation center met verwerkingspipeline en brongezondheid](docs/screenshots/readme/automation-dark.png) |

Mobiel zoekprofiel van VacatureRadar

## Snel starten ### Optie 1 — lokale demo Vereisten: Python 3.12 of 3.13, [`uv`](https://docs.astral.sh/uv/) en Git Bash op Windows. ```bash ./scripts/codex_bootstrap.sh uv run python manage.py runserver 0.0.0.0:8080 ``` Open daarna [http://127.0.0.1:8080](http://127.0.0.1:8080). Wanneer het bootstrap-script de ontwikkelomgeving heeft aangemaakt, kun je lokaal aanmelden met: ```text admin / codex-local-only ``` Het bootstrap-script maakt zo nodig `.env`, installeert de gelockte dependencies, voert migraties uit, laadt veilige demodata en draait de kwaliteitsgates. Deze tijdelijke login is uitsluitend voor lokale ontwikkeling; wijzig of verwijder hem voordat de installatie vanaf een ander toestel bereikbaar is. ### Optie 2 — Docker Compose Vereisten: Docker met Compose v2 en Bash. ```bash APP_HOST=localhost APP_SCHEME=http bash scripts/deploy_docker.sh ``` Open daarna [http://127.0.0.1:1226](http://127.0.0.1:1226). Het deployscript vult ontbrekende lokale `.env`-waarden met sterke gegenereerde defaults, start PostgreSQL, Redis, Django, de worker en scheduler en controleert de health-endpoints. ```text http://127.0.0.1:1226/health/ready/ http://127.0.0.1:1226/health/live/ ``` Gebruik voor een bestaande installatie geen nieuwe gegenereerde `.env`: bewaar de huidige secrets en databasegegevens. Zie [lokale ontwikkeling](docs/operations/LOCAL_DEVELOPMENT.md) of [Unraid-deployment](docs/operations/UNRAID_DEPLOYMENT.md) voor het volledige pad. ## Eerste configuratie Na de eerste login: 1. Open **Zoekprofiel** en stel regio, radius, rollen, skills en werkvoorkeuren in. 2. Open **Bronnen** en activeer alleen bronnen waarvan beleid en voorwaarden beoordeeld zijn. 3. Configureer optioneel een eigen vacaturemailbox; credentials worden niet in de repository opgeslagen. 4. Controleer **Automatisering** voordat je op onbemande verwerking vertrouwt. 5. Verifieer in productie altijd HTTPS, back-ups, herstel en healthchecks. Belangrijke productie-instellingen: ```dotenv APP_HOST=vacatures.example.be APP_SCHEME=https DJANGO_DEBUG=0 SESSION_COOKIE_SECURE=1 CSRF_COOKIE_SECURE=1 SECURE_SSL_REDIRECT=1 ``` Publiceer poort `1226` niet rechtstreeks op het internet. Gebruik een beheerde reverse proxy met TLS en volg de checklist in [UNRAID_DEPLOYMENT.md](docs/operations/UNRAID_DEPLOYMENT.md). ## Eerlijke grenzen VacatureRadar: - logt niet automatisch in op vacaturesites en omzeilt geen CAPTCHA of rate limit; - crawlt denylistplatformen niet rechtstreeks; - behandelt HTML, e-mail en modeloutput altijd als onbetrouwbare data; - laat iedere URL en redirect door bronbeleid en SSRF-validatie gaan; - past deterministische harde regels toe vóór optionele AI-analyse; - verstuurt nooit automatisch een sollicitatie; - toont ontbrekende of niet-gemeten informatie als onbekend in plaats van die te simuleren. Lees vóór productiegebruik [SECURITY.md](SECURITY.md) en het [threat model](docs/quality/THREAT_MODEL.md). ## Ontwikkelen en verifiëren De kern is een server-rendered Django 5.2-modulaire monoliet met PostgreSQL, Redis/Celery en een lokale dark/light-interface zonder runtime-CDN of SPA-afhankelijkheid. SQLite wordt gebruikt voor lokale tests. ```bash uv sync --frozen uv run python manage.py migrate uv run python manage.py runserver 0.0.0.0:8080 ``` Voer vóór iedere oplevering de volledige gate uit: ```bash ./scripts/codex_verify.sh ``` Die controleert formatting, lint, Django-configuratie, migraties, de volledige offline testset, minimaal 70% branch-aware dekking, documentatie en de taakledger. Bij wijzigingen aan de frontend controleer je daarnaast toetsenbordgebruik, dark/light en minimaal 360 px plus een gangbare desktopbreedte. ## Beheer en deployment - [Lokaal ontwikkelen](docs/operations/LOCAL_DEVELOPMENT.md) - [Docker en Unraid uitrollen](docs/operations/UNRAID_DEPLOYMENT.md) - [Push-to-deploy met Gitea](docs/operations/GITEA_DEPLOYMENT.md) - [Operationeel runbook](docs/operations/RUNBOOK.md) - [Back-up en herstel](docs/operations/BACKUP_RESTORE.md) Een overdrachtsarchief zonder secrets, lokale databases of caches maak en controleer je met: ```bash uv run python scripts/package_project.py ../VacatureRadar_Project.zip uv run python scripts/verify_package.py ../VacatureRadar_Project.zip ``` ## Repositorykaart ```text apps/ Django-domeinen en bedrijfsservices config/ Django- en Celery-configuratie config-data/ Bronbeleid en gesaneerde voorbeeldconfiguratie fixtures/ Deterministische externe testformaten templates/ + static/ Server-rendered productinterface docs/ Product-, ontwerp-, security- en operationele documentatie deployment/unraid/ Unraid-installatiebestanden scripts/ Bootstrap, verificatie, deployment, back-up en beheer tests/ Unit-, integratie-, security- en browsertests ``` Belangrijke ingangen voor bijdragers en onderhoudsagents: - [Bijdragen](CONTRIBUTING.md) - [Projectstart voor Codex](CODEX_START_HERE.md) - [Architectuur](docs/architecture/SYSTEM_ARCHITECTURE.md) - [UX- en designcontract](docs/design/STITCH_FRONTEND_CONTRACT.md) - [Teststrategie](docs/quality/TEST_STRATEGY.md) - [Actuele projectstatus](docs/ai/PROJECT_STATE.md) - [Machineleesbare backlog](docs/ai/BACKLOG.yaml) ## Licentie De broncode valt onder de [MIT-licentie](LICENSE). Controleer voor iedere externe vacaturebron afzonderlijk de voorwaarden, robotsregels, databankrechten en toepasselijke wetgeving. Het project levert technisch bronbeleid, geen juridisch advies.