Migrate from Vite to Next.js 15 with SSR

- Replace Vite + React Router with Next.js 15 App Router
- Implement i18n with next-intl (URL-based: /de, /en, /sr)
- Add SSR/SSG for all pages (48 static pages generated)
- Setup Supabase SSR client for auth
- Migrate all pages: Home, About, Portfolio, Blog, Contact, Login, Dashboard, Imprint, Privacy, Terms
- Add Docker support with standalone output
- Replace i18next with next-intl JSON translations
- Use next/image for optimized images

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-17 01:00:33 +01:00
co-authored by Claude Opus 4.5
parent a66f51b9a2
commit b1ec7b4d61
281 changed files with 8024 additions and 8901 deletions
@@ -0,0 +1,76 @@
// src/i18n/locales/de/pages/dashboard.ts
export const dashboard = {
// SEO
seo: {
title: 'Analytics Dashboard',
description: 'Website-Analysedashboard'
},
// Hauptüberschriften
header: {
title: 'Analytics Dashboard',
activeUsers: 'aktive Nutzer'
},
// Metrikkarten
metrics: {
pageViews: {
title: 'Seitenaufrufe',
perMinute: 'pro Minute'
},
uniqueVisitors: {
title: 'Eindeutige Besucher',
currentlyActive: 'aktuell aktiv'
},
conversions: {
title: 'Konversionen',
rate: 'Konversionsrate'
},
timeOnSite: {
title: 'Durchschn. Besuchszeit',
bounceRate: 'Absprungrate'
}
},
// Top-Seiten Bereich
topPages: {
title: 'Top-Seiten',
columns: {
path: 'Pfad',
views: 'Aufrufe',
change: 'Änderung'
}
},
// Event-Tracking Bereich
events: {
title: 'Event-Tracking',
types: {
contactForm: 'Kontaktformular Absendung',
portfolioView: 'Portfolio Ansicht',
cvDownload: 'Lebenslauf Download',
blogRead: 'Blog Gelesen'
}
},
// Statusmeldungen
status: {
loading: 'Lade Dashboard...',
error: 'Fehler beim Laden der Daten',
notAuthenticated: 'Bitte melden Sie sich an'
},
// Sonstiges
misc: {
viewMore: 'Mehr anzeigen',
refresh: 'Aktualisieren',
period: {
today: 'Heute',
yesterday: 'Gestern',
last7Days: 'Letzte 7 Tage',
last30Days: 'Letzte 30 Tage',
thisMonth: 'Dieser Monat',
lastMonth: 'Letzter Monat'
}
},
// Trends und Änderungen
trends: {
increase: 'Zunahme',
decrease: 'Abnahme',
noChange: 'Keine Änderung'
}
};