Publicerat av Per Kristedal — Kristedal Tech AB
Jag jobbar inom rekrytering och tech, och en av de mest tidskrävande uppgifterna är att manuellt gå igenom konsultprofiler och matcha dem mot inkommande jobbförfrågningar från kunder. Det är repetitivt, det tar tid, och det är exakt den typ av problem som AI är gjord för att lösa.
Så jag byggde ett eget system. Från grunden. På mina egna servrar.
Vad systemet gör
Systemet består av två delar som arbetar tillsammans:
Del 1 — CV-konverteraren tar ett CV i PDF-format, skickar det till OpenAI:s API för strukturerad extraktion och skapar både en JSON-profil och ett färdigt CV i företagets grafiska mall. Allt tillgängligt via en webbsida med uppladdningsfunktion.
Del 2 — Jobbbmatcharen hämtar automatiskt inkommande jobbmail från en e-postinkorg, kör varje kandidatprofil mot varje jobbannonsen via en lokal AI-modell, och presenterar resultaten i ett poängsatt dashboard med motiveringar och identifierade gap.
Hela flödet ser ut så här:
Ladda upp CV (PDF)
↓
OpenAI extraherar strukturerad profil (JSON)
↓
Profilen skickas automatiskt till matchningstjänsten
↓
Lokal AI matchar profilen mot alla inkommande jobbannonser
↓
Resultat visas i dashboard med poäng 0–100, motivering och gap
Den tekniska arkitekturen
Systemet körs på min egna Proxmox-server hemma, uppdelat i två isolerade LXC-containrar:
LXC 1 (konverteraren) kör en Flask-applikation som är publikt tillgänglig via en säker omvänd tunnel till en VPS. Här sker PDF-uppladdning, AI-extraktion och generering av färdiga CV-dokument.
LXC 2 (matcharen) är inte publikt tillgänglig. Den hämtar jobbmail via IMAP på ett schemalagt intervall, kör matchningen med en lokal språkmodell via Ollama, sparar resultaten och skickar dem tillbaka till LXC 1.
De två systemen kommunicerar via SSH-nycklar och SCP — inga öppna portar, ingen molntjänst för den känsliga matchningsdatan.
Dashboarden nås via lösenordsskyddad inloggning på en befintlig domän.
Varför lokal AI för matchningen?
Det är ett medvetet val. Kandidatprofilerna innehåller personuppgifter — namn, arbetshistorik, kompetenser. Att skicka den datan till ett externt API för varje matchningskörning vore onödigt ur ett GDPR-perspektiv.
Den lokala modellen (Gemma2 9B via Ollama på ett dedikerat GPU-system) klarar matchningsuppgiften bra. Den returnerar strukturerad JSON med poäng, motivering och identifierade gap för varje kombination av kandidat och jobb.
OpenAI används bara för det steget där kvaliteten verkligen spelar roll — att förstå och strukturera ett oformaterat PDF-CV. Den datan behandlas under ett Data Processing Agreement med EU Standard Contractual Clauses.
GDPR i praktiken
Eftersom systemet behandlar personuppgifter tog jag GDPR-frågorna på allvar redan från start, inte som en eftertanke.
Konkret innebär det:
- Samtycke inhämtas explicit via en kryssruta innan något CV laddas upp
- Integritetspolicy finns tillgänglig direkt på uppladdningssidan
- Registerförteckning (Artikel 30 GDPR) är upprättad för Kristedal Tech AB
- DPA med OpenAI är signerat
- Matchningsdatan lämnar aldrig infrastrukturen — den lokala AI-modellen körs helt på egna servrar
Det är också enkelt att radera en kandidat — ett enkelt terminalkommando tar bort profilen och rensar resultaten på båda systemen.
Vad fungerar bra
Matchningskvaliteten är förvånansvärt bra. Systemet hittar relevanta kopplingar mellan kandidaters bakgrund och jobbkrav, och är tydligt med var det finns gap. Poängsättningen är konsekvent — en junior kandidat mot ett seniorjobb hamnar lågt, en stark matchning landar i 80–90-intervallet.
Att ha allt på en enda domän — CV-konvertering, matchningsdashboard och integritetspolicy — gör det enkelt att visa upp för kunder och kollegor utan att behöva förklara flera olika system.
Nästa steg
Det här är fortfarande en prototyp. Nästa fas handlar om att förfina matchningspromptarna, lägga till stöd för fler kandidater, och utvärdera om systemet kan skalas upp till ett riktigt affärsverktyg inom rekrytering och konsultförmedling.
Om du jobbar inom rekrytering, tech eller HR och är nyfiken på hur det här kan se ut i er verksamhet — hör gärna av dig.
Per Kristedal per@kristedal.se Kristedal Tech AB