Commit Graph

73 Commits

Author SHA1 Message Date
MBO-Tech-IT 60af2e1621 fix: add IP rate limiting and guard non-string email in flyer route
Adds an in-memory, IP-based fixed-window rate limit (max 3 req/hour)
to app/api/familyguard-flyer/route.ts to mitigate an email-spam/abuse
vector where any client could trigger outbound emails and DB inserts
with no limit. Also guards against a non-string `email` field in the
request body, which previously threw an uncaught TypeError (HTTP 500)
instead of the intended 400 validation response.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhY1QhDXGWfyhrxaJvfpNt
2026-07-21 14:12:50 +02:00
MBO-Tech-IT 40442317bb feat: link homepage FamilyGuard promo to flyer download section 2026-07-21 14:04:04 +02:00
MBO-Tech-IT 48a36b3bf3 feat: embed FlyerDownloadForm on FamilyGuard page
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session
2026-07-21 14:00:51 +02:00
MBO-Tech-IT 0cc396e090 feat: add FlyerDownloadForm component 2026-07-21 13:44:26 +02:00
MBO-Tech-IT 7c04450b57 feat: add API route for FamilyGuard flyer email-gate download
Creates POST /api/familyguard-flyer endpoint that validates email format
and DSGVO consent, records download intent in Supabase flyer_downloads table,
and sends notification and download link emails (fire-and-forget) before
returning the flyer download URL.

