# 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: 1. **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. 2. **Stelle importieren** – Mit der Browser-Erweiterung (`extension/`) auf Indeed den Button **„An Bewerbungs-Tracker senden"** klicken. 3. **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 Alle Einstellungen (Ollama, E-Mail, Kalender, REST-API) werden in der Weboberfläche unter **„Einstellungen“** (`/einstellungen`, Zahnrad-Symbol im Header) gepflegt und in der Datenbank gespeichert. Änderungen wirken sofort, ein Neustart ist nicht nötig. Für die KI-Generierung wird ein Ollama-Cloud-API-Schlüssel benötigt ([ollama.com/settings/keys](https://ollama.com/settings/keys)) – trage ihn nach dem ersten Start unter **Einstellungen → Ollama Cloud** ein. ```bash npm start # dann im Browser http://localhost:3000/einstellungen öffnen ``` Bestehende Installationen, die bisher eine `.env`-Datei nutzen, werden beim ersten Start einmalig in die Datenbank migriert; danach wird `.env` nicht mehr benötigt. 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`](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 1. **Projekt klonen** ```bash cd bewerbungs-tracker ``` 2. **Abhängigkeiten installieren** ```bash npm install ``` 3. **Datenbank-Verzeichnis erstellen** ```bash mkdir -p data ``` Die SQLite-Datenbank wird automatisch beim ersten Start erstellt. 4. **Server starten** ```bash npm start ``` Für Entwicklung mit automatischem Neuladen: ```bash npm run dev ``` 5. **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 - E-Mail - 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 unter **Einstellungen → REST-API** (`API_TOKEN`) konfiguriert. 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). ```bash 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.