Commit Graph

535 Commits

Author SHA1 Message Date
f0547fbf8a perf: optimize PageSpeed Insights performance
- Suppress browser source map references to fix 404/SyntaxErrors
- Reduce legacy JS polyfills via browserslist config
- Optimize LCP by refining Hero animations and image sizes
- Implement video lazy loading and reduce SVG animation complexity
- Add preconnect hints for critical origins
2026-02-19 23:21:01 +01:00
0dd47491f0 fix(navigation): Corrected incorrect 'Home' label in both languages 2026-02-19 21:40:20 +01:00
166f023e3b fix(staging): completely resolve phantom 403 imgproxy caching loops via base64, traefik routing precedence, and variable mapping 2026-02-19 20:06:55 +01:00
f7c743b69c fix(imgproxy): fallback to smart gravity (sm) instead of face detection (fv)
- 'fv' requires ML modules not present in standard imgproxy image
- 'sm' is robust and supported everywhere
- Fixes broken images on staging using Next.js Image loader
2026-02-19 18:05:29 +01:00
20fdab326d fix(imgproxy): URL-encode plain source URLs
- Use encodeURIComponent for source URLs in plain/ format
- Prevents 308 redirect loops caused by double-slash normalization
- Prevents invalid URL structures for imgproxy
2026-02-19 17:15:58 +01:00
3b60d450e1 fix(infra): whitelist video files and source maps
- Added webm, mp4, map to Traefik whitelist to bypass Gatekeeper
- Added webm, mp4, map to middleware exclusion to prevent locale redirects
- This fixes 404 errors for background videos and source maps on protected environments
2026-02-19 16:04:58 +01:00
8a7247d80c fix(imgproxy): switch from base64 to plain URL format
Use plain/ source URL format instead of base64 encoding.
Base64 was causing 404 errors from imgproxy.
Plain format verified working via direct curl tests.
2026-02-19 15:07:20 +01:00
cdbede3551 fix(infra): whitelist static image assets in traefik
- Added PathRegexp for .svg, .png, .jpg, etc. to public router
- Allows central imgproxy to fetch source images from protected staging environment
- Resolves broken images caused by imgproxy receiving login page HTML
2026-02-19 01:52:41 +01:00
7c2e6be821 fix: update Klaus Mintel's job title to Geschäftsführer in German 2026-02-19 00:46:36 +01:00
b85d4a09f8 fix: update Klaus Mintel's job title to Geschäftsführer 2026-02-19 00:46:02 +01:00
61a0b3b935 fix(middleware): exclude /_img proxy path from locale redirects
- Exclude /_img from middleware matcher to prevent locale redirects
- Clean commit for middleware fix
2026-02-19 00:43:36 +01:00
067b4aa05b fix(infra): correct traefik host rule syntax for public router
- Fixed invalid Traefik rule syntax in docker-compose.yml (was using raw hostname)
- Updated middleware.ts to explicitly allow localized paths
- Ensures whitelist for OG images/health checks is recognized
2026-02-18 23:43:54 +01:00
fc0d2e55c6 fix(analytics): Resolve Umami proxy 500 error and empty server events 2026-02-18 23:34:56 +01:00
f344c8b0d1 fix(infra): simplify traefik whitelist rules for og images
- Replaced complex PathRegexp with explicit PathPrefix rules for /api/og and /opengraph-image
- Added localized prefixes (/de/, /en/) to ensure Gatekeeper bypass works reliable
2026-02-18 22:04:46 +01:00
b4fa4f3ec5 fix(infra): whitelist /_img proxy path and restore image config
- Whitelisted /_img path in Traefik labels to allow public access (fixing login page images)
- Restored dangerouslyAllowSVG and CSP settings in next.config.mjs (lost in shallow merge)
- Ensuring Next.js proxy works correctly behind Gatekeeper
2026-02-18 21:42:33 +01:00
34ff786c5f feat: improve accessibility and SEO (100/100 Lighthouse score)
Fixes color contrast, canonical URLs, viewport scaling, semantic lists,

