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
+94
View File
@@ -0,0 +1,94 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--font-inter: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
/* Colors */
--background: 24 24 27;
--foreground: 250 250 250;
--card: 39 39 42;
--card-foreground: 250 250 250;
--primary: 59 130 246;
--primary-foreground: 255 255 255;
--secondary: 63 63 70;
--secondary-foreground: 250 250 250;
--muted: 63 63 70;
--muted-foreground: 161 161 170;
--accent: 63 63 70;
--accent-foreground: 250 250 250;
--destructive: 239 68 68;
--destructive-foreground: 250 250 250;
--border: 63 63 70;
--input: 63 63 70;
--ring: 59 130 246;
}
* {
box-sizing: border-box;
padding: 0;
margin: 0;
}
html {
scroll-behavior: smooth;
}
body {
font-family: var(--font-inter);
background-color: rgb(var(--background));
color: rgb(var(--foreground));
min-height: 100vh;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: rgb(var(--background));
}
::-webkit-scrollbar-thumb {
background: rgb(var(--secondary));
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: rgb(var(--muted-foreground));
}
/* Selection */
::selection {
background-color: rgb(var(--primary) / 0.3);
}
/* Focus styles */
:focus-visible {
outline: 2px solid rgb(var(--ring));
outline-offset: 2px;
}
/* Smooth transitions */
a,
button {
transition: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease;
}
/* Utility classes */
.text-gradient {
background: linear-gradient(135deg, rgb(var(--primary)) 0%, #8b5cf6 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.glass {
background: rgb(var(--card) / 0.8);
backdrop-filter: blur(12px);
border: 1px solid rgb(var(--border) / 0.5);
}