# Stargirlnails Kiel - Nail Salon Booking System Ein vollständiges Buchungssystem für Nagelstudios mit Admin-Panel, Kalender und E-Mail-Benachrichtigungen. ## Dependencies - [TypeScript](https://www.typescriptlang.org/) - [React](https://react.dev/) - [Vite](https://vite.dev/) - [Tailwind CSS V4](https://tailwindcss.com/) - [oRPC](https://orpc.unnoq.com/) - [Hono](https://hono.dev/) - [Zod](https://zod.dev/) ## Setup ### 1. Umgebungsvariablen konfigurieren Kopiere die `.env.example` Datei zu `.env` und konfiguriere deine Umgebungsvariablen: ```bash 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) ```powershell # 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) ```javascript // 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) - Verwende einen Base64-Encoder wie [base64encode.org](https://www.base64encode.org/) ### 3. .env Datei konfigurieren Bearbeite deine `.env` Datei und setze die generierten Werte: ```env # 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 ```bash # Dependencies installieren pnpm install # Entwicklungsserver starten pnpm dev ``` ## Docker Deployment ### Docker Build ```bash # 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: ```yaml 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: ```bash # 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: ```bash # 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:** ```env SECURITY_CONTACT=security@stargirlnails.de ``` **Zugriff:** ```bash curl https://your-domain.com/.well-known/security.txt ``` Dies ermöglicht Sicherheitsforschern, Sicherheitslücken verantwortungsvoll zu melden.