Commit Graph

34 Commits

Author SHA1 Message Date
MBO-Tech-IT 146ebd7d91 feat: reorder services, replace package prices with "Auf Anfrage"
- Services: WLAN & Netzwerk und Individuelle Webanwendungen direkt nach
  Hardware & Software einsortiert
- Pakete: Installations-Preise durch "Auf Anfrage" ersetzt,
  Metadata-Description aktualisiert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 09:26:44 +02:00
MBO-Tech-IT 2a91084737 feat: send confirmation email to contact form submitter
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>
2026-04-28 09:12:48 +02:00
MBO-Tech-IT c266931822 fix: connect web container to supabase_default network
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>
2026-04-28 08:50:26 +02:00
MBO-Tech-IT ad0c7adc27 fix: resolve webpack build error for nodemailer in Docker
- 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>
2026-04-27 19:55:32 +02:00
MBO-Tech-IT 9e56f1b5a3 feat: integrate modules 01–03, 06–07 — email, admin auth, analytics, kunden-portal, statistik
- 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>
2026-04-27 19:41:05 +02:00
MBO-Tech-IT 08377f3a8a feat: set dark mode as default, disable OS-based system theme
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 21:27:29 +02:00
MBO-Tech-IT ad02d3e781 docs: add light mode design spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 19:53:28 +02:00
MBO-Tech-IT 9339986d31 feat: apply light mode classes to pakete page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 19:52:27 +02:00
MBO-Tech-IT d5e88b58ab feat: apply light mode classes to Contact, Technologies, LegalLayout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 19:49:43 +02:00
MBO-Tech-IT 0186e3c191 feat: apply light mode classes to Services, PaperlessSection, DataSovereignty, About
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 19:45:47 +02:00
MBO-Tech-IT 87b634b9c3 fix: align dark mode text contrast in Footer 2026-04-26 16:49:02 +02:00
MBO-Tech-IT 20d038ec77 fix: improve dark mode contrast in StatsBar and Footer
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>
2026-04-26 16:47:50 +02:00
MBO-Tech-IT 9c7cd0bfec feat: apply light mode classes to Hero, StatsBar, Footer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 16:45:38 +02:00
MBO-Tech-IT 7f8160596c feat: add ThemeToggle to Header, apply light mode classes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 16:42:25 +02:00
MBO-Tech-IT 99d0a09953 fix: move dark bg-grid out of utilities layer, add scrollbar hover dark override
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 16:39:22 +02:00
MBO-Tech-IT c0c5caa4ff feat: update globals.css and page.tsx for light mode
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 16:27:59 +02:00
MBO-Tech-IT 22ad91a8ff fix: use resolvedTheme in ThemeToggle, add aria-label
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 16:26:25 +02:00
MBO-Tech-IT a0d6caa79b feat: add next-themes setup, Providers and ThemeToggle components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 16:22:30 +02:00
MBO-Tech-IT d89bfdc888 fix: update experience stat from 5+ to 30+ Jahre Erfahrung
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 15:41:50 +02:00
MBO-Tech-IT 9c7f78464b feat: add contact form submission with send confirmation
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>
2026-04-26 15:23:30 +02:00
MBO-Tech-IT 8d5fde5f02 fix: load .env.local in docker-compose via env_file
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 15:15:31 +02:00
MBO-Tech-IT 1369e831ad feat: integrate email-system module (nodemailer + queue)
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>
2026-04-26 14:56:36 +02:00
MBO-Tech-IT e7962d7c0c fix: remove non-existent public directory from Dockerfile
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 14:00:48 +02:00
MBO-Tech-IT 9a021b932c Docker Image erstellt 2026-04-26 13:14:15 +02:00
MBO-Tech-IT fdbf3c0219 docs: add CLAUDE.md with architecture and dev commands 2026-04-02 01:35:51 +02:00
MBO-Tech-IT 737a0f1f77 Fix TS2503: replace JSX.Element with ReactElement in DataSovereignty
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>
2026-04-02 01:34:06 +02:00
MBO-Tech-IT 0c469131fe feat: add PaperlessSection with DSGVO/GoBD/Paperless content 2026-04-02 01:30:51 +02:00
MBO-Tech-IT 7b70ce635b feat: add WLAN and WebApps service cards with scroll-reveal 2026-04-02 01:28:54 +02:00
MBO-Tech-IT ed5136b9a1 feat: add StatsBar with animated counters, update page layout 2026-04-02 01:26:35 +02:00
MBO-Tech-IT 561b61f6b6 feat: integrate typewriter effect in Hero headline 2026-04-02 01:24:25 +02:00
MBO-Tech-IT a33115e56d fix: cancel nested setTimeout in useTypewriter, add empty words guard 2026-04-02 01:19:27 +02:00
MBO-Tech-IT 2d1f21efe7 feat: add useTypewriter hook 2026-04-02 01:17:06 +02:00
MBO-Tech-IT c5a982abc0 feat: add ScrollReveal component with Intersection Observer 2026-04-02 01:12:15 +02:00
MBO-Tech-IT 8267ae3e8c chore: initial commit before website expansion 2026-04-02 01:11:27 +02:00