Implements Task 4 of 7-task email-gated flyer download feature.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhY1QhDXGWfyhrxaJvfpNt
2026-07-21 11:36:37 +02:00
MBO-Tech-IT d9d82d8e7b fix: escape user-supplied email in FamilyGuard flyer notification HTML 2026-07-21 11:31:42 +02:00
MBO-Tech-IT e3fad32b6b feat: add mailer functions for FamilyGuard flyer notification and link 2026-07-21 11:27:18 +02:00
MBO-Tech-IT 331e89f73d feat: add flyer_downloads table type to Supabase schema 2026-07-21 11:24:05 +02:00
MBO-Tech-IT 1cf3004552 feat: move FamilyGuard flyer PDF to public/downloads for direct serving 2026-07-21 11:20:19 +02:00
MBO-Tech-IT 84599e1e08 docs: add implementation plan for FamilyGuard flyer email-gate download
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhY1QhDXGWfyhrxaJvfpNt
2026-07-21 11:12:17 +02:00
MBO-Tech-IT 8ae4e341c1 docs: fix flyer spec to not misuse the modules/ reuse-template convention
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhY1QhDXGWfyhrxaJvfpNt
2026-07-21 11:08:46 +02:00
MBO-Tech-IT 1cf9c0701e docs: add design spec for FamilyGuard flyer email-gate download
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhY1QhDXGWfyhrxaJvfpNt
2026-07-21 11:05:54 +02:00
MBO-Tech-IT 260aa80f42 feat: remove Kubernetes references site-wide, rework Nextcloud Enterprise tier on Proxmox
Kubernetes wird derzeit nicht angeboten. Betroffen: Hero-Badges, Footer,
Services, Technologies, Contact-Formular, About, DataSovereignty, Meta-Tags
sowie das Nextcloud-Enterprise-Paket (jetzt Proxmox-HA-Cluster statt k3s).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhY1QhDXGWfyhrxaJvfpNt
2026-07-21 10:45:47 +02:00
MBO-Tech-IT 4298968324 feat: add promo end date and router hint to FamilyGuard page
Aktualisiert anhand des neuen Flyers MBO_FamilyGuard_Flyer_01.pdf.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhY1QhDXGWfyhrxaJvfpNt
2026-07-21 10:32:49 +02:00
MBO-Tech-IT fd38267cb9 feat: add MBO FamilyGuard package page and homepage promo
Add /pakete/familyguard detail page mirroring the VPN page pattern,
list it as the first tile on /pakete (before Nextcloud + Paperless-ngx),
and promote it with a new section directly below the hero on the homepage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 08:18:29 +02:00
MBO-Tech-IT 4386cc4b45 fix: correct metadata title and clean up nextcloud page 2026-06-29 17:22:55 +02:00
MBO-Tech-IT 43f5476f3f feat: rebuild /pakete as service overview with tiles 2026-06-29 17:02:27 +02:00
MBO-Tech-IT 9a0677226c feat: add Zero-Trust-VPN detail page at /pakete/vpn 2026-06-29 16:32:43 +02:00
MBO-Tech-IT b8abfae323 feat: move Nextcloud packages to /pakete/nextcloud 2026-06-29 16:24:51 +02:00
MBO-Tech-IT 0889a86405 docs: add implementation plan for Pakete overview + VPN page 2026-06-29 16:06:10 +02:00
MBO-Tech-IT 97102ff25c docs: add design spec for Pakete overview + Zero-Trust-VPN page 2026-06-29 15:58:35 +02:00
MBO-Tech-IT 5637fb1772 fix: add AdminNav, auth and CSS variables to all CMS admin pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 21:04:11 +02:00
MBO-Tech-IT 074b4eb5d1 feat: load homepage sections from supabase cms, fix passwort page auth
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 20:37:27 +02:00
MBO-Tech-IT 3eeea27b92 feat: Hero, About, Contact components accept CMS props
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 20:35:23 +02:00
MBO-Tech-IT b9aa6a0a54 feat: set MBO-Tech-IT defaults in hero and add CMS links to admin nav
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 20:33:37 +02:00
MBO-Tech-IT 20f8a0a0f0 fix: use admin_users table in passwort route
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 20:32:53 +02:00
MBO-Tech-IT 5b82ad93b3 feat: add website-cms module files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 20:32:24 +02:00
MBO-Tech-IT 323a9b7b24 feat: add Supabase type definitions for website CMS module (06)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 11:35:25 +02:00
MBO-Tech-IT db5e9bb5ce feat: add website CMS module (06) and update TypeScript build info
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 16:32:34 +02:00
MBO-Tech-IT a060751f45 docs: add module integration implementation plan
14 Tasks mit konkretem Code und SQL-Migrationen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 21:10:08 +02:00
MBO-Tech-IT ed275a6fa0 docs: add module integration design spec
Vollständiger Umsetzungsplan für alle 6 Module + Supabase-Anbindung.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 16:58:04 +02:00
MBO-Tech-IT 00a49c1de6 fix: SEO content quality improvements across components
- DataSovereignty: replace all ASCII encodings with proper German umlauts (oe→ö, ae→ä, ue→ü) throughout all text content
- Header: fix misleading nav label "Datenschutz" → "Datensouveränität" (links to data sovereignty section, not legal page)
- Hero: add "Crailsheim" to visible subheadline for local SEO signal
- Contact: add address/location entry for NAP consistency (Name, Address, Phone)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 06:25:53 +02:00
MBO-Tech-IT cd50da695f feat: replace maintenance plan prices with "Auf Anfrage"
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 16:35:14 +02:00
MBO-Tech-IT 17cd2869f9 fix: update Google Search Console verification meta tag token
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 14:28:29 +02:00
MBO-Tech-IT 10210e5c80 feat: add Google Search Console verification
- 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>
2026-05-06 14:27:51 +02:00
MBO-Tech-IT 9cf15d7deb feat: add SEO improvements — robots.txt, sitemap, Open Graph, JSON-LD schema
- Add app/robots.ts: block admin/kunden/auth/api, reference sitemap
- Add app/sitemap.ts: list public pages (/, /pakete)
- layout.tsx: add metadataBase, Open Graph, Twitter Card, LocalBusiness JSON-LD, improve title/description with location (Crailsheim, Region Schwäbisch Hall)
- pakete/page.tsx: add Open Graph and canonical URL
- datenschutz/page.tsx: fix title/description encoding (Umlaute)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 14:20:21 +02:00
MBO-Tech-IT a2ea70426d fix: add top padding on mobile to clear fixed header in Hero section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 20:15:24 +02:00
MBO-Tech-IT 040d03c29d feat: extend contact form subject options and sort alphabetically
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 16:53:48 +02:00
MBO-Tech-IT 93585ee4ef feat: update Hero subheadline with services and regional focus
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 16:48:45 +02:00
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