Commit Graph
100 Commits
Author SHA1 Message Date
elpatron fbfdceeee6 feat: CalDAV-Integration für Admin-Kalender
- Neue CalDAV-Route mit PROPFIND und GET-Endpoints
- ICS-Format-Generator für Buchungsdaten
- Token-basierte Authentifizierung für CalDAV-Zugriff
- Admin-Interface mit CalDAV-Link-Generator
- Schritt-für-Schritt-Anleitung für Kalender-Apps
- 24h-Token-Ablaufzeit für Sicherheit
- Unterstützung für Outlook, Google Calendar, Apple Calendar, Thunderbird

Fixes: Admin kann jetzt Terminkalender in externen Apps abonnieren
2025-10-06 12:41:50 +02:00
elpatron 244eeee142 Prod: rebuild script Healthcheck ohne jq (docker inspect fallback) 2025-10-05 20:21:31 +02:00
elpatron 9c2e47ef9a Prod: rebuild script verbessert (down --remove-orphans, pull, healthcheck, Logs) 2025-10-05 20:17:52 +02:00
elpatron 27a106de13 CSP: connect-src um data: und blob: erweitert (Fix für DataURL-Fetch bei Bildkompression) 2025-10-05 20:15:58 +02:00
elpatron 83a3a6a19f CSP: img-src um blob: erweitert (Fix für blob: Previews auf Prod) 2025-10-05 20:13:20 +02:00
elpatron 53aca01131 Email: Review-Link auf /review/:token umgestellt; Token-Erzeugung konsolidiert. Reviews: Client-Validation hinzugefügt. Verfügbarkeiten: Auto-Update nach Regelanlage. Galerie: Cover-Foto-Flag + Setzen im Admin, sofortige Aktualisierung nach Upload/Löschen/Reihenfolge-Änderung. Startseite: Featured-Foto = Reihenfolge 0, Seitenverhältnis beibehalten, Texte aktualisiert. 2025-10-05 20:09:12 +02:00
elpatron 6d7e8eceba Entferne Slots-Tab und Slot-RPCs; bereinige recurring-availability; Texte angepasst 2025-10-05 17:21:56 +02:00
elpatron 6cf657168b Fix TypeScript errors for Docker build
- Fix optional chaining for booking properties
- Fix useMutation isLoading to isPending
- Fix email parameter types
- Fix expiredDetails array typing
2025-10-05 16:28:28 +02:00
elpatron a8cec16d7a Fix reschedule token handling and improve admin notifications
- Fix getBookingByToken to only accept booking_access tokens
- Add sweepExpiredRescheduleProposals with admin notifications
- Return isExpired flag instead of throwing errors for expired proposals
- Fix email template to use actual token expiry time
- Remove duplicate admin emails in acceptReschedule
- Add one-click accept/decline support via URL parameters
2025-10-05 16:11:37 +02:00
elpatron 97c1d3493f Verbessere Booking-Form UX: Reset selectedTime bei Treatment-Wechsel, bessere Loading-States und lokale Datumsvalidierung 2025-10-04 18:09:46 +02:00
elpatron 3a13c8dffb Fix: Change email CC to BCC for admin notifications
- Change confirmation emails from CC to BCC for admin notifications
- Change cancellation emails from CC to BCC for admin notifications
- Improve privacy: customers no longer see admin email address
- Admin still receives copies of all customer communications
- Maintain GDPR compliance and data protection
2025-10-02 16:18:48 +02:00
elpatron 6f6b21e7c8 Fix: Allow OpenStreetMap iframe in Content Security Policy
- Add frame-src directive to CSP for OpenStreetMap.org
- Fix Impressum map display issue in production
- Allow embedding of OpenStreetMap iframes while maintaining security
- Update Caddyfile CSP configuration
2025-10-02 15:45:01 +02:00
elpatron d7b1ae3525 Fix: Improve booking status page error handling
- Add better error messages for invalid/expired booking tokens
- Replace generic 'Internal server error' with user-friendly explanations
- List possible reasons why booking links might not work
- Add clear call-to-action for new bookings
- Improve user experience with helpful guidance
2025-10-02 15:38:22 +02:00
elpatron 6502f0d416 Fix: Cancel button functionality and live updates in booking management
- Add confirmation modal for booking cancellations
- Implement proper error handling and success messages
- Fix live updates for booking status changes
- Add manual refetch to ensure immediate UI updates
- Auto-delete past availability slots on list access
- Add manual cleanup function for past slots
- Improve user experience with instant feedback
2025-10-02 14:27:24 +02:00
elpatron 0b4e7e725f Fix: Live updates in availability management
- Add manual refetch calls after slot creation/deletion
- Ensure availability list updates immediately after changes
- Fix issue where slots didn't appear in list after adding
- Improve user experience with real-time updates
2025-10-02 13:55:24 +02:00
elpatron 938ee76e32 Add explicit DISABLE_DUPLICATE_CHECK=false to production config
- Ensure consistent environment variable handling between dev and prod
- Explicitly disable duplicate check bypass in production environment
- Maintain security by preventing multiple bookings per email in production
2025-10-02 13:40:32 +02:00
elpatron 5baa231d3c Fix: Slot reservation only after successful email validation
- Move email validation before slot reservation in backend
- Remove duplicate frontend email validation
- Slots are no longer blocked by failed booking attempts
- Clean up unused email error UI components
- Ensure slots remain available if email validation fails
2025-10-02 13:39:13 +02:00
elpatron 73cf733c5f Fix E-Mail-Versand und verbessere Fehlerbehandlung
- Behebe Port-Konfiguration für interne RPC-Verbindungen (5173 -> 3000)
- Verbessere oRPC-Fehlerbehandlung: ursprüngliche Fehlermeldungen werden beibehalten
- Erweitere Frontend-Fehlerbehandlung für bessere oRPC-Integration
- Deaktiviere Duplikat-Prüfung in Development-Modus (NODE_ENV=development)
- Lokale Entwicklung ermöglicht mehrere Buchungen pro E-Mail-Adresse
- Produktion behält Duplikat-Schutz bei
2025-10-02 10:01:01 +02:00
elpatron f2e12df6d5 Add rebuild script for Windows 2025-10-02 09:28:01 +02:00
elpatron d663abb1ab Add restart script 2025-10-02 08:52:11 +02:00
elpatron c0b0edc00e Fix: Improve RPC error handling and routing
- Changed from rpcApp.use to rpcApp.all for better route handling
- Added proper error handling with try-catch
- Return 404 for unmatched routes instead of calling next()
- Return 500 for internal server errors
- Improves RPC endpoint reliability and debugging
2025-10-02 01:09:46 +02:00
elpatron 9a104e8862 Optimize: Improve table column widths and text truncation
- Added table-fixed layout for consistent column widths
- Set specific column widths: Behandlung (2/5), Kategorie (1/6), Dauer (1/12), Preis (1/12), Aktionen (1/6)
- Truncate long descriptions to 50 characters with tooltip
- Added truncate class to prevent text overflow
- Ensures all columns are always visible without horizontal scrolling
2025-10-02 01:03:28 +02:00
elpatron 84fc9ee890 Fix: Enable horizontal scrolling for treatments table
- Changed overflow-hidden to overflow-x-auto
- Fixes missing Edit/Delete buttons in treatments table
- Allows horizontal scrolling when table is too wide
- Resolves CSS layout issue in production
2025-10-02 00:58:42 +02:00
elpatron 277be954b7 Fix: Remove duplicate /assets/ prefix from manifest paths
- Manifest already includes 'assets/' prefix
- Fixes double /assets/assets/ paths in production
- Ensures correct asset loading
2025-10-02 00:51:52 +02:00
elpatron 65a0b8c823 Fix: Correct Vite manifest key lookup
- Changed from 'src/client/main.tsx' to 'index.html' to match actual manifest
- Fixes production asset loading
- Resolves empty page issue in production mode
2025-10-02 00:49:53 +02:00
elpatron 1285560f62 Fix: Add manifest: true to Vite build config
- Enables Vite manifest generation for production builds
- Fixes CSS loading issues in production
- Resolves missing buttons in admin treatments page
- Ensures proper asset path resolution
2025-10-02 00:40:35 +02:00
elpatron 49829a4573 Fix: Only serve static files from dist in production
- Added NODE_ENV check before serving static files from ./dist
- Prevents 'serveStatic: root path ./dist is not found' error in development
- Keeps Docker/production configuration intact
- Development mode now works with pnpm dev without build step
2025-10-02 00:29:12 +02:00
elpatron eacb063bc0 Fix: Move favicon configuration inside main domain block
- Moved favicon.ico and favicon.png handlers inside stargirlnails.de block
- This prevents Caddy from trying to create SSL certificates for favicon files
- Uses 'handle' directive for path-specific routing within the domain
- Fixes 'Invalid identifiers requested' error for favicon files
2025-10-02 00:22:45 +02:00
elpatron e6ffb0ef6d Fix: Replace invalid 'file' directive with 'try_files' in Caddyfile
- Changed 'file favicon.png' to 'try_files {path}' which is the correct Caddy syntax
- Updated root path to /app/public for consistency
- This fixes the 'unrecognized directive: file' error in Caddy
2025-10-02 00:20:48 +02:00
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
elpatron 38594d30a2 Add favicon configuration to Caddyfile
- Added favicon.ico redirect to favicon.png (301 redirect)
- Added favicon.png serving from /app/dist directory
- This fixes favicon loading issues in browsers
- Both favicon.ico and favicon.png requests are now handled correctly
2025-10-02 00:09:10 +02:00
elpatron 76874bc98a Fix: Remove invalid rate_limit directive from Caddyfile
- Removed rate_limit directive which is not supported in Caddy
- Caddyfile now uses only valid Caddy directives
- This fixes the configuration error that was preventing Caddy from starting
2025-10-01 23:41:34 +02:00
elpatron a77634bb13 Clean up: Remove obsolete nginx/certbot files and update README
- Deleted all nginx configuration files and directory
- Removed obsolete SSL setup scripts (check-ssl-*, setup-ssl-*, setup-simple.sh)
- Updated README.md to reflect Caddy-based production deployment
- Kept only essential scripts: setup-caddy.sh, rebuild-prod.sh, start-with-email.ps1
- Production deployment now uses docker-compose-prod.yml with automatic SSL
2025-10-01 23:36:52 +02:00
elpatron 8ffe459d50 Replace Nginx/Certbot with Caddy for automatic SSL
- Replaced nginx and certbot services with caddy in docker-compose-prod.yml
- Added Caddyfile configuration with automatic SSL and security headers
- Created setup-caddy.sh script for easy deployment
- Caddy automatically handles Let's Encrypt certificates without manual setup
- Much simpler SSL management compared to nginx/certbot combination
2025-10-01 23:34:43 +02:00
elpatron c28d4fc4ec Add simple SSL check script using direct Docker commands
- Created check-ssl-simple.sh that uses direct Docker commands instead of docker-compose
- Uses alpine:latest container directly with volume mount
- Avoids Certbot communication issues that cause hanging
- Provides clean SSL certificate inspection without external dependencies
2025-10-01 23:26:32 +02:00
elpatron 6b10c256a0 Fix: Use certbot service instead of alpine in SSL check script
- Changed from alpine to certbot service which is defined in docker-compose-prod.yml
- This fixes the 'no such service: alpine' error
- Script now uses the existing certbot container to check SSL certificates
2025-10-01 23:25:09 +02:00
elpatron 6987d48bd6 Add direct SSL certificate check script
- Created check-ssl-direct.sh that checks SSL certificates without using Certbot
- Uses Alpine container to directly inspect the certbot-certs volume
- Avoids hanging issues with Certbot communication
- Can automatically enable HTTPS if certificates are found
2025-10-01 23:23:56 +02:00
elpatron 97d17d67ee Add simple setup script without SSL complexity
- Created setup-simple.sh that starts the application with HTTP-only
- Avoids SSL certificate checking that was causing hangs
- Provides a working baseline before SSL setup
- Users can manually configure SSL later if needed
2025-10-01 23:21:01 +02:00
elpatron 98858c1760 Add SSL certificate permissions diagnostic script
- Created check-ssl-permissions.sh to diagnose SSL certificate access issues
- Script checks certificate files, permissions, and ownership
- Attempts to repair permissions if needed
- This helps identify if SSL setup issues are permission-related
2025-10-01 23:19:45 +02:00
elpatron b3272d565b Fix: Add timeout and fallback for SSL certificate check
- Added 30-second timeout to certificate check to prevent hanging
- Added fallback to HTTP-only configuration if SSL setup fails
- Script now continues even if certificate verification fails
- This prevents the script from hanging indefinitely
2025-10-01 23:18:01 +02:00
elpatron e29f4374c0 Fix: Handle existing SSL certificates in setup script
- Added check for existing SSL certificates before attempting to create new ones
- Restore original HTTPS nginx.conf after certificate verification
- This prevents the script from hanging when certificates already exist
2025-10-01 23:16:07 +02:00
elpatron 23ea0d801e Fix: Resolve Nginx SSL certificate loading issue
- Created nginx-http-only.conf for initial startup without SSL
- Added setup-ssl-improved.sh script that:
  - Starts app first, then HTTP-only Nginx
  - Creates SSL certificates via Certbot
  - Switches to HTTPS configuration after certificate creation
