diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..9d3380c --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,11 @@ +{ + "permissions": { + "allow": [ + "Bash(npm run dev:*)", + "Bash(lsof:*)", + "Bash(npm install)" + ], + "deny": [], + "ask": [] + } +} \ No newline at end of file diff --git a/.env.example b/.env.example index 2d008f4..29cfd2d 100644 --- a/.env.example +++ b/.env.example @@ -22,4 +22,7 @@ ENABLE_SCHEMA_VALIDATION=true # Legacy (for compatibility) VITE_APP_NAME=PassMaster -VITE_DEFAULT_LANG=de \ No newline at end of file +VITE_DEFAULT_LANG=de + +# AdSense Configuration (replace with your real publisher ID) +NEXT_PUBLIC_ADSENSE_CLIENT=ca-pub-XXXXXXXXXX \ No newline at end of file diff --git a/app/client-side/page.tsx b/app/client-side/page.tsx index 46fe3f6..21b518f 100644 --- a/app/client-side/page.tsx +++ b/app/client-side/page.tsx @@ -56,10 +56,10 @@ export default function ClientSidePage() { { title: "Privacy Protection", items: [ - "No user tracking or analytics", - "No cookies or local storage", - "No third-party services", - "No data collection whatsoever" + "Privacy-focused analytics (optional)", + "Cookie consent controls", + "Minimal trusted third-party services", + "Transparent data collection practices" ] } ] @@ -282,7 +282,7 @@ export default function ClientSidePage() {
  • - No Dependencies: We don't use external services or third-party libraries + Minimal Dependencies: We only use trusted services for analytics and advertising (with your consent)
  • diff --git a/next.config.js b/next.config.js index c26376b..62af313 100644 --- a/next.config.js +++ b/next.config.js @@ -5,6 +5,9 @@ const nextConfig = { images: { domains: [], }, + env: { + NEXT_PUBLIC_ADSENSE_CLIENT: process.env.NEXT_PUBLIC_ADSENSE_CLIENT, + }, }; module.exports = nextConfig; diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..d60d33a Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..d60d33a Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/manifest.json b/public/manifest.json index 4511e1d..2449672 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -5,6 +5,7 @@ "id": "passmaster-pwa", "start_url": "/", "display": "standalone", + "display_override": ["window-controls-overlay", "minimal-ui", "standalone"], "background_color": "#ffffff", "theme_color": "#3b82f6", "orientation": "portrait-primary", diff --git a/public/og-image.png b/public/og-image.png new file mode 100644 index 0000000..d60d33a Binary files /dev/null and b/public/og-image.png differ diff --git a/src/app/layout.tsx b/src/app/layout.tsx index a996481..b573ba0 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,6 +3,8 @@ import './globals.css' import { ThemeProvider } from '@/components/theme-provider' import { Header } from '@/components/layout/Header' import { Footer } from '@/components/layout/Footer' +import { PWAInstallPrompt } from '@/components/PWAInstallPrompt' +import { CookieConsent } from '@/components/CookieConsent' export const metadata: Metadata = { title: 'PassMaster – Free Offline Secure Password Generator | Privacy-First', @@ -96,18 +98,77 @@ export default function RootLayout({ {/* Content Security Policy */} - + - {/* Service Worker Registration */} + {/* Google AdSense */} +