Prosjektgjennomgang · eget produkt

JobTrack

Under utvikling

Et AI-assistert arbeidsrom for jobbsøking — importer en stilling, tilpass CV-en, og følg hver søknad fra søkt til tilbud.

ASP.NET CoreReactEF CoreFastAPIGmail OAuthDocker
jobtrack.local
JobTrack jobb-arbeidsrom: én søknad med detaljer, CV-match og rekruttør-tråd

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.
JobTrack-arkitektur En React-app snakker med et ASP.NET Core-API som lagrer via EF Core med vedlegg på disk, kaller en FastAPI/Ollama AI-tjeneste, og importerer fra det eksterne Gmail-API-et via OAuth2. /api import React SPA nginx · PWA ASP.NET Core API auth · regler · CV-match EF Core + files data · vedlegg AI service FastAPI → Ollama Gmail API eksternt · OAuth2

Viktige valg og avveininger

  1. 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.

  2. 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.

  3. 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

JobTrack Kanban-pipeline med søknader fordelt på stadiene
Pipeline — dra søknader mellom stadier, fra Søkt til Tilbud
JobTrack-dashbord med svarrate, trakt og tid-per-stadium
Dashbord — svarrater, trakt og etterspurte ferdigheter

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.