All apps · 0 apps
Angebots-tool
Docker app from CrazyDevil's Repository
Overview
Readme
View on GitHubAngebotsTool
Eine selbst gehostete Web-App zum Erstellen und Verwalten von Angeboten – optimiert für den Einsatz auf Unraid-Servern.
Features
- Angebote erstellen – Positionen, Preise, Kundeninfos und PDF-Export
- Kundenverwaltung – Kunden anlegen und verwalten
- Dashboard – Übersicht über alle Angebote und Aktivitäten
- Benutzerverwaltung – Mehrere Benutzer mit Rollen (Admin / Benutzer)
- Einladungssystem – Neue Benutzer per E-Mail einladen
- SMTP-Konfiguration – E-Mail-Versand direkt aus der App konfigurierbar
- Authentifizierung – JWT-basierter Login mit Brute-Force-Schutz
- Echtzeit-Sync – Änderungen werden live auf allen geöffneten Tabs aktualisiert
Installation auf Unraid
Docker Hub
Das Image ist verfügbar unter:
crazydevil35/angebotstool:latest
Über Community Applications
Nach der Installation des CA-Plugins einfach nach AngebotsTool suchen und installieren. Alle Pfade und Ports sind vorausgefüllt.
Manuelle Docker-Installation
docker run -d \
--name AngebotsTool \
-p 3000:3000 \
-v /mnt/user/appdata/angebots-tool:/app/data \
-e BASE_URL=http://deine-ip:3000 \
--restart unless-stopped \
crazydevil35/angebotstool:latest
Umgebungsvariablen
| Variable | Beschreibung | Standard |
|---|---|---|
PORT |
Interner Port des Servers | 3000 |
JWT_SECRET |
Geheimer Schlüssel für JWT-Token. Wird automatisch generiert wenn leer. | (automatisch) |
BASE_URL |
Externe URL der App, z.B. https://angebote.meinserver.de |
(optional) |
TZ |
Zeitzone für automatische Sicherungen und den Ablauf von Angeboten | Europe/Berlin |
TRUST_PROXY |
Nur hinter Reverse-Proxy/Cloudflare setzen: Anzahl der Proxys vor dem Container (z.B. 1) oder deren Adressen (z.B. 172.17.0.0/16). Ohne Angabe sieht die Login-Sperre bei Zugriff über einen Proxy alle Nutzer als eine IP. |
(aus) |
Datenspeicherung
Alle Daten werden im Container-Pfad /app/data gespeichert:
users.json– Benutzerdatenconfig.json– App-Konfiguration, SMTP-Einstellungen und JWT-Secretfirma.json,kunden.json,katalog.json– Stammdatenangebote/– ein JSON pro Angebot plusindex.jsonbackups/– automatische Sicherung (automatisch-JJJJ-MM-TT-HHMMSS.json; Häufigkeit, Uhrzeit und Anzahl unter Einstellungen → Firmendaten → Datensicherung, Standard: täglich 02:00, 14 behalten; verpasste Termine werden nach dem Start nachgeholt) und Sicherung des alten Stands vor jedem Backup-Import (vor-import-*.json, wird nie automatisch gelöscht). Die automatischen Sicherungen haben das Export-Format und lassen sich über Importieren wiederherstellen.users.jsonundconfig.jsonsind nicht enthalten – dafür den ganzen Appdata-Ordner sichern.
Über Einstellungen → Datensicherung (nur Admins) lassen sich alle Daten als JSON exportieren und wieder importieren. Ein Import ersetzt den kompletten Datenbestand.
Der Host-Pfad /mnt/user/appdata/angebots-tool (oder ein beliebiger anderer Pfad) muss als Volume eingebunden werden, damit die Daten bei Container-Updates erhalten bleiben.
Erster Start
Beim ersten Aufruf der App wird ein Erstkonfigurations-Assistent gestartet, in dem der erste Admin-Account angelegt wird.
Technik
- Frontend: React 19, Vite, Tailwind CSS
- Backend: Node.js, Express
- Auth: JWT mit automatisch generiertem Secret
- PDF: @react-pdf/renderer
- Container: Docker (Node.js 22 Alpine)
Projektstruktur
shared/ Preisberechnung und Nummernvergabe – von Server und Frontend genutzt
server/ index.js (Start), routes/, middleware/, stores/ (Dateizugriff), lib/
src/ api/ (Server-Aufrufe), features/ (Angebots-Editor, Einstellungen, Auth),
views/ (Listen, Dashboard), components/, pdf/, utils/, lib/
Tests: npm test · Lint: npm run lint
Lizenz
MIT – siehe LICENSE
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
crazydevil35/angebotstool:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3000]/- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Externer Port, über den das Angebots-Tool erreichbar ist.
- Target
- 3000
- Default
- 3000
- Value
- 3000
Benutzer, Einstellungen (SMTP, Firmendaten), Angebote, Kunden und Backups. Ohne dieses Volume gehen alle Daten beim Update verloren.
- Target
- /app/data
- Default
- /mnt/user/appdata/angebots-tool
- Value
- /mnt/user/appdata/angebots-tool
Anzahl vertrauenswürdiger Proxys vor der App (1 = Cloudflare) oder deren Adressen (z. B. 172.17.0.0/16). Nötig, damit die Login-Sperre die echte IP je Nutzer sieht. Leer lassen, wenn die App nur direkt ohne Proxy erreichbar ist.
- Default
- 1
- Value
- 1
Externe URL des Servers (z. B. https://angebote.meinserver.de). Wird für Einladungslinks verwendet.
Sicherer Zufallswert für die Anmelde-Tokens. Leer lassen: Er wird beim ersten Start erzeugt und im Datenverzeichnis gespeichert.
Interner Port des Node.js-Servers. Nicht ändern, außer wenn nötig.
- Default
- 3000
- Value
- 3000