Das Textfeld war ohne vorhandenen Thread deaktiviert, sodass die erste Frage (die den Thread erst anlegt) nicht eintippbar war. disabled entfernt; chat.js legt den Thread weiterhin beim ersten Absenden an. Co-Authored-By: Claude <noreply@anthropic.com>
Bewerbungs-Tracker
Ein professioneller Job Application Tracker für Jobcenter Grundsicherung Monatsberichte.
Features
- Benutzerprofile: Speichern Sie Name, Adresse und Jobcenter Kundennummer
- Dunkler Modus: Vollständige Dark Mode Unterstützung mit lokaler Speicherung
- CRUD-Operationen: Komplette Verwaltung von Bewerbungen (Hinzufügen, Bearbeiten, Löschen)
- Filterfunktion: Filterung nach Monat und Jahr
- Statistiken: Übersicht über Gesamtbewerbungen, nach Art und Status
- PDF-Export: Professionelle PDF-Generierung für Jobcenter-Berichte
- KI-Bewerbungsassistent: Indeed-Stellen per Browser-Erweiterung importieren, Status „Entwurf", und automatisch zugeschnittene Bewerbungsunterlagen (Anschreiben & Lebenslauf als PDF) auf Basis eigener Vorlagen erstellen lassen
- Responsive Design: Optimiert für Desktop und Mobile Geräte
KI-Bewerbungsassistent (Indeed → Entwurf mit Unterlagen)
Ablauf:
- Vorlagen hinterlegen – Unter Vorlagen (Kopfzeile) das eigene Standard-Anschreiben und den Lebenslauf als Text einfügen. Diese Basis-Unterlagen sind die Faktengrundlage; die KI erfindet nichts hinzu.
- Stelle importieren – Mit der Browser-Erweiterung (
extension/) auf Indeed den Button „An Bewerbungs-Tracker senden" klicken. - Automatische Verarbeitung – Der Tracker legt die Bewerbung mit Status Entwurf an und generiert im Hintergrund über die Ollama Cloud API zugeschnittene Bewerbungsunterlagen, die als PDF-Anhänge an der Bewerbung hängen.
Konfiguration
Für die KI-Generierung wird ein Ollama-Cloud-API-Schlüssel benötigt
(ollama.com/settings/keys). Am einfachsten über
eine (nicht eingecheckte) .env-Datei – kopiere .env.example nach .env:
cp .env.example .env
# in .env eintragen:
# OLLAMA_API_KEY=...
# OLLAMA_MODEL=gpt-oss:120b # optional, Standard
# OLLAMA_HOST=https://ollama.com # optional; z. B. http://localhost:11434 für lokale Ollama
npm start
Alternativ als Umgebungsvariable: export OLLAMA_API_KEY=....
Ohne Schlüssel wird die Bewerbung trotzdem als Entwurf angelegt; die Generierung schlägt dann kontrolliert mit einem Hinweis fehl und kann später per „Neu generieren" wiederholt werden.
Details zur Erweiterung: siehe extension/README.md.
Technologien
- Backend: Node.js + Express.js
- Datenbank: SQLite
- Frontend: EJS Template Engine, Tailwind CSS (CDN)
- PDF-Generierung: jsPDF + jspdf-autotable (CDN)
Installation
Voraussetzungen
- Node.js (Version 14 oder höher)
- npm oder yarn
Schritte
- Projekt klonen
cd bewerbungs-tracker
- Abhängigkeiten installieren
npm install
- Datenbank-Verzeichnis erstellen
mkdir -p data
Die SQLite-Datenbank wird automatisch beim ersten Start erstellt.
- Server starten
npm start
Für Entwicklung mit automatischem Neuladen:
npm run dev
- Anwendung öffnen
Öffnen Sie Ihren Browser und navigieren Sie zu:
http://localhost:3000
Projektstruktur
bewerbungs-tracker/
├── server.js # Express Server mit API-Routen
├── package.json # Projektabhängigkeiten und Skripte
├── views/
│ ├── index.ejs # Hauptseite
│ └── partials/
│ ├── header.ejs # Kopfzeile mit Dark Mode Toggle
│ └── footer.ejs # Fußzeile
├── public/
│ ├── css/
│ │ └── styles.css # Benutzerdefinierte Styles
│ └── js/
│ └── main.js # Client-seitige Logik
├── data/
│ └── bewerbungen.db # SQLite Datenbank (wird automatisch erstellt)
└── README.md # Dokumentation
Datenbank-Schema
Bewerbungen
| Feld | Typ | Beschreibung |
|---|---|---|
| id | INTEGER PRIMARY KEY | Eindeutige ID |
| datum | DATE | Bewerbungsdatum |
| firma | TEXT | Firmenname |
| stelle | TEXT | Stellenbezeichnung |
| art | TEXT | Art der Bewerbung |
| status | TEXT | Status der Bewerbung |
| notizen | TEXT | Zusätzliche Notizen |
| created_at | DATETIME | Erstellungsdatum |
| updated_at | DATETIME | Letztes Update |
Einstellungen
| Feld | Typ | Beschreibung |
|---|---|---|
| id | INTEGER | Immer 1 (Single Row) |
| name | TEXT | Benutzername |
| adresse | TEXT | Benutzeradresse |
| kundennummer | TEXT | Jobcenter Kundennummer |
Verwendbare Optionen
Art der Bewerbung
- Online-Portal
- Indeed
- StepStone
- Firmenwebsite
- Post
- Initiativbewerbung
- Arbeitsagentur
- Sonstiges
Status
- Gesendet
- Eingangsbestätigung
- Vorstellungsgespräch
- Absage
- Einstellung
- Keine Rückmeldung
API-Endpunkte
GET /
Hauptseite mit allen Bewerbungen
GET /api/settings
Benutzereinstellungen abrufen
POST /api/settings
Benutzereinstellungen speichern
GET /api/bewerbungen
Alle Bewerbungen abrufen (mit Filter: ?month=MM&year=YYYY)
POST /api/bewerbungen
Neue Bewerbung erstellen
PUT /api/bewerbungen/:id
Bewerbung aktualisieren
DELETE /api/bewerbungen/:id
Bewerbung löschen
POST /api/indeed-import
Stelle importieren (von der Browser-Erweiterung genutzt): legt einen Entwurf an und startet die KI-Generierung der Unterlagen. CORS ist für diesen Endpunkt aktiviert.
GET /api/bewerbungen/:id/generierung
Generierungsstatus und aktuelle Anhänge einer Bewerbung abfragen (Polling).
GET /api/basis-dokumente
Hinterlegte Basis-Unterlagen (Vorlagen) abrufen
GET /anhaenge/:id/download
Generierten Anhang (PDF) herunterladen
GET /api/bewerbungen/filter
Bewerbungen mit Filter abrufen
REST-API für Drittanbietersoftware (/api/v1)
Zusätzlich zu den internen Endpunkten gibt es eine eigenständige, versionierte
REST-API unter /api/v1 für externe Software. Sie ist vollständig mit
OpenAPI 3.0 dokumentiert; eine interaktive Swagger-UI läuft unter /swagger,
das Rohdokument unter /swagger.json.
Authentifizierung
Jeder Endpunkt (außer GET /api/v1/health) erfordert einen API-Key im Header
X-API-Key. Der Schlüssel wird über die Umgebungsvariable API_TOKEN konfiguriert
(z. B. in .env, siehe .env.example). Ist API_TOKEN nicht gesetzt, antwortet
die API mit 503 – sie gibt nie ungeschützt Daten heraus. Swagger/UI sind
auch ohne Token erreichbar (die Dokumentation enthält keine sensiblen Daten).
curl -H "X-API-Key: $API_TOKEN" http://localhost:3000/api/v1/applications
Endpunkte
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /api/v1/health |
Verfügbarkeit (ohne Auth) |
| GET | /api/v1/applications |
Bewerbungen auflisten (Filter: month, year, status, art, search, limit, offset) |
| POST | /api/v1/applications |
Bewerbung anlegen (Duplicate-Guard via force) |
| GET | /api/v1/applications/{id} |
Einzelne Bewerbung |
| PUT | /api/v1/applications/{id} |
Bewerbung aktualisieren |
| DELETE | /api/v1/applications/{id} |
Bewerbung löschen |
| GET | /api/v1/applications/{id}/timeline |
Statusverlauf |
| POST | /api/v1/applications/{id}/timeline |
Status-Eintrag hinzufügen |
| DELETE | /api/v1/applications/{id}/timeline/{eintragId} |
Status-Eintrag löschen |
| GET | /api/v1/applications/{id}/attachments |
Generierte Anhänge auflisten |
| GET | /api/v1/applications/{id}/attachments/{attachmentId} |
Anhang (PDF) herunterladen |
| GET | /api/v1/applications/{id}/emails |
E-Mail-Korrespondenz |
| GET | /api/v1/emails/{emailId}/attachments/{attachmentId} |
E-Mail-Anhang herunterladen |
| POST | /api/v1/applications/{id}/generate |
KI-Generierung anstoßen (async, 202) |
| GET | /api/v1/applications/{id}/generation-status |
Generierungsstatus abfragen |
| GET | /api/v1/settings |
Einstellungen abrufen |
| PUT | /api/v1/settings |
Einstellungen speichern |
| GET | /api/v1/statistics |
Statistiken (Gesamt, nach Art/Status) |
| GET | /api/v1/export |
Bewerbungen exportieren (ohne interne Notizen) |
| GET | /api/v1/templates |
Basis-Unterlagen (Vorlagen) |
Die vollständige, maschinenlesbare Dokumentation (Parameter, Schemas,
Fehlerantworten) liegt unter /swagger.json und ist in der Swagger-UI unter
/swagger interaktiv bedienbar (inkl. „Authorize“ zum Eintragen des API-Keys
für Test-Requests).
PDF-Export
Der PDF-Export generiert ein professionelles Dokument mit:
- Benutzerdaten (Name, Adresse, Kundennummer)
- Überschrift mit Monat und Jahr
- Zusammenfassung der Bewerbungsaktivitäten
- Tabelle mit allen Bewerbungen
- Bestätigungstext und Datum
Browser-Unterstützung
- Chrome (empfohlen)
- Firefox
- Safari
- Edge
Dark Mode
Der Dark Mode kann manuell über den Toggle-Button in der Kopfzeile aktiviert werden. Die Einstellung wird in localStorage gespeichert und bleibt beim nächsten Besuch erhalten.
Sicherheit
- Eingabefelder werden gegen XSS geschützt
- SQL-Injection wird durch parametrisierte Abfragen verhindert
- Formulare validieren Pflichtfelder
Lizenz
MIT
Autor
Bewerbungs-Tracker für Jobcenter Grundsicherung
Hinweis: Diese Anwendung ist speziell für die Anforderungen des deutschen Jobcenters (Grundsicherung) entwickelt worden. Sie hilft bei der Dokumentation von Bewerbungsaktivitäten für die monatlichen Berichte.