elpatron 6e826922f6 Fix: Copy public directory to production container
- Added COPY --from=base /app/public ./public to Dockerfile
- This ensures all public assets (favicon.png, AGB.pdf, assets/) are available in production
- Fixes missing public files in the production container
- Public directory contains favicon.png, AGB.pdf, and logo assets
2025-10-02 00:10:14 +02:00
2025-09-29 19:50:10 +02:00
2025-09-30 11:13:53 +02:00
2025-09-30 11:13:53 +02:00
2025-09-29 17:56:30 +02:00

Stargirlnails Kiel - Nail Salon Booking System

Ein vollständiges Buchungssystem für Nagelstudios mit Admin-Panel, Kalender und E-Mail-Benachrichtigungen.

Dependencies

Setup

1. Umgebungsvariablen konfigurieren

Kopiere die .env.example Datei zu .env und konfiguriere deine Umgebungsvariablen:

cp .env.example .env

2. Admin-Passwort Hash generieren

Das Admin-Passwort wird als Base64-Hash in der .env Datei gespeichert. Hier sind verschiedene Methoden, um einen Hash zu generieren:

PowerShell (Windows)

# Einfache Methode mit Base64-Encoding
$password = "dein_sicheres_passwort"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($password)
$hash = [System.Convert]::ToBase64String($bytes)
Write-Host "Password Hash: $hash"

# Alternative mit PowerShell 7+ (kürzer)
$password = "dein_sicheres_passwort"
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($password))

Node.js (falls verfügbar)

// In der Node.js Konsole oder als separates Script
const password = "dein_sicheres_passwort";
const hash = Buffer.from(password).toString('base64');
console.log("Password Hash:", hash);

Online-Tools (nur für Entwicklung)

3. .env Datei konfigurieren

Bearbeite deine .env Datei und setze die generierten Werte:

# Admin Account Configuration
ADMIN_USERNAME=owner
ADMIN_PASSWORD_HASH=ZGVpbl9zaWNoZXJlc19wYXNzd29ydA==  # Dein generierter Hash

# Domain Configuration
DOMAIN=localhost:5173  # Für Produktion: deine-domain.de

# Email Configuration
RESEND_API_KEY=your_resend_api_key_here
EMAIL_FROM=noreply@yourdomain.com
ADMIN_EMAIL=admin@yourdomain.com

# Stornierungsfrist (in Stunden)
MIN_STORNO_TIMESPAN=24

# Legal Information (Impressum/Datenschutz)
COMPANY_NAME=Stargirlnails Kiel
OWNER_NAME=Inhaber Name
ADDRESS_STREET=Liebigstr. 15
ADDRESS_CITY=Kiel
ADDRESS_POSTAL_CODE=24145
ADDRESS_COUNTRY=Deutschland
ADDRESS_LATITUDE=54.3233  # Optional: GPS-Koordinaten für Karte
ADDRESS_LONGITUDE=10.1228  # Optional: GPS-Koordinaten für Karte
CONTACT_PHONE=+49 431 123456
CONTACT_EMAIL=info@stargirlnails.de
TAX_ID=12/345/67890  # Optional
VAT_ID=DE123456789  # Optional
COMMERCIAL_REGISTER=HRB 12345  # Optional
RESPONSIBLE_FOR_CONTENT=Inhaber Name
DATA_PROTECTION_RESPONSIBLE=Inhaber Name
DATA_PROTECTION_EMAIL=datenschutz@stargirlnails.de
THIRD_PARTY_SERVICES=Resend (E-Mail-Versand),Google Analytics  # Komma-getrennt

4. Anwendung starten

# Dependencies installieren
pnpm install

# Entwicklungsserver starten
pnpm dev

Docker Deployment

Docker Build

# Docker Image erstellen
docker build -t stargirlnails-booking .

# Container starten
docker run -d \
  --name stargirlnails-app \
  -p 3000:3000 \
  --env-file .env \
  stargirlnails-booking

Docker Compose (empfohlen)

Erstelle eine docker-compose.yml Datei:

services:
  stargirlnails:
    build: .
    ports:
      - "3000:3000"
    env_file:
      - .env
    restart: unless-stopped
    volumes:
      - ./.storage:/app/.storage
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

Starten mit Docker Compose:

# Container starten
docker-compose up -d

# Logs anzeigen
docker-compose logs -f