- This prevents Nginx from failing on missing SSL certificates during initial startup
2025-10-01 23:13:31 +02:00
elpatron b10df50688 add rebuild script 2025-10-01 23:11:02 +02:00
elpatron ffc21a76e7 Fix: Resolve permission issues with .storage directories
- Install su-exec in Dockerfile for user switching
- Modified start.sh to create directories as root, then change ownership
- Container starts as root but switches to nextjs user for app execution
- This prevents permission denied errors when creating .storage directories
2025-10-01 23:07:33 +02:00
elpatron 857b60e1f5 Fix: Use startup script to create .storage directories at runtime
- Changed from bind mount to named volume for .storage
- Added start.sh script that creates required directories before starting the app
- This prevents ENOENT errors when initializing admin user
2025-10-01 23:05:21 +02:00
elpatron 713da5a802 Fix: Create .storage directories in Dockerfile to prevent ENOENT errors 2025-10-01 23:01:35 +02:00
elpatron 12b31d28d5 fix(client-entry): füge CSS-Fallback für Production-Build hinzu 2025-10-01 22:54:23 +02:00
elpatron 84d6f5c07a fix(client-entry): korrigiere TypeScript-Typen für cssFiles Array 2025-10-01 22:51:01 +02:00
elpatron f4d9f60fc9 fix(client-entry): verwende korrekte Asset-Pfade aus Vite-Manifest für Production-Build 2025-10-01 22:49:57 +02:00
elpatron 2c2a173b96 fix(server): füge statische Datei-Serving für Production-Build hinzu 2025-10-01 22:47:06 +02:00
elpatron 3d5c6ffeaf fix(server): korrigiere Import-Position für @hono/node-server 2025-10-01 22:42:18 +02:00
elpatron 72834a6977 fix(server): füge @hono/node-server hinzu und korrigiere Server-Start für Node.js 2025-10-01 22:41:11 +02:00
elpatron 18b75fdde3 fix(server): füge Server-Start-Konfiguration hinzu für Hono-App 2025-10-01 22:38:44 +02:00
elpatron 143051a90a fix(server-build): ersetze @/server-Pfad-Aliase durch relative Imports mit .js-Erweiterungen 2025-10-01 22:33:49 +02:00
elpatron 1e1070dbb5 fix(server-build): füge .js-Erweiterungen zu allen lib-Imports in bookings.ts hinzu 2025-10-01 22:31:40 +02:00
elpatron 19e52f7af6 fix(server-build): füge .js-Erweiterungen zu lib-Imports in RPC-Dateien hinzu 2025-10-01 22:29:23 +02:00
elpatron a80cb86cd5 fix(server-runtime): entferne Import von @vitejs/plugin-react im Server-HTML-Renderer; nutze Vite HMR Script direkt 2025-10-01 22:20:34 +02:00
elpatron 74f55486bc fix(server-build): füge .js-Erweiterungen zu allen relativen Imports hinzu für ESNext-Module-Kompatibilität 2025-10-01 22:17:23 +02:00
elpatron c6c1455612 fix(server-build): ersetze import.meta.env.PROD durch process.env.NODE_ENV für Server-Build Kompatibilität 2025-10-01 22:15:18 +02:00
elpatron 9d71842714 fix(server-build): Server-Build auf ESNext/bundler umgestellt für oRPC und import.meta Kompatibilität 2025-10-01 22:14:12 +02:00
elpatron b3df04a92d fix(server-build): korrigiere Import von router in bookings.ts - nutze './index' statt '..' 2025-10-01 22:12:51 +02:00
elpatron 3d1bbe7265 fix(server-build): entferne Pfadalias '@/server/*' im Server-Code, nutze relative Imports; passe RPC-Route-Import und OpenAI-Import an; Server-Build nutzt CommonJS/Node Resolution 2025-10-01 22:11:30 +02:00
elpatron f44164c957 fix(build): entferne allowImportingTsExtensions für Server-Build (TS5096) 2025-10-01 22:06:51 +02:00
elpatron 9da96d7af9 build(server): separater TS-Build für Server (server-dist) und Runtime auf Node JS statt ts-node; Dockerfile startet server-dist/index.js 2025-10-01 22:05:01 +02:00
elpatron 4f901400a3 fix(runtime): füge tsconfig.server.json hinzu und setze TS_NODE_PROJECT für NodeNext-Loader 2025-10-01 22:01:39 +02:00
elpatron 1cf727433d chore(lockfile): pnpm-lock.yaml aktualisiert nach Hinzufügen von ts-node 2025-10-01 21:58:02 +02:00
elpatron 647016ff85 fix(runtime): füge ts-node als Dependency hinzu für ESM-Loader im Production-Container 2025-10-01 21:56:35 +02:00
elpatron fe3acccb93 fix(runtime): installiere ts-node im Production-Image, damit Node --loader ts-node/esm funktioniert 2025-10-01 21:47:35 +02:00
elpatron a7733c95f6 fix(build): füge index.html hinzu und konfiguriere Vite Build für Hono-Setup 2025-10-01 21:42:21 +02:00
elpatron 4696948c6c fix(build): korrigiere mutate-Aufruf - oRPC Mutation erwartet direktes Objekt, kein input-Wrapper 2025-10-01 21:41:10 +02:00
elpatron 73612caa1e fix(build): oRPC Query/Mutation options korrekt verwendet (input wrapper), interne RPC-Client-Typisierung gelockert und createToken-Aufrufe angepasst 2025-10-01 21:39:40 +02:00
elpatron fb30bb6395 fix(build): entferne Context-Header-Nutzung aus bookings.create (RateLimit nur per E-Mail) 2025-10-01 21:33:27 +02:00
elpatron 4acb639e66 fix(build): Types in admin-calendar, oRPC React Query Helpers in booking-status, Router-Namenskonflikt, entferne unsupported allowedHosts aus Vite 2025-10-01 21:28:21 +02:00
elpatron 52280b1b3b feat(setup-ssl): automatische sudo-Unterstützung für Docker/Compose, alle Aufrufe vereinheitlicht 2025-10-01 21:24:26 +02:00
elpatron f9d42b4c1e chore(compose): entferne version und behebe depends_on-Zyklus (nginx ↔ app) 2025-10-01 21:23:00 +02:00
elpatron 18f97e4e5f fix(setup-ssl): Docker Compose Kompatibilität - unterstützt sowohl docker-compose als auch docker compose 2025-10-01 21:21:39 +02:00
elpatron 17f1ff698e docker compose 2025-10-01 21:20:15 +02:00
elpatron 71a107de52 fix(setup-ssl): .env nicht sourcen, DOMAIN/ADMIN_EMAIL robust parsen (Leerzeichen-kompatibel) 2025-10-01 21:18:42 +02:00
elpatron 58fb163bbc feat: Produktions-Deployment mit Nginx und SSL
- docker-compose-prod.yml: Produktionsumgebung mit Nginx Reverse Proxy
- nginx/nginx.conf: Optimierte Nginx-Konfiguration mit SSL und Sicherheits-Headers
- Rate Limiting für API-Endpunkte (10/s) und Login (5/min)
- Automatische SSL-Zertifikate via Let's Encrypt/Certbot
- Gzip-Kompression und Performance-Optimierungen

