Lokale App für den DACH-Bewerbungsmarkt: Aus einem echten Master-Lebenslauf und einer konkreten Stellenanzeige entstehen ein rollenspezifischer, ATS-tauglicher CV und ein Anschreiben — als DOCX, PDF, TXT oder ZIP.
Die App läuft nur auf Ihrem Rechner. Sie schickt Ihre Daten nicht an OpenAI, Google oder ähnliche Dienste. Optional nutzt sie Ollama auf demselben Gerät (beliebiges Modell, das Sie dort installiert haben).
Lizenz: MIT · Plattform: macOS, Windows, Linux · Kein Docker, kein Account, kein API-Key
Sie hinterlegen Ihren Werdegang einmal (Fakten werden gesperrt). Für jede Stelle wählt die App eine Rollensicht (CEO, COO, CFO, CTO, Vertrieb, HR, Projekt, …): andere Reihenfolge, anderes Profil-Summary, andere Betonung — ohne Arbeitgeber, Daten oder Zahlen zu erfinden.
| Ohne diese App | Mit dieser App |
|---|---|
| Ein CV für alle Rollen | Viele Sichten auf dieselben Fakten |
| ChatGPT riskiert erfundene Stationen | FactGuard blockiert Erfindungen |
| Lebenslauf in der Cloud | Daten bleiben lokal (App → Ollama auf localhost) |
-
Python 3.12 (oder neuer)
- macOS (Homebrew):
brew install python@3.12 - Windows: python.org — Häkchen „Add Python to PATH“ setzen
- Linux: Paketmanager, z. B.
python3.12
- macOS (Homebrew):
-
Ollama (kostenlos) — ollama.com
Mindestens ein Sprachmodell (Instruct). Empfehlung für gutes Deutsch/JSON:qwen2.5:7b(schneller, weniger RAM)qwen2.5:14b(stärker, mehr RAM)
Ein Modell reicht: in den Einstellungen „Ein Modell für beides“ wählen.
-
Einen Browser (Chrome, Firefox, Safari, Edge …)
-
Optional: Ihren Lebenslauf als PDF, DOCX, TXT oder Markdown (max. 8 MB). Gescannte PDFs ohne Text gehen in v1 nicht (kein OCR).
Hardware (Richtwert, kein Zwang):
| RAM ca. | Praktisch |
|---|---|
| ab ~8 GB | ein kleines Modell (7B/8B) für alles |
| 16–24 GB | 7B + 14B nacheinander |
| mehr | größeres Modell, wenn Sie wollen |
Laden Sie das Projekt herunter (ZIP oder git clone) und öffnen Sie ein Terminal im Projektordner (dort liegen README.md und der Ordner app/).
cd Pfad/zu/ATS_App_GERTerminal 1 (kann im Hintergrund laufen):
ollama serveWeiteres Terminal — Modell herunterladen (einmalig, kann einige Minuten dauern):
# Empfehlung — eines oder beide:
ollama pull qwen2.5:7b
ollama pull qwen2.5:14b
# Oder jedes andere Instruct-Modell, das Sie bevorzugen, z. B.:
# ollama pull llama3.2
# ollama pull mistralPrüfen, ob Ollama antwortet:
ollama listmacOS / Linux:
python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .envWindows (Eingabeaufforderung oder PowerShell):
py -3.12 -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .envDie Datei .env müssen Sie in der Regel nicht ändern. Standard:
- App nur unter
127.0.0.1(nicht im ganzen Netzwerk). Anderer Host → Start bricht ab, außer Sie setzen bewusstAPP_ALLOW_NONLOCAL=true. - Ollama unter
http://127.0.0.1:11434
Mit aktivierter Umgebung (.venv):
uvicorn app.main:app --host 127.0.0.1 --port 8000Im Browser öffnen:
Die App beenden: im Terminal Ctrl+C (Windows: Strg+C).
- Linke Seite → Einstellungen
- Prüfen: Status Ollama = connected (grün/ohne Warnung)
- Modell fast und Modell strong wählen
- Beide dürfen gleich sein („Ein Modell für beides“)
- Fehlt ein Modell: gelber Hinweis + Befehl
ollama pull …
- Speichern
Hinweis zu Cloud-Modellen in Ollama:
Manche Ollama-Tags laufen nicht auf Ihrem PC, sondern Ollama leitet sie weiter. Die App blockiert das nicht. Dann verlassen die Daten den Rechner über Ollama, nicht über einen zweiten Cloud-Client in dieser App. Ein Banner weist darauf hin.
- Menü Master-CV
- Datei hochladen oder Text einfügen
- Hochladen und Text lesen → Rohtext prüfen
- Fakten prüfen / sperren
- Optional: „Mit Ollama strukturieren“ (braucht starkes Modell)
- Oder JSON manuell korrigieren / Fixture nur zum Testen
- Entwurf speichern, dann Fakten sperren
- Ab jetzt: umsortieren und umformulieren ja, erfinden nein
- Optional: Export → Master roh als DOCX/PDF/TXT (ohne Rollensicht)
Tipp zum Testen ohne eigenen CV: Auf der Master-CV-Seite „Fixture-Master laden“ (fiktive Person Alex Morgenstern).
- Menü Stellen → Anzeige einfügen oder Datei laden
- Analysieren
- Erkannte Rolle prüfen (z. B. COO vs. CEO)
- Bei Bedarf Rolle manuell überschreiben
- Rolle übernehmen und Plan öffnen
Sie sehen einen Vorschlag, keine Blackbox:
- Reihenfolge der Stationen (per Drag & Drop änderbar)
- Stationen ausblenden
- Richtung des Profiltexts (Summary)
- Keywords: vorhanden / Lücke (Lücken werden nicht erfunden)
- Warnungen (z. B. „Titel bleibt Geschäftsleitung Operations“)
Optional: Als Rollenprofil speichern (z. B. „COO Logistik“ für später).
Dann: Plan bestätigen und weiter.
- CV + Anschreiben erzeugen (oder nur CV / nur Anschreiben)
- Status Guard OK = FactGuard hat keine erfundenen Arbeitgeber/Zahlen gefunden
- Master vs. Rolle vergleichen — gesperrte Fakten links, rollenspezifische Sicht rechts
- Download: DOCX / PDF / TXT
- ZIP = Bewerbungsmappe mit beiden Dokumenten + kurzer
INHALT.txt
Empfehlung für ATS (Personio, SuccessFactors, Softgarden, …):
→ DOCX hochladen. PDF zusätzlich für Menschen im Versand.
- App + Ollama starten
- Neue Stelle einfügen
- Rolle und Plan in 1–2 Minuten bestätigen
- Generieren → Vergleich prüfen → ZIP
- Auf Übersicht den Bewerbungsstatus setzen (offen / eingereicht / Interview / …)
Der Master-CV bleibt gesperrt, bis Sie bewusst neu ableiten.
| Menü | Zweck |
|---|---|
| Übersicht | Master-CVs, Bewerbungstabelle mit Status, Ollama |
| Master-CV | Upload, Fakten, Schloss, Export roh |
| Stellen | Anzeige → Rolle → Plan → Review → Vergleich |
| Profile | Gespeicherte Rollensichten (keine zweiten Biografien) |
| Einstellungen | Ollama-Host, Modelle, Backup/Restore-ZIP, alle Daten löschen |
- Die App bindet nur 127.0.0.1. Ein anderer Host startet nicht, außer
APP_ALLOW_NONLOCAL=true. - Formulare sind CSRF-geschützt (lokales Token).
- Kein eingebauter OpenAI-/Anthropic-/xAI-Client, keine Telemetrie.
- Einziger Netz-Kontakt der App: Ollama (meist localhost).
- Uploads und Ergebnisse liegen unter
data/auf Ihrer Festplatte. - Einstellungen → Daten: Backup-ZIP (optional mit Passwort) und Restore.
- Einstellungen → Alle Bewerberdaten löschen (Bestätigungswort
LOESCHEN) löscht DB, Uploads und Generierungen unwiderruflich.
- Läuft
ollama serve? - Einstellungen: Host =
http://127.0.0.1:11434 - Browser neu laden
Die App bleibt ohne Ollama lesbar (alte Dokumente, Fakten). Generieren mit LLM braucht Ollama; der Hybrid-Pfad (Heuristik + Vorlagen) kann vieles auch ohne starkes Modell.
ollama pull NAME-DES-MODELLSDanach in den Einstellungen neu wählen und speichern.
- Datei zu groß? Max. 8 MB
- Erlaubt: .pdf .docx .md .txt
- Scan-PDF ohne Text → in v1 nicht unterstützt → DOCX oder Klartext nutzen
Die App darf standardmäßig nur auf 127.0.0.1 lauschen. Bewusst im Netz: in .env APP_ALLOW_NONLOCAL=true setzen — dann sind Bewerberdaten im LAN erreichbar.
Einstellungen → Daten → Backup-ZIP. Auf dem Zielrechner Restore aus derselben ZIP. Optional Passwort (AES).
uvicorn app.main:app --host 127.0.0.1 --port 8001Dann im Browser http://127.0.0.1:8001 öffnen.
py -3.12stattpython- Nach
activatesolltepipunduvicornim venv liegen - Ausführungspolitik in PowerShell: ggf.
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Normale Modelle brauchen oft 30–90 Sekunden. Fortschritt läuft schrittweise. Ein Request gleichzeitig (bewusst, wegen RAM).
- Keine Jobbörsen, kein LinkedIn-Scraping, kein automatischer Versand
- Kein Multi-User-Login / keine Cloud-Sync
- Kein erzwungenes Foto, Geburtsdatum oder Familienstand im ATS-Output (AGG)
- Kein „schöner erfundener“ Lebenslauf
| Pfad | Inhalt |
|---|---|
app/ |
Anwendungscode |
spec/ |
Produktvertrag, Meilensteine, Prompts, Schemas |
tests/ |
pytest |
AGENTS.md |
Anweisungen für Coding-Agents |
source .venv/bin/activate # Windows: .venv\Scripts\activate
PYTHONPATH=. pytest -qSpec-Karte: spec/README.md · Vertrag: spec/MASTERPLAN.md
Local single-user web app for German/Austrian/Swiss job applications: one locked master CV, role-specific views (CEO, COO, CFO, CTO, …), application dashboard, side-by-side compare, backup ZIP. ATS-safe DOCX/PDF/TXT/ZIP. The app talks only to your Ollama on localhost (any tag you install). No cloud SDK inside the app. No Docker. No API key. Loopback bind is enforced.
- Install Python 3.12 + Ollama + pull any instruct model
python3.12 -m venv .venv→ activate →pip install -r requirements.txt→cp .env.example .envuvicorn app.main:app --host 127.0.0.1 --port 8000- Open http://127.0.0.1:8000 → Settings (pick models) → upload CV → lock facts → paste job → confirm plan → generate → ZIP
If you use an Ollama cloud tag, data may leave the machine via Ollama — your choice.
- Fehler und Ideen: GitHub Issues des Repos
- Pull Requests willkommen (Tests grün halten)
- Keine echten Lebensläufe ins Repository committen — nur die fiktiven Fixtures unter
spec/fixtures/
Viel Erfolg bei der Bewerbung — mit echten Fakten, klarer Rolle, lokal.