Files
jobbi-bewerbung/README.md
T
thomasandClaude 97b48f9841 Einstellungen-Seite: .env-Werte in DB (app_state), keine .env mehr
Neue /einstellungen-Seite (Zahnrad im Header) mit allen bisherigen .env-Werten
(Ollama, E-Mail, CalDAV, REST-API), gespeichert in SQLite (app_state, cfg:-Prefix).
Libs lesen per lib/config.js zur Laufzeit statt beim Start -> Aenderungen
wirken sofort, kein Neustart. Bestehende .env wird beim ersten Start einmalig
migriert.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-13 20:57:31 +02:00

297 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.