and resolves 404 errors for manifest/imgproxy.
2026-02-18 21:36:02 +01:00
7b277e6102 chore: deep semantic HTML audit and improvements across all pages 2026-02-18 19:26:15 +01:00
bf908e4bc8 fix: img urls 2026-02-18 19:16:21 +01:00
654e1b90d7 feat(infra): configure next.js image proxy to hide backend url
- Implemented /_img/ rewrite in next.config.mjs to proxy requests to IMGPROXY_URL
- Updated lib/imgproxy.ts to use local /_img path instead of public endpoint
- Replaced NEXT_PUBLIC_IMGPROXY_URL (build-time) with IMGPROXY_URL (runtime) env var
- Updated docker-compose.yml to strip build args and inject runtime IMGPROXY_URL
- Cleaned up Dockerfile and audit scripts
2026-02-18 15:58:27 +01:00
a60664f964 feat(infra): configure imgproxy to use next.js rewrite proxy
- Added /_img/ rewrite rule in next.config.mjs to proxy image requests to IMGPROXY_URL
- Updated lib/imgproxy.ts to use local /_img path instead of exposed public URL
- Replaced NEXT_PUBLIC_IMGPROXY_URL (build-time) with IMGPROXY_URL (runtime)
- Updated Dockerfile and docker-compose.yml to strip unused build args
2026-02-18 15:57:44 +01:00
e0fae20835 fix(infra): make IMGPROXY_URL_MAPPING configurable via environment variables
This ensures that the image proxy correctly maps public domains to internal
Docker hostnames across different environments (testing, staging, production)
without manual configuration of the docker-compose.yml file.
2026-02-18 11:57:03 +01:00
e5b414ea76 perf: optimize server-side analytics and notifications to resolve 32s transaction delay
- Added 5s timeout to GotifyNotificationService
- Reduced timeout to 2s in UmamiAnalyticsService
- Implemented non-blocking analytics tracking in layout using Next.js after() API
2026-02-18 10:24:10 +01:00
9e9bc9d3aa feat: optimize performance and SEO, integrate Lighthouse CI
- Integrated imgproxy for centralized image optimization
- Implemented Lighthouse CI in Gitea pipeline with native Chromium
- Reached 100/100 SEO score by fixing canonicals, hreflang, and link text
- Optimized LCP by forcing Hero component visibility until hydration
- Decoupled analytics into an async shell to reduce TTI
2026-02-18 10:01:00 +01:00
d93b453d53 feat(a11y): implement screen reader support and accessibility optimizations 2026-02-18 00:59:31 +01:00
ea0dae310c fix(infra): restore official production volume and repair directus snapshot
- Hardened docker-compose.yml to use klz-cablescom_directus-db-data volume
- Added mandatory 'relations: []' key to Directus snapshot.yaml
- Aligned internal network mappings for db connectivity
2026-02-17 22:49:21 +01:00
bdc31621c3 chore: integrate mdx validation and fix syntax errors in blog posts 2026-02-17 21:36:55 +01:00
5c533292dd refactor: enforce 'v' prefix for version tags in deploy workflow triggers and logic. 2026-02-17 21:29:53 +01:00
a0738e6ea1 chore(git): Add pre-push hook to enforce 'v' prefix on tags 2026-02-17 21:25:57 +01:00
201b7498d8 fix(ci): Support semantic version tags without 'v' prefix 2026-02-17 21:23:15 +01:00
186e9fa9dd fix(blog): Correct MDX syntax in billion-euro-package post 2026-02-17 20:19:22 +01:00
d7fd139232 fix(infra): resolve gatekeeper label overwrite and alias collision 2026-02-17 17:50:45 +01:00
50d278953e fix(orchestration): namespace Traefik labels with PROJECT_NAME to avoid collisions 2026-02-17 17:06:16 +01:00
baf05c089c fix(orchestration): remove hardcoded external volume to fix pipeline failure 2026-02-17 16:53:57 +01:00
db2295d391 fix: restore CMS connectivity and schema
- Exposed Directus port 8055 for local health checks and scripting
- Added scripts to fix admin token and manually create missing collections
- Verified all service health checks are passing
2026-02-17 16:20:03 +01:00
c292dec4d6 fix: resolve contact page 500 and Leaflet initialization errors
- Fixed Docker service names and volume configuration
- Bootstrapped Directus and applied schema
- Updated DIRECTUS_URL to local instance in .env
- Implemented manual Leaflet lifecycle management in LeafletMap.tsx
  to prevent re-initialization error
2026-02-17 16:13:31 +01:00
df017dc165 fix(deploy): enforce project name klz-cablescom for production to persist data volume 2026-02-17 13:38:41 +01:00
1906cb6736 fix(infra): split PathPrefix into single-arg calls for Traefik v3
Traefik v3 only accepts one argument per PathPrefix. The multi-arg syntax
silently invalidated the entire public router, causing OG images, health,
sitemap and robots.txt to fall through to the auth-protected main router.
2026-02-17 02:09:54 +01:00
ec25e1df8d fix(infra): add TLS entrypoint/certresolver to deploy env generation
All Traefik routers were defaulting to entrypoints=web with tls=false,
making the app unreachable over HTTPS. Production worked because it had
these values set from a previous deploy, but testing never received them.
2026-02-17 02:06:34 +01:00
875935ef9a fix(middleware): exclude static assets from matcher to prevent 404s on images 2026-02-17 02:00:06 +01:00
b172cd320c fix(middleware): rename proxy.ts back to middleware.ts convention to fix OG image routing 2026-02-17 01:48:11 +01:00
163b356920 fix(og-image): resolve 404s, migrate middleware to proxy.ts, and fix local port conflict 2026-02-17 01:31:13 +01:00
11908cfc4e fix: pipeline 2026-02-16 23:31:24 +01:00
d360fbff6b fix: pipeline 2026-02-16 23:18:41 +01:00
c76c91928f fix: pipeline 2026-02-16 23:08:12 +01:00
a2e1cc9850 fix: pipeline 2026-02-16 22:35:39 +01:00
3d498ba46f fix: build 2026-02-16 21:32:24 +01:00
8d9a82d5e4 fix: build 2026-02-16 21:06:06 +01:00
4b41ba1c27 fix: resolve lint and build errors
- Added 'use client' to not-found.tsx
- Refactored RelatedProducts to Server Component to fix 'fs' import error
- Created RelatedProductLink for client-side analytics
- Fixed lint syntax issues in RecordModeVisuals.tsx
- Fixed rule-of-hooks violation in WebsiteVideo.tsx
2026-02-16 18:50:34 +01:00
a8b8d703c8 refactor(middleware): upgrade locale redirects from 307 to 308 for better scanner compatibility 2026-02-16 18:45:33 +01:00
24b2be2094 feat(analytics): add blog engagement, ToC tracking, and 404 monitoring
- Added BlogEngagementTracker for reading time and completion tracking
- Added ToC click tracking in blog posts
- Added global 404 error monitoring in not-found.tsx
- Completed 'Total Transparency' suite
2026-02-16 18:31:28 +01:00