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
+79
View File
@@ -0,0 +1,79 @@
// C:\Development\Damjan Savic\Portfolio\src\i18n\locales\en\navigation.ts
export const navigation = {
// Main navigation
main: {
home: 'Home',
about: 'About',
portfolio: 'Portfolio',
blog: 'Blog',
contact: 'Contact'
},
// Dashboard and Admin
admin: {
login: 'Login',
dashboard: 'Dashboard',
logout: 'Logout'
},
// Footer Navigation
footer: {
legal: {
privacy: 'Privacy Policy',
terms: 'Terms & Conditions',
imprint: 'Imprint'
},
sections: {
portfolio: 'Portfolio',
blog: 'Blog',
contact: 'Contact'
}
},
// Page sections
sections: {
experience: 'Experience',
skills: 'Skills',
projects: 'Projects',
about: 'About'
},
// Breadcrumbs and back navigation
navigation: {
backTo: {
home: 'Back to Home',
portfolio: 'Back to Portfolio',
blog: 'Back to Blog'
},
breadcrumbs: {
home: 'Home',
portfolio: 'Portfolio',
blog: 'Blog',
about: 'About',
contact: 'Contact'
}
},
// Mobile Navigation
mobile: {
menu: 'Menu',
close: 'Close',
open: 'Open Menu'
},
// URLs (for dynamic route generation)
urls: {
home: '/',
about: '/about',
portfolio: '/portfolio',
blog: '/blog',
contact: '/contact',
login: '/login',
dashboard: '/dashboard',
privacy: '/privacy',
terms: '/terms'
},
// Meta information for navigation
meta: {
main: 'Main Navigation',
footer: 'Footer Navigation',
social: 'Social Media Navigation',
legal: 'Legal Navigation'
}
} as const;
export type NavigationConfig = typeof navigation;