Prosjektgjennomgang · eget produkt
JobTrack
Under utviklingEt AI-assistert arbeidsrom for jobbsøking — importer en stilling, tilpass CV-en, og følg hver søknad fra søkt til tilbud.
TL;DR
- Hva
- Fullstack arbeidsrom for jobbsøking: pipeline, CV-match, Gmail-tråder, vedlegg og analyse.
- Hvorfor
- Et ekte problem — min egen jobbsøking trengte skikkelig verktøy, ikke et regneark.
- Stack
- React + ASP.NET Core (EF Core) · FastAPI/Ollama lokal AI · Gmail OAuth · Docker.
- Rolle
- Alt: produkt, backend, frontend, drift og sikkerhet.
Problem og kontekst
En seriøs jobbsøking sprer seg over regneark, e-posttråder, notatapper og løse dokumenter. Ingenting viser deg med ett blikk hvilke søknader som trenger oppfølging, eller hva som sist ble sagt. Jeg ville ha ett samlet arbeidsrom — fra import av en stilling til endelig tilbud — bygget til samme standard som jeg leverer på jobb.
Arkitektur
En React + TypeScript-SPA snakker med et ASP.NET Core-API som eier domenelogikken — pipeline, oppfølgingsregler, CV-nøkkelordmatch — og lagrer via EF Core med vedlegg på disk. En liten FastAPI-tjeneste med en lokal Ollama-modell skriver utkast til CV, søknadsbrev og oppfølging, og API-et importerer korrespondanse fra Gmail-API-et via OAuth2. Alt kjører bak én Docker Compose-fil.
- Pipeline: et Kanban-brett — Søkt, Venter, Intervju, Tilbud, Avslått, Ghostet — dra for å oppdatere.
- CV-match: deterministisk nøkkelorddekning (treff vs. mangler), ikke en svart boks.
- Gmail: importer hele tråder via OAuth2; koblede tråder oppdateres automatisk på riktig jobb.
- AI-en er assisterende, aldri autonom: den skriver utkast, du gjennomgår og sender — ingen auto-søking.
Viktige valg og avveininger
-
01 Kjøre AI-en lokalt med Ollama i stedet for et sky-API.
alt: Et hostet LLM-API hadde vært raskere å koble til.
Jobbsøkerdata er sensitivt, og jeg ville ha null kostnad per kall og ingen tredjepart i loopen. Avveiningen er mer oppsett og tyngre lokale ressurser — greit for et egendriftet verktøy.
-
02 Gjøre CV-matchen deterministisk, ikke en AI-score.
alt: La modellen vurdere treffet.
Et tall du ikke kan etterprøve er ubrukelig. Deterministisk nøkkelorddekning viser nøyaktig hvilke ord som traff og hvilke som mangler, så rådet er ærlig og handlingsrettet.
-
03 Levere PWA-en uten offline-cache i service-workeren.
alt: En cache ville gitt full offline-bruk.
Jeg ruller ut ofte, så en aggressiv cache risikerer å servere utdaterte bygg — en verre feil enn et kort offline-hull. Manifestet gir fortsatt installerbarhet og share-to-capture. En bevisst anti-funksjon.
Sikkerhet og drift
- Valgfri Google-innlogging (Google ID-tokens) beskytter API-et; hver post er knyttet til sin eier.
- Filopplastinger valideres og lagres per søknad, med eierskapssjekk ved hvert tilgangspunkt.
- AI-laget er kun rådgivende — det skriver utkast, det sender aldri og søker aldri automatisk.
- Kjører som en reproduserbar Docker Compose-stack med dokumentert .env; JSON/CSV-eksport for dataportabilitet.
Skjermbilder
Status og veien videre
Under aktiv utvikling. Oppfølgingsreglene er enkel datologikk jeg vil gjøre konfigurerbar per stadium; neste steg er skikkelige integrasjonstester rundt kanttilfellene i Gmail-importen og strammere forankring av AI-utkastene nå som jeg har ekte bruk å lære av.