feat: init inkl. docker configs

This commit is contained in:
betalabor.de
2026-04-24 18:43:42 +02:00
commit c9ef44423c
37 changed files with 10538 additions and 0 deletions

111
README.md Normal file
View File

@@ -0,0 +1,111 @@
# 📄 Lebenslauf-App
Professioneller Lebenslauf-Builder mit Astro + SQLite. Keine externen Tools notwendig.
## Features
- **4 Templates** Navy Klassik, Modern Timeline, Minimal Elegant, Bold Creative
- **OTP-Login** E-Mail-basierter Einmal-Code, kein Passwort
- **Editor** Live-Vorschau, Auto-Save alle 2 Sekunden
- **Skills** Eingabe mit Niveauanzeige (15 Punkte)
- **Farben & Schriften** Vollständig anpassbar pro Lebenslauf
- **PDF-Export** Client-seitig via html2pdf.js (kein Browser-Backend nötig)
- **Online-Teilen** Öffentlicher Link via Hash-URL `/cv/[hash]`
- **Formate**: PDF, HTML, JSON, CSV, Excel (XLSX)
- **DE/EN** Vollständige Übersetzung beider Sprachen
---
## Schnellstart
```bash
# 1. Abhängigkeiten installieren
npm install
# 2. Umgebungsvariablen konfigurieren
cp .env.example .env
# → .env bearbeiten (SMTP-Daten eintragen)
# 3. Starten
npm run dev
```
App läuft auf: **http://localhost:4321**
---
## Umgebungsvariablen (`.env`)
| Variable | Beschreibung | Standard |
|----------|-------------|---------|
| `DB_PATH` | Pfad zur SQLite-Datei | `./data/lebenslauf.db` |
| `SESSION_SECRET` | Zufälliger langer String | |
| `SMTP_HOST` | SMTP-Server | `localhost` |
| `SMTP_PORT` | SMTP-Port | `587` |
| `SMTP_SECURE` | SSL/TLS | `false` |
| `SMTP_USER` | SMTP-Benutzername | |
| `SMTP_PASS` | SMTP-Passwort | |
| `SMTP_FROM` | Absender-Adresse | `noreply@localhost` |
| `APP_URL` | Öffentliche App-URL | `http://localhost:4321` |
| `OTP_EXPIRES_MINUTES` | OTP-Gültigkeit | `10` |
> **Dev-Modus**: Wenn kein SMTP konfiguriert ist, wird der OTP-Code in der Konsole ausgegeben.
---
## Produktion
```bash
npm run build
npm start
```
Die App läuft als eigenständiger Node.js-Server.
---
## Exports
| Format | Methode | Inhalt |
|--------|---------|--------|
| **PDF** | html2pdf.js (CDN) | Druckfertiger DIN A4 Lebenslauf |
| **HTML** | Client-seitig | Standalone-Datei mit eingebettetem CSS |
| **JSON** | Client-seitig | Vollständige strukturierte Daten |
| **CSV** | Client-seitig | Tabellarische Daten (UTF-8 BOM) |
| **Excel** | SheetJS (CDN) | 5 Blätter: Persönlich, Erfahrung, Ausbildung, Kenntnisse, Sprachen |
---
## URLs
| Route | Beschreibung |
|-------|-------------|
| `/` | Login-Seite |
| `/verify` | OTP-Eingabe |
| `/dashboard` | Übersicht der Lebensläufe |
| `/editor/[id]` | Lebenslauf bearbeiten |
| `/cv/[hash]` | Öffentliche Ansicht (wenn aktiviert) |
---
## Technologie
- **Astro 4** mit SSR (Node-Adapter)
- **SQLite** via `better-sqlite3`
- **E-Mail** via `nodemailer`
- **PDF** via `html2pdf.js` (CDN, kein Install)
- **Excel** via `SheetJS` (CDN, kein Install)
- **CSS** reines CSS, kein Framework
---
## Eigene SMTP-Provider
| Provider | Host | Port | Secure |
|----------|------|------|--------|
| Gmail | smtp.gmail.com | 587 | false |
| Netcup (1blu) | smtp.example.com | 587 | false |
| Outlook | smtp.office365.com | 587 | false |
| Mailgun | smtp.mailgun.org | 587 | false |
> Für Gmail: App-Passwort verwenden (nicht das Konto-Passwort).