Setup-Scripts:
- scripts/setup-ssl.sh: Bash-Script für Linux/macOS
- scripts/setup-ssl.ps1: PowerShell-Script für Windows
- Automatische Domain-Konfiguration aus .env (DOMAIN, ADMIN_EMAIL)
- Ein-Klick-Setup für SSL-Zertifikate

Dokumentation:
- docs/production-deployment.md: Vollständige Deployment-Anleitung
- Troubleshooting, Monitoring, Backup-Strategien
- Sicherheitsempfehlungen und Best Practices

Features:
- Automatische SSL-Zertifikat-Erneuerung (alle 12h)
- HSTS, CSP, XSS-Schutz
- Health Checks und Monitoring
- Persistente Daten über Docker Volumes
2025-10-01 21:13:49 +02:00
elpatron 1d97e05000 feat: Google Apps Script für automatische Test-Formular-Erstellung
- Automatische Generierung eines Google Forms aus der Test-Checkliste
- ~180 Checkbox-Items über 14 Sections
- Testergebnis-Bereich mit Fehlerberichten und Gesamtbewertung
- Kein API-Key erforderlich - läuft direkt im Google Account
- Schritt-für-Schritt-Anleitung im Code-Kommentar
- Exportierbar nach Google Sheets
- Mehrfach verwendbar für verschiedene Test-Runden
2025-10-01 13:39:12 +02:00
elpatron 86a73f2c16 docs: Umfassende Blackbox-Test-Checkliste für Statusseite
- 16 Hauptkategorien mit >150 Testfällen
- Alle Status-Typen abgedeckt (pending/confirmed/cancelled/completed)
- E-Mail-Integration und ICS-Dateien
- Stornierungslogik und Zeitvalidierung
- UI/UX, Performance und Accessibility
- Sicherheit und Edge Cases
- Browser-Kompatibilität
- Testergebnis-Bereich für Dokumentation
2025-10-01 13:17:55 +02:00
elpatron 85fcde0805 feat: Token-basierte Kunden-Statusseite
- Neue /booking/{token} Route für einheitliche Buchungsübersicht
- Vollständige Termin-Details mit Status-Badges (pending/confirmed/cancelled/completed)
- Integrierte Stornierungsfunktion mit Bestätigungsdialog
- Anzeige von Behandlungsdetails, Kundendaten und verbleibender Zeit
- Automatische Berechnung ob Stornierung noch möglich
- Responsive UI mit modernem Design

