Refactor UI/views, rework Docker build, untrack local data
- Views umstrukturiert: einstellungen.ejs -> bewerbung.ejs, neues partials/head.ejs, header/footer/index angepasst - CSS umbenannt: style.css -> styles.css - server.js und public/js/main.js ueberarbeitet - Dockerfile auf schlankes Multi-Stage-Setup umgestellt; docker-compose.yml und .dockerignore entfernt - npm-Scripts docker:build/push/deploy ergaenzt - SQLite-DB und .idea aus Git entfernt und via .gitignore ignoriert Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,110 +1,194 @@
|
||||
# Bewerbungs-Tracker
|
||||
|
||||
Lokale Web-Anwendung zur Verwaltung von Stellenbewerbungen – optimiert für die monatliche Nachweispflicht beim Jobcenter (Grundsicherung / Bürgergeld).
|
||||
Ein professioneller Job Application Tracker für Jobcenter Grundsicherung Monatsberichte.
|
||||
|
||||
## Funktionen
|
||||
## Features
|
||||
|
||||
- **Bewerbungen verwalten** – Anlegen, Bearbeiten, Löschen
|
||||
- **Monatsansicht** – Filter nach Monat und Jahr
|
||||
- **Statistiken** – Gesamt, Positiv, Absagen, Ausstehend
|
||||
- **PDF-Export** – Professionelles Dokument mit Ihren Daten für das Jobcenter
|
||||
- **Dunkelmodus** – Standard oder per Schalter umschaltbar
|
||||
- **Datenschutz** – Alle Daten bleiben lokal auf Ihrem Rechner (SQLite)
|
||||
- **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
|
||||
- **Responsive Design**: Optimiert für Desktop und Mobile Geräte
|
||||
|
||||
## 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 ≥ 18 (https://nodejs.org)
|
||||
- npm (im Lieferumfang von Node.js)
|
||||
- Build-Tools (für `better-sqlite3`):
|
||||
- **Linux/Mac:** `build-essential` / Xcode Command Line Tools
|
||||
- **Windows:** `windows-build-tools` oder Visual Studio Build Tools
|
||||
- Node.js (Version 14 oder höher)
|
||||
- npm oder yarn
|
||||
|
||||
### Schritte
|
||||
|
||||
1. **Projekt klonen**
|
||||
```bash
|
||||
# 1. In das Projektverzeichnis wechseln
|
||||
cd bewerbungs-tracker
|
||||
```
|
||||
|
||||
# 2. Abhängigkeiten installieren
|
||||
2. **Abhängigkeiten installieren**
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
# 3. Server starten
|
||||
3. **Datenbank-Verzeichnis erstellen**
|
||||
```bash
|
||||
mkdir -p data
|
||||
```
|
||||
|
||||
Die SQLite-Datenbank wird automatisch beim ersten Start erstellt.
|
||||
|
||||
4. **Server starten**
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
Die Anwendung ist dann unter **http://localhost:3000** erreichbar.
|
||||
|
||||
### Entwicklungsmodus (Auto-Reload)
|
||||
|
||||
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 allen Routen
|
||||
├── package.json
|
||||
├── server.js # Express Server mit API-Routen
|
||||
├── package.json # Projektabhängigkeiten und Skripte
|
||||
├── views/
|
||||
│ ├── index.ejs # Übersichtsseite
|
||||
│ ├── einstellungen.ejs # Einstellungsseite
|
||||
│ ├── index.ejs # Hauptseite
|
||||
│ └── partials/
|
||||
│ ├── header.ejs # HTML-Head + Navigation
|
||||
│ └── footer.ejs # Abschlusselemente + Scripts
|
||||
│ ├── header.ejs # Kopfzeile mit Dark Mode Toggle
|
||||
│ └── footer.ejs # Fußzeile
|
||||
├── public/
|
||||
│ ├── css/style.css # Tailwind-Utility-Klassen
|
||||
│ └── js/main.js # Dark Mode, Modals, PDF-Generierung
|
||||
└── data/
|
||||
└── bewerbungen.db # SQLite-Datenbank (wird automatisch erstellt)
|
||||
│ ├── css/
|
||||
│ │ └── styles.css # Benutzerdefinierte Styles
|
||||
│ └── js/
|
||||
│ └── main.js # Client-seitige Logik
|
||||
├── data/
|
||||
│ └── bewerbungen.db # SQLite Datenbank (wird automatisch erstellt)
|
||||
└── README.md # Dokumentation
|
||||
```
|
||||
|
||||
## Datenbank-Schema
|
||||
|
||||
```sql
|
||||
-- Bewerbungen
|
||||
CREATE TABLE bewerbungen (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
datum DATE NOT NULL,
|
||||
firma TEXT NOT NULL,
|
||||
stelle TEXT NOT NULL,
|
||||
art TEXT,
|
||||
status TEXT,
|
||||
notizen TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
### Bewerbungen
|
||||
|
||||
-- Benutzerprofil (wird im PDF verwendet)
|
||||
CREATE TABLE settings (
|
||||
id INTEGER PRIMARY KEY CHECK (id = 1),
|
||||
name TEXT,
|
||||
adresse TEXT,
|
||||
kundennummer TEXT
|
||||
);
|
||||
```
|
||||
| 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
|
||||
|
||||
### GET /api/bewerbungen/filter
|
||||
Bewerbungen mit Filter abrufen
|
||||
|
||||
## PDF-Export
|
||||
|
||||
1. Öffnen Sie **Einstellungen** und tragen Sie Ihren Namen, Adresse und Kundennummer ein.
|
||||
2. Filtern Sie auf der Übersicht den gewünschten Monat.
|
||||
3. Klicken Sie auf **„PDF exportieren"**.
|
||||
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
|
||||
|
||||
Das PDF enthält:
|
||||
- Briefkopf mit Ihren persönlichen Daten
|
||||
- Titel „Bewerbungsaktivitäten – Monat Jahr"
|
||||
- Zusammenfassungssatz
|
||||
- Tabelle aller Bewerbungen des Monats
|
||||
- Unterschriftszeile mit Datum
|
||||
## Browser-Unterstützung
|
||||
|
||||
## Port ändern
|
||||
- Chrome (empfohlen)
|
||||
- Firefox
|
||||
- Safari
|
||||
- Edge
|
||||
|
||||
```bash
|
||||
PORT=8080 npm start
|
||||
```
|
||||
## 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.
|
||||
|
||||
Reference in New Issue
Block a user