Søknadsbasen
SaaS for Norwegian job seekers that I build and run alone: CV builder, cover letters, pipeline and job search on NAV's feed, with AI verified by a rules engine.

Job hunting is mostly a mess of tabs. A CV in Word, a cover letter in another file, a job listing in the browser, and a to-do list of who was supposed to be called back. Søknadsbasen brings it together in one workspace, and is built to give you calm, not to push you into applying more. I build and run it alone, as a private individual, without investors.
What it is
A CV builder with templates tested against applicant tracking systems, so that names, titles and dates are parsed correctly by machines. Cover letters written in the context of the job. A pipeline as kanban or list, where every job is a card with tasks and deadlines. And a job search built on NAV's job feed, with all of Norway in one place and a match score calculated against the user's own CV. On top sit AI features for rewriting, matching and analysis, and an employer side with an anonymized candidate base and ATS pipeline.
Free to apply. Pro gives you the CV builder without a watermark, AI and match scoring. Everything is stored in the EU, and data is never sold.
The technical side
Search and facets in the database. The facet counts have been pushed down into PostgreSQL: a single SQL function returns all the facet groups in one call, so the result list and the counts never diverge. Full-text search runs on a generated tsvector with Norwegian snowball stemming and weighting where title counts more than employer, which in turn counts more than occupation and body text.
The matching engine calculates the harmonic mean of IDF-weighted skill coverage and occupation affinity, with Norwegian text normalization that handles æ, ø, å and compound words. It's what produces the match score in the job search and explains why a job is a good fit.
CV score from a pure rules engine. Five sub-scores, no IO, and weights derived so that more content can never lower the total. The same rules engine is used to verify the AI: every draft is run through it, concrete violations are sent back to the model, and if it doesn't converge, the best candidate is delivered marked as unverified. The model doesn't get the last word.
Real-time collaborative editing on the CV as a separate Hocuspocus service with Yjs, with Supabase Realtime as fallback.
Payments via Stripe with subscriptions, one-off purchases, per seat and AI credits.
Performance after a production incident. Connection pool management, a global semaphore for heavy queries and a single-flight cache with stale-while-revalidate. The facet function above came out of the same round.
Stack
Next.js 16 with React 19 and TypeScript, Tailwind CSS 4, Prisma against PostgreSQL, Supabase Auth, Yjs and Hocuspocus, Stripe, and Docker on Coolify and Hetzner.
This text is machine translated and has not been reviewed yet.