- 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
- Add formatDateGerman() helper function to convert yyyy-mm-dd to dd.mm.yyyy
- Update all email templates (HTML and text versions) to use European date format
- Apply formatting to booking pending, confirmed, and cancelled emails
- Ensure consistent date display across all customer communications
- Improve user experience with familiar German date format
Changes:
- email-templates.ts: Add date formatting to all HTML templates
- bookings.ts: Add date formatting to all text email versions
- Both files: Consistent European date format (dd.mm.yyyy) throughout
- Extend email system to support file attachments
- Add sendEmailWithAGB() function that automatically attaches AGB.pdf
- Implement AGB PDF caching for better performance
- Update booking confirmation email template with AGB notice
- Add visual highlight box in HTML email with AGB information
- Update email subject to indicate AGB attachment
- Include AGB reference in both HTML and text versions
- Ensure legal compliance by automatically sending terms with confirmations
Changes:
- email.ts: Add attachment support and AGB PDF integration
- email-templates.ts: Add AGB notice to confirmation emails
- bookings.ts: Use sendEmailWithAGB for confirmed bookings
- German localization for admin treatments component
- Add comprehensive AGB in Markdown format (AGB.md)
- Include PDF version of AGB (AGB.pdf) for download/printing
- Cover all essential business terms including:
* Booking and cancellation policies (48h notice, fees)
* Payment terms (10€ booking fee, multiple payment options)
* Quality guarantee (7-day warranty with proper care)
* Health and safety guidelines (allergies, illness policy)
* Appointment rules (punctuality, no companions)
* Age restriction (16+ years)
* Data protection and privacy
- Professional formatting with emojis and clear structure
- Include social media reference (@stargirlnailskiel)
- Add admin calendar component with booking overview and status management
- Implement treatment-specific availability slots with automatic duration
- Enhance availability management with better UI and error handling
- Move admin credentials to .env configuration
- Add .env.example with all required environment variables
- Update README.md with comprehensive setup guide including PowerShell password hash generation
- Improve slot deletion with proper error handling and user feedback
- Add toast notifications for better UX
- Add specific allowedHosts configuration for Tailscale domains
- Configure both Vite server and Hono dev server to accept .ts.net hosts
- Add global middleware to Hono app for host acceptance
- Allow master11.warbler-bearded.ts.net and all .ts.net subdomains
- Replace emoji icons with Stargil Nails logo in header and loading spinner
- Add favicon.png to public directory
- Copy logo to public/assets for browser access
- Update vite.config.ts to serve public directory
- Add favicon link to HTML head section
"Blocked request. This host ("master11.warbler-bearded.ts.net") is not allowed.
To allow this host, add "master11.warbler-bearded.ts.net" to `server.allowedHosts` in vite.config.js."
Blocked request. This host ("master11.warbler-bearded.ts.net") is not allowed.
To allow this host, add "master11.warbler-bearded.ts.net" to `server.allowedHosts` in vite.config.js.
❯ pnpm dev
> quests-template-basic@0.0.0 dev C:\Users\mbusc\AppData\Roaming\Quests\workspace\projects\silver-bright-fork-23
> vite
VITE v7.1.3 ready in 780 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
➜ press h + enter to show help
18:15:12 [vite] (ssr) Error when evaluating SSR module ./src/server/index.ts: OPENAI_BASE_URL is not set
at eval (C:/Users/mbusc/AppData/Roaming/Quests/workspace/projects/silver-bright-fork-23/src/server/rpc/demo/ai.ts:13:9)
at async ESModulesEvaluator.runInlinedModule (file:///C:/Users/mbusc/AppData/Roaming/Quests/workspace/projects/silver-bright-fork-23/node_modules/.pnpm/vite@7.1.3_@types+node@22.1_7fc9e9804073d39b787b9384e0ee4b8c/node_modules/vite/dist/node/module-runner.js:910:3)