Server-Erweiterungen:
- BookingAccessToken statt CancellationToken (semantisch präziser)
- Erweiterte Rückgabe von getBookingByToken (Preis, Dauer, canCancel, hoursUntilAppointment)
- Token-Generierung bei Buchungserstellung (pending) und Bestätigung

E-Mail-Integration:
- Status-Links in pending-Mails
- 'Termin verwalten' statt 'Termin stornieren' in confirmed-Mails
- Einheitliches Branding (Pink/Orange statt Rot)

Aufgeräumt:
- Legacy cancellation-page.tsx entfernt
- /cancel/ Route entfernt (keine Rückwärtskompatibilität nötig)
- Backlog aktualisiert
2025-10-01 13:14:27 +02:00
elpatron 8ee2a2b3b6 feat: ICS-Kalendereinträge, Rate-Limiting und erweiterte E-Mail-Validierung
- ICS-Dateianhänge in Bestätigungsmails mit Europe/Berlin Zeitzone
- Rate-Limiting: IP-basiert (5/10min) und E-Mail-basiert (3/1h)
- Mehrschichtige E-Mail-Validierung mit Rapid Email Validator API
  - Disposable Email Detection (blockiert Wegwerf-Adressen)
  - MX Record Verification
  - Domain Verification
  - Typo-Erkennung mit Vorschlägen
