240 lines
12 KiB
Markdown
240 lines
12 KiB
Markdown
<p align="center">
|
||
<img src="static/img/vacatureradar-logo.svg" width="88" alt="VacatureRadar-logo">
|
||
</p>
|
||
|
||
<h1 align="center">VacatureRadar</h1>
|
||
|
||
<p align="center"><strong>Van vacature-overload naar een kleine, uitlegbare selectie die bij jou past.</strong></p>
|
||
|
||
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.
|
||
|
||

|
||
|
||
## 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 |
|
||
|
||
## Bekijk de volledige productflow
|
||
|
||
De beelden komen uit de lokale demo-omgeving. De getoonde cijfers zijn omgevingsdata, geen marketingclaims. Klik op een beeld voor de volledige resolutie.
|
||
|
||
### 1. Vind de relevante kansen
|
||
|
||
De verkenner brengt zoeken, filters, gerangschikte resultaten en de belangrijkste matchcontext samen. Zo hoef je niet tussen lijst- en detailpagina’s te blijven wisselen.
|
||
|
||
<p align="center">
|
||
<a href="docs/screenshots/readme/matches-dark.png"><img src="docs/screenshots/readme/matches-dark.png" alt="Vacatureverkenner met gerangschikte matches en directe intelligence"></a>
|
||
</p>
|
||
|
||
### 2. Begrijp waarom een vacature past
|
||
|
||
Een analyse maakt score, datakwaliteit, beslissignalen, aandachtspunten en broninformatie afzonderlijk zichtbaar. Ervaring en senioriteitslabels worden als context getoond, niet als verborgen scorefactor.
|
||
|
||
<p align="center">
|
||
<a href="docs/screenshots/readme/job-analysis-dark.png"><img src="docs/screenshots/readme/job-analysis-dark.png" alt="Uitlegbare vacatureanalyse met scorecomponenten en besliscontext"></a>
|
||
</p>
|
||
|
||
### 3. Bouw markt- en werkgeversinzicht op
|
||
|
||
<table>
|
||
<tr>
|
||
<td width="50%"><strong>Skillsradar</strong><br><sub>Vergelijk aantoonbare marktvraag met je profiel, zonder ontbrekende skills als afwijzingsregel te behandelen.</sub></td>
|
||
<td width="50%"><strong>Werkgeversradar</strong><br><sub>Bekijk werkgevers, actieve IT-vacatures, bronnen en eerdere dossiers in één genormaliseerd overzicht.</sub></td>
|
||
</tr>
|
||
<tr>
|
||
<td><a href="docs/screenshots/readme/skills-light.png"><img src="docs/screenshots/readme/skills-light.png" alt="Skillsradar met profieldekking en actuele marktvraag"></a></td>
|
||
<td><a href="docs/screenshots/readme/employers-light.png"><img src="docs/screenshots/readme/employers-light.png" alt="Werkgeversradar met vacature- en broninformatie"></a></td>
|
||
</tr>
|
||
</table>
|
||
|
||
### 4. Volg trajecten op en houd bronnen gezond
|
||
|
||
<table>
|
||
<tr>
|
||
<td width="50%"><strong>Sollicitatiepipeline</strong><br><sub>Bewaar status, deadlines, notities en tijdlijn per dossier; de uiteindelijke sollicitatie blijft altijd handmatig.</sub></td>
|
||
<td width="50%"><strong>Bronnenbeheer</strong><br><sub>Zie policyreview, laatste scans, volgende runs en brongezondheid zonder technische logs te moeten doorzoeken.</sub></td>
|
||
</tr>
|
||
<tr>
|
||
<td><a href="docs/screenshots/readme/applications-dark.png"><img src="docs/screenshots/readme/applications-dark.png" alt="Sollicitatiepipeline met persoonlijke dossiers"></a></td>
|
||
<td><a href="docs/screenshots/readme/sources-light.png"><img src="docs/screenshots/readme/sources-light.png" alt="Bronnenbeheer met policy- en gezondheidsstatus"></a></td>
|
||
</tr>
|
||
</table>
|
||
|
||
### 5. Controleer de radar — ook mobiel
|
||
|
||
<table>
|
||
<tr>
|
||
<td width="72%"><strong>Automation center</strong><br><sub>Volg de echte verwerkingspipeline, bronruns en systeemstatus. Niet-gemeten runtime-informatie blijft expliciet onbekend.</sub></td>
|
||
<td width="28%"><strong>Mobiel zoekprofiel</strong><br><sub>Controleer je persoonlijke radar en navigeer door de kernflow vanaf een smal scherm.</sub></td>
|
||
</tr>
|
||
<tr>
|
||
<td><a href="docs/screenshots/readme/automation-dark.png"><img src="docs/screenshots/readme/automation-dark.png" alt="Automation center met pipeline en bronruns"></a></td>
|
||
<td align="center"><a href="docs/screenshots/readme/profile-mobile-light.png"><img src="docs/screenshots/readme/profile-mobile-light.png" width="240" alt="Mobiel zoekprofiel van VacatureRadar"></a></td>
|
||
</tr>
|
||
</table>
|
||
|
||
## 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.
|
||
|
||
Voor een publieke HTTPS-host configureer je de bestaande `.env` veilig met:
|
||
|
||
```bash
|
||
python scripts/configure_public_url.py \
|
||
https://vacatureradar.example.be \
|
||
--env-file .env \
|
||
--cache-url redis://127.0.0.1:6379/1
|
||
```
|
||
|
||
De publieke URL wordt vervolgens gebruikt voor `ALLOWED_HOSTS`, CSRF, secure cookies en HTTPS-detectie. Gebruik achter Nginx altijd `DJANGO_DEBUG=0`; een debugpagina mag nooit publiek zichtbaar zijn. Hermaak de container na een environmentwijziging.
|
||
|
||
Publiceer poort `1226` niet rechtstreeks op internet. Gebruik een beheerde reverse proxy met TLS en volg [Unraid-deployment](docs/operations/UNRAID_DEPLOYMENT.md) en de concrete [Nginx Proxy Manager-handleiding](docs/operations/NGINX_PROXY_MANAGER.md). Een volledig productievoorbeeld staat in [`deployment/production.env.example`](deployment/production.env.example).
|
||
|
||
## 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 --all-groups
|
||
uv run playwright install chromium
|
||
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 testset, verplichte Chromium-E2E, minimaal 70% branch-aware dekking, documentatie en de taakledger. De browsergate controleert de kernreis, focus, consolefouten en documentoverflow op mobiel, tablet, laptop, desktop, widescreen en ultrawide.
|
||
|
||
## Beheer en deployment
|
||
|
||
- [Lokaal ontwikkelen](docs/operations/LOCAL_DEVELOPMENT.md)
|
||
- [Docker en Unraid uitrollen](docs/operations/UNRAID_DEPLOYMENT.md)
|
||
- [Nginx Proxy Manager configureren](docs/operations/NGINX_PROXY_MANAGER.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)
|
||
- [Professionalisering baseline](docs/audit/BASELINE.md)
|
||
- [Performanceaudit](docs/audit/PERFORMANCE.md)
|
||
- [Finale acceptance](docs/audit/FINAL_ACCEPTANCE.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.
|