# Container stoppen
docker-compose down

Produktions-Deployment

Für den produktiven Einsatz mit automatischem SSL:

# Mit Docker Compose (empfohlen)
docker-compose -f docker-compose-prod.yml up -d

# Oder mit dem Caddy-Setup-Script
chmod +x scripts/setup-caddy.sh
./scripts/setup-caddy.sh

Wichtige Produktions-Hinweise:

  • Verwende eine .env.production Datei mit Produktions-Konfiguration
  • Setze NODE_ENV=production in der Umgebungsdatei
  • Automatisches SSL: Caddy erstellt und verwaltet automatisch Let's Encrypt-Zertifikate
  • Überwache Container mit Health Checks
  • Persistente Daten: Der .storage Ordner wird als Volume gemountet, um Buchungen und Einstellungen zu erhalten

Features

Buchungssystem

  • 📅 Terminbuchung: Kunden können online Termine buchen
  • 💅 Behandlungsverwaltung: Admin kann Behandlungen hinzufügen/bearbeiten
  • 📆 Kalender-Ansicht: Übersichtliche Darstellung aller Termine
  • Verfügbarkeits-Slots: Flexible Slot-Verwaltung mit behandlungsspezifischen Dauern
  • Termin-Stornierung: Kunden können Termine über sichere Links stornieren
  • Stornierungsfrist: Konfigurierbare Mindestfrist vor dem Termin (MIN_STORNO_TIMESPAN)

E-Mail & Benachrichtigungen

  • 📧 E-Mail-Benachrichtigungen: Automatische Benachrichtigungen bei Buchungen
  • 📅 ICS-Kalendereinträge: Termin-Bestätigungen mit ICS-Datei zum Importieren in Kalender-Apps
  • Kalender-Erinnerungen: 24h-Erinnerung im ICS-Kalendereintrag
  • 📎 AGB-Anhänge: Automatischer PDF-Anhang der Allgemeinen Geschäftsbedingungen

Sicherheit

  • 🛡️ Rate-Limiting: IP- und E-Mail-basierter Schutz gegen Spam (3 Anfragen/E-Mail pro Stunde, 5 Anfragen/IP pro 10 Min)
  • ✉️ E-Mail-Validierung: Mehrschichtige Validierung inkl. Disposable-Email-Detection und MX-Record-Prüfung
  • 🚫 Wegwerf-Email-Schutz: Blockierung von temporären E-Mail-Adressen
  • 🔐 Admin-Panel: Geschützter Bereich für Inhaber
  • 🛡️ Security.txt: RFC 9116 konformer Endpoint für Sicherheitsmeldungen

Rechtliches

  • 📋 Impressum/Datenschutz: Rechtliche Seiten mit konfigurierbaren Daten
  • ⚖️ GDPR-konform: Datenschutzfreundliche Implementierung

Admin-Zugang

Nach dem Setup kannst du dich mit den in der .env konfigurierten Admin-Credentials anmelden:

  • Benutzername: Wert aus ADMIN_USERNAME
  • Passwort: Das ursprüngliche Passwort (nicht der Hash)

Sicherheit

⚠️ Wichtige Hinweise:

  • Ändere das Standard-Passwort vor dem Produktionseinsatz
  • Das Passwort wird als Base64-Hash in der .env Datei gespeichert
  • Verwende ein sicheres Passwort und generiere den entsprechenden Hash
  • Die .env Datei sollte niemals in das Repository committet werden

Security.txt Endpoint

Die Anwendung bietet einen RFC 9116 konformen Security.txt Endpoint unter /.well-known/security.txt:

  • Kontakt: Konfigurierbar über SECURITY_CONTACT Umgebungsvariable
  • Ablauf: Automatisch gesetzt auf Ende des aktuellen Jahres
  • Sprachen: Deutsch und Englisch bevorzugt
  • Caching: 24 Stunden Cache-Header für bessere Performance

Beispiel-Konfiguration:

SECURITY_CONTACT=security@stargirlnails.de

Zugriff:

curl https://your-domain.com/.well-known/security.txt

Dies ermöglicht Sicherheitsforschern, Sicherheitslücken verantwortungsvoll zu melden.

Description
No description provided
Readme 2.6 MiB
Languages
TypeScript 72.7%
JavaScript 25.7%
Shell 1%
Dockerfile 0.3%
HTML 0.1%
Other 0.1%