diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..25a6f26c --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +.next/ +node_modules/ +reference/ +public/ +dist/ diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..6a15a482 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,12 @@ +{ + "extends": ["next/core-web-vitals", "next/typescript"], + "rules": { + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-require-imports": "off", + "prefer-const": "warn", + "react/no-unescaped-entities": "off", + "@next/next/no-img-element": "warn" + } +} + diff --git a/README.md b/README.md index 00d1accd..38577796 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,20 @@ SITE_URL=https://klz-cables.com RESEND_API_KEY=your_resend_key TURNSTILE_SITE_KEY=your_turnstile_key TURNSTILE_SECRET_KEY=your_turnstile_secret -VERCEL_ANALYTICS_ID=your_analytics_id + +# Umami +NEXT_PUBLIC_UMAMI_WEBSITE_ID=your_umami_website_id +NEXT_PUBLIC_UMAMI_SCRIPT_URL=https://analytics.infra.mintel.me/script.js + +# GlitchTip (Sentry compatible) +SENTRY_DSN=https://PUBLIC_KEY@errors.infra.mintel.me/PROJECT_ID +NEXT_PUBLIC_SENTRY_DSN=https://PUBLIC_KEY@errors.infra.mintel.me/PROJECT_ID + +# Redis (optional cache) +# Platform provides a shared redis container reachable as `redis`. +# Pick a dedicated DB index per app, e.g. redis://redis:6379/2 +REDIS_URL=redis://redis:6379/2 +REDIS_KEY_PREFIX=klz: ``` ## 📊 Project Overview @@ -346,4 +359,4 @@ Proprietary - KLZ Cables **Status**: ✅ **READY FOR DEPLOYMENT** **Version**: 1.0.0 -**Last Updated**: December 27, 2025 \ No newline at end of file +**Last Updated**: December 27, 2025 diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx index f2640d5c..5205a68a 100644 --- a/app/[locale]/layout.tsx +++ b/app/[locale]/layout.tsx @@ -3,6 +3,8 @@ import {getMessages, getTranslations} from 'next-intl/server'; import '../../styles/globals.css'; import Header from '@/components/Header'; import Footer from '@/components/Footer'; +import UmamiScript from '@/components/analytics/UmamiScript'; +import AnalyticsProvider from '@/components/analytics/AnalyticsProvider'; import { Metadata, Viewport } from 'next'; export async function generateMetadata({params: {locale}}: {params: {locale: string}}): Promise { @@ -79,6 +81,12 @@ export default async function LocaleLayout({