- Create public/google73af89007ffca7c2.html for HTML file verification
- Add verification.google meta tag in layout.tsx as redundant fallback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Schickt nach eingehender Anfrage automatisch eine Bestätigungsmail an
den Anfragenden mit Betreff, Dankestext und direkter Telefonnummer.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ohne dieses Netz kann der Container supabase-kong nicht erreichen,
was zu "TypeError: fetch failed" in EmailQueue und 401 beim Admin-Login führt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- next.config.ts: serverExternalPackages für nodemailer hinzugefügt
- instrumentation.ts: statischen Import durch dynamischen ersetzt, damit
Webpack email-queue.ts (und damit nodemailer) nicht im Edge-Bundle analysiert
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Modul 01 (Email): mailer.ts mit Nodemailer + Supabase-Queue, SMTP-Test-Route
- Modul 02 (Admin-Auth): JWT-Sessions, Rate-Limiting, Token-Blacklist, Audit-Logs, Login-Route
- Modul 03 (Analytics): PageTracker, page_views/phone_clicks Tracking, Admin-Analytics-Seite
- Modul 06 (Kunden-Portal): Supabase Auth Login/Registrierung, Kundendashboard, Middleware
- Modul 07 (KPI-Dashboard): Admin-Statistik mit Anfragen-Übersicht und Monats-Diagramm
- contact/route.ts: speichert Anfragen jetzt in Supabase
- Supabase-Types für alle neuen Tabellen ergänzt
- app/admin/page.tsx: Redirect zu /admin/analytics
- AnalyticsTabs: Design-Inkonsistenz behoben (Light-Mode-Karten auf Dark umgestellt)
- layout.tsx: Umlauts-Fehler in Metadata-Description behoben
- lib/audit-log.ts: TypeScript null→undefined Mapping für reason-Feld
- modules/: Wiederverwendbare Modul-Templates mit Migrations und Integrations-Prompts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace inverted/missing dark: variants (slate-500→slate-400, slate-600 dark:slate-600→slate-500 dark:slate-400) so text is lighter in dark mode, not darker.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
API route /api/contact calls sendeKontaktEmail and returns ok/error.
On total failure (no SMTP, no queue) logs full contact data to server log.
Contact.tsx is now a client component: shows spinner while sending,
success state ("Anfrage gesendet") on ok, error banner with message on failure.
queueEmail now returns boolean; sendWithFallback returns { sent, queued }.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds lib/mailer.ts (sendeKontaktEmail, MBO-Tech-IT branding),
lib/email-queue.ts (Supabase-fallback, graceful no-op when not configured),
lib/supabase.ts (stub for later integration), admin API routes for
SMTP-test and queue management, and instrumentation.ts for the queue worker.
Excludes modules/ from TypeScript compilation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Added missing ReactElement import from react and replaced the JSX
namespace reference to resolve the TypeScript error introduced when
the component was written without a React import.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>