
Jobbsøking er stort sett et rot av faner. En CV i Word, et søknadsbrev i en annen fil, en stillingsannonse i nettleseren, og en huskeliste over hvem som skulle ringes tilbake. Søknadsbasen samler det i ett arbeidsrom, og er bygget for å gi ro, ikke for å dytte deg mot å søke mer. Jeg bygger og drifter det alene, som privatperson, uten investorer.
Hva det er
En CV-bygger med maler som er testet mot rekrutteringssystemer, slik at navn, titler og datoer leses riktig maskinelt. Søknadsbrev som skrives i konteksten av stillingen. En pipeline som kanban eller liste, der hver stilling er et kort med oppgaver og frister. Og et stillingssøk bygget på NAVs stillingsfeed, med hele Norge samlet og treffscore regnet ut mot brukerens egen CV. På toppen ligger AI-funksjoner for omskriving, matching og analyse, og en arbeidsgiverside med anonymisert kandidatbase og ATS-pipeline.
Gratis å søke. Pro gir CV-bygger uten vannmerke, AI og treff-matching. Alt lagres i EU, og data selges aldri.
Det tekniske
Søk og fasetter i databasen. Fasett-tellingene er flyttet ned i PostgreSQL: én SQL-funksjon returnerer alle fasettgruppene i ett kall, slik at treffliste og tellinger aldri spriker. Fritekstsøket går på en generert tsvector med norsk snowball-stemming og vekting der tittel teller mer enn arbeidsgiver, som igjen teller mer enn yrke og brødtekst.
Matchemotoren regner harmonisk middel av IDF-vektet ferdighetsdekning og yrkesaffinitet, med norsk tekstnormalisering som håndterer æ, ø, å og sammensatte ord. Det er den som gir treffscoren i stillingssøket og forklarer hvorfor en stilling passer.
CV-score fra en ren regelmotor. Fem underscorer, ingen IO, og vekter utledet slik at mer innhold aldri kan senke totalen. Samme regelmotor brukes til å verifisere AI-en: hvert utkast kjøres gjennom den, konkrete brudd sendes tilbake til modellen, og hvis den ikke konvergerer, leveres beste kandidat merket som uverifisert. Modellen får ikke siste ord.
Sanntids-samskriving på CV som egen Hocuspocus-tjeneste med Yjs, med Supabase Realtime som fallback.
Betaling via Stripe med abonnement, engangskjøp, per sete og AI-kreditter.
Ytelse etter en produksjonshendelse. Styring av connection pool, en global semafor for tunge spørringer og en single-flight-cache med stale-while-revalidate. Fasett-funksjonen over kom ut av samme runde.
Stack
Next.js 16 med React 19 og TypeScript, Tailwind CSS 4, Prisma mot PostgreSQL, Supabase Auth, Yjs og Hocuspocus, Stripe, og Docker på Coolify og Hetzner.