Der Brief trug bisher nur dieselbe Farbe wie der Lebenslauf, nicht dieselbe Sprache. Jetzt bekommt er denselben Kopf: Name plakativ auf dem Farbband, Ziel- position als solides Badge, Kontaktdaten als weiße Chips mit Icons rechts gestapelt, dazu Konfetti in den Randstreifen. Das Datum ist ein Pastell-Chip neben dem Anschriftfeld statt einer einsamen rechtsbündigen Zeile, der Betreff bekommt Balken und Größe einer Sektionsüberschrift, die Anrede die Akzentfarbe, die Anlagen werden zu Chips, und der getippte Name liegt auf einem Pastell- Streifen wie mit dem Marker gezogen – der Ersatz für die fehlende Handschrift. DIN-5008 bleibt unangetastet: Anschriftfeld, Datum, Betreff, Anrede, Fließtext, Gruß, Unterschrift und Anlagen stehen, wo ein deutscher Leser sie erwartet. Zwei Dinge, die erst im Render auffielen: - Die Konfetti-Punkte saßen in der linken Rinne direkt neben dem Namen und lasen sich als Aufzählungszeichen davor statt als Deko. Sie liegen jetzt rechts; nur ein Funkeln bleibt links, tief im Band und weit weg vom Namen. - Die Kontaktzeile der Fußzeile lief bei langer Anschrift plus langer E-Mail über das Band hinaus und schob sich über die Punkte. Sie skaliert jetzt passend und lässt notfalls die Anschrift weg, damit Telefon und E-Mail lesbar bleiben. suBar las seine Farbe fest aus der Lebenslauf-Palette (t.rc), obwohl der Brief t.lc benutzt – das ging nur gut, weil beide Werte zufällig gleich sind. Die Palette wird jetzt übergeben. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
NextJobs
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 NextJobs 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
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) – trage ihn nach dem ersten Start unter Einstellungen → Ollama Cloud ein.
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.
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
- Entwurf
- Gesendet
- Eingangsbestätigung
- In Bearbeitung
- Interessiert
- Warten auf Rückmeldung
- Warten auf meine Antwort
- Vorstellungsgespräch
- Vertragsverhandlung
- Absage
- Absage von meiner Seite
- 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).
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
NextJobs 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.