KeinplanKarriere is an AI agent for the German tech job market. It gathers postings from four job boards, ranks each one against your real experience with an explainable score, and drafts a tailored CV and cover letter for the ones worth your time.
It prepares the application — you press submit. This is not an auto-apply bot (why that matters).
Anyone who has job-hunted in Germany knows the drill. Three things make it exhausting — and all three are automatable without taking a human out of the loop.
The same role is posted on LinkedIn, StepStone, Xing and the Arbeitsagentur — so you search four sites and read the same job four times.
Every serious application means rewriting your CV and cover letter for that specific posting. 30–60 minutes, each time.
You never find out which skills the market actually wants, or which kind of application got you a reply.
The usual outcomes are both bad: fire off generic applications everywhere, or burn out perfecting three.
Four stages. Each one is useful on its own, and each feeds the next.
Search once from the dashboard; it queries four boards in parallel, pulls the full description of every posting, tags the skills, and merges duplicates across boards into one entry.
Every job gets a 0–100 score against your experience and preferences, with the breakdown shown. The strongest candidates get a second, AI-written verdict that explains itself.
One click builds a CV rewritten for that job — keeping all your experience, rephrased to the posting — plus a matching cover letter, both as compiled PDFs, with the apply link and a checklist.
Mark a job as interview or offer and the agent learns: jobs sharing those skills rise in the ranking, and the AI scorer is told what has been working for you.
Grounded in you, not invented. You upload your CV once; the AI parses it into a reviewed experience base — and you confirm every entry before it is saved. Every score and every generated document is built from that. The agent never invents an employer, a date or a technology you don't have.
Real screens from the running app. It advances on its own — or click a step to jump.
This was the hardest product decision in the project, and the answer shaped the whole apply flow.
Auto-submitting to job boards violates their terms of service, requires storing your login credentials, and breaks the moment a form or bot-check changes.
An application sent without a human read is exactly the low-effort spam that recruiters filter out. Volume is not the bottleneck — quality per application is.
The Apply Assistant: tailored CV, cover letter, the posting link and a pre-submit checklist, prepared in one click. You review and send in seconds — with full control over what goes out.
Same time saved. None of the risk — and nothing leaves your hands without you seeing it.
Deliberately hybrid: cheap deterministic logic does the bulk of the work, and the language model is reserved for genuine judgment.
Instant, free and reproducible. Weighted components, always visible in the UI:
Skills measures the share of the job's requirements you cover — so adding experience can only ever raise a score, never lower it.
The best rule-scored jobs go to the language model, which reads the posting and your actual experiences, re-scores 0–100, and writes a one-line justification you can argue with.
Cost control: each score is fingerprinted from its inputs. Re-running a scoring pass reuses cached verdicts for unchanged jobs — a repeat run costs zero API calls.
Resilience: if the model provider retires or fails a model mid-request, selection re-resolves against the live catalogue and retries; if the AI is unavailable, the rule score still stands.
A curated taxonomy of ~70 technologies with their aliases (React / ReactJS / React.js → one skill), matched with word-boundary regexes so “Java” never matches inside “JavaScript”. German and English.
Titles and companies are normalised (gender markers like (m/w/d), legal suffixes, punctuation stripped) then compared with difflib similarity. Above threshold, entries merge and record “also on”.
Your LaTeX résumé is rewritten per job, then compiled to PDF with Tectonic. If a tailored version fails to compile, it retries, then falls back to your known-good template — you always get a valid PDF.
One Docker image: a FastAPI backend that also serves the built React dashboard, an embedded SQLite database, and a LaTeX engine for documents.
Every browser gets its own jobs, experiences, documents and settings, keyed by a cookie. Nothing is shared between visitors, and idle workspaces are purged with their generated files.
Scraping, scoring, parsing and document generation all run through a single worker. Several people can use it at once on modest hardware without the machine falling over.
Visitors paste their own LLM key (Groq, OpenRouter, Kisski, …), so no credentials are shared and the host pays nothing. Search, dedup and rule-based ranking work with no key at all.
Everything ships in a single Docker image — API, dashboard and the LaTeX engine. No local Python, Node or TeX install needed.
It runs on your machine by design: the agent scrapes job boards from your address, keeps your CV and documents on your disk, and uses your own AI key. That is deliberately not something to centralise on someone else's server.
# 1 · clone git clone https://github.com/Aminebenbelaid/KPK-agent.git cd KPK-agent # 2 · configure (copy the template, set your keys) cp .env.example .env # 3 · run docker compose up -d --build # 4 · open http://localhost:8000
First run downloads the LaTeX packages it needs and caches them, so the first CV takes a little longer than the rest.
Without an AI key, search, deduplication and rule-based ranking still work — only the generative features need one.
Each sprint ended with something that ran, not a prototype in a branch.