- Zod-Schema-Validierung für Name, E-Mail und Telefonnummer
- Dokumentation für Rate-Limiting und E-Mail-Validierung
- README mit neuen Features aktualisiert
- Backlog aktualisiert
2025-10-01 11:43:51 +02:00
elpatron 2dcfb8e2ee Add RFC 9116 compliant security.txt endpoint
- Implement /.well-known/security.txt endpoint for security vulnerability reporting
- Add SECURITY_CONTACT environment variable support
- Include proper HTTP headers (Content-Type, Cache-Control)
- Set automatic expiration date and preferred languages
- Add comprehensive security policy information
- Update .env.example with SECURITY_CONTACT variable
- Document security.txt endpoint in README.md with usage examples
- Follow RFC 9116 standard for responsible disclosure
2025-09-30 19:28:29 +02:00
elpatron 2402afff13 Add persistent storage volume to Docker configuration
- Mount .storage directory from host to container for data persistence
- Update docker-compose.yml with volumes configuration
- Update README.md with volume documentation
- Ensure bookings and settings persist across container restarts
2025-09-30 19:24:20 +02:00
elpatron 558ee9cc56 Update booking form and environment configuration
- Update .env.example with map coordinates (ADDRESS_LATITUDE/LONGITUDE)
- Update ADDRESS_STREET to Liebigstr. 15 and postal code to 24145
- Document GPS coordinates for interactive map feature in legal page
2025-09-30 19:11:29 +02:00
elpatron 9dd9fd0ac2 Update .env.example with map coordinates
- Add ADDRESS_LATITUDE and ADDRESS_LONGITUDE environment variables
- Update ADDRESS_STREET to Liebigstr. 15
- Update ADDRESS_POSTAL_CODE to 24145
- Document GPS coordinates for interactive map feature
2025-09-30 18:54:45 +02:00
elpatron 2ddd0704d7 Add interactive map to Impressum with configurable coordinates
- Add OpenStreetMap iframe to legal page showing business location
- Support ADDRESS_LATITUDE and ADDRESS_LONGITUDE environment variables
- Generate dynamic map URLs based on configured coordinates
- Include link to full map view
- Update legal-config.ts interface to include latitude/longitude
- Document new environment variables in README.md
- Use Kiel coordinates as default (54.3233, 10.1228)
2025-09-30 18:52:11 +02:00
elpatron 01754bf142 Füge 'Zurück zur Startseite' Link zur Login-Seite hinzu
- Navigation-Link unter dem Anmelde-Formular
- Pinkes Design passend zum Stargirlnails-Branding
- Pfeil-Icon für bessere Benutzerfreundlichkeit
- Hover-Effekt mit sanfter Farbänderung
- Zentrierte Platzierung für sauberes Design
- Verbesserte Navigation und UX
2025-09-30 18:39:15 +02:00
elpatron 732f2fb0e6 Füge Impressum/Datenschutz-Links zu allen Benutzer-E-Mails hinzu
- Alle Benutzer-E-Mails enthalten jetzt Links zu Impressum/Datenschutz
- Schöner blauer Info-Block mit 📋 Icon in HTML-E-Mails
- Text-Links in allen Text-Versionen der E-Mails
- Betroffen: Pending-Buchungen, Bestätigungen, Stornierungen
- Admin-E-Mails bleiben unverändert
- Konsistentes Design und Benutzerfreundlichkeit
- Direkte Navigation zu /legal für rechtliche Informationen
2025-09-30 18:30:27 +02:00
elpatron 671f9693c5 Füge Logo-Klick-Navigation zum Impressum-Header hinzu
- Logo und Titel im Impressum-Header sind jetzt klickbar
- Klick führt zur Startseite zurück
- Visuelle Hover-Effekte (cursor-pointer, opacity-Änderung)
- Konsistentes Verhalten mit der Haupt-App
- Verbesserte Benutzerfreundlichkeit und Navigation
2025-09-30 18:27:51 +02:00
elpatron 90e48c82ac Behebe Impressum/Datenschutz-Tab und bereinige UI
- Impressum-Tab zeigt jetzt korrekt rechtliche Informationen an
- Direkter HTTP-Endpoint /api/legal-config als Workaround für RPC-Problem
- Client-Komponente verwendet fetch() anstatt RPC-Calls
- Debug-Logs hinzugefügt für bessere Fehlerdiagnose
- Hinweis-Text über Umgebungsvariablen entfernt für saubereres Design
- Legal-Konfiguration funktioniert jetzt vollständig mit echten Daten
- Tab-Navigation zwischen Impressum und Datenschutz funktioniert
2025-09-30 18:25:50 +02:00
elpatron 40d76680fd Implementiere Impressum/Datenschutz-System und bereinige URL-Konfiguration
- Neues Impressum/Datenschutz-Tab mit konfigurierbaren rechtlichen Daten
- Konfigurationsdatei legal-config.ts für alle rechtlichen Informationen
- RPC-Endpoint legal.getConfig() für rechtliche Daten
- Schöne Tab-Navigation zwischen Impressum und Datenschutz
- Responsive Design mit Loading-States und Fehlerbehandlung
- Alle rechtlichen Daten über Umgebungsvariablen konfigurierbar
- FRONTEND_URL entfernt - nur noch DOMAIN wird verwendet
- Hilfsfunktion generateUrl() für konsistente URL-Generierung
- Code-Duplikation in bookings.ts eliminiert
- .env.example aktualisiert mit allen neuen Variablen
- README.md dokumentiert neue rechtliche Konfiguration
- DSGVO- und TMG-konforme Inhalte implementiert
2025-09-30 18:14:01 +02:00
elpatron 55923e0426 Implementiere Stornierungssystem und E-Mail-Links zur Hauptseite
- Neues Stornierungssystem mit sicheren Token-basierten Links
- Stornierungsfrist konfigurierbar über MIN_STORNO_TIMESPAN (24h Standard)
- Stornierungs-Seite mit Buchungsdetails und Ein-Klick-Stornierung
- Automatische Slot-Freigabe bei Stornierung
- Stornierungs-Link in Bestätigungs-E-Mails integriert
- Alle E-Mails enthalten jetzt Links zur Hauptseite (DOMAIN Variable)
- Schöne HTML-Buttons und Text-Links in allen E-Mail-Templates
- Vollständige Validierung: Vergangenheits-Check, Token-Ablauf, Stornierungsfrist
- Responsive Stornierungs-Seite mit Loading-States und Fehlerbehandlung
- Dokumentation in README.md aktualisiert
2025-09-30 17:48:03 +02:00
elpatron e5384e46ce Remove obsolete version tag 2025-09-30 16:10:38 +02:00
elpatron 7d4d5a79c7 Remove obsolete version tag 2025-09-30 16:10:13 +02:00
elpatron d1f312116e feat: Add Docker support and health endpoint
- Add production-ready Dockerfile with multi-stage build
- Add .dockerignore for optimized builds
- Add docker-compose.yml for easy deployment
- Add /health endpoint for container health checks
- Update README with comprehensive Docker documentation
- Include security best practices (non-root user, health checks)
- Support for both development and production deployments
2025-09-30 14:23:14 +02:00
elpatron 13dacee924 docs: Update README security section
- Remove outdated password hashing warnings
- Clarify that passwords are stored as Base64 hashes in .env
- Add reminder to not commit .env files
- Align documentation with actual implementation
2025-09-30 14:19:19 +02:00
elpatron f98d74a85f feat: Make header logo and title clickable to navigate to booking page
- Add cursor-pointer and hover effects to header logo area
- Clicking on logo/title now navigates to booking tab
- Improves user experience with clear navigation hint
2025-09-30 13:07:40 +02:00
elpatron 180a5b88b8 feat: Add inspiration photo attachment to admin booking notifications
- Create sendEmailWithInspirationPhoto() function to handle photo attachments
- Add renderAdminBookingNotificationHTML() template for admin notifications
- Extract photo extension and content from base64 data URLs
- Generate unique filenames with customer name and timestamp
- Send separate admin notification email with photo attachment
- Include comprehensive booking details in admin email
- Add visual indicators for photo availability in email template
- Support both HTML and text versions of admin notifications
- Handle cases where no photo is uploaded gracefully
- Import treatments KV to get treatment names for admin emails

Features:
- Inspiration photos automatically attached to admin notifications
- Structured admin email with all booking details
- Photo filename includes customer name and timestamp
- Fallback handling for missing photos
- German localization for admin notifications
- Visual photo availability indicators (/)

Changes:
- email.ts: Add sendEmailWithInspirationPhoto() function
- email-templates.ts: Add renderAdminBookingNotificationHTML() template
- bookings.ts: Send admin notifications with photo attachments
2025-09-30 12:13:16 +02:00