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,58 @@
import React from 'react';
interface Project {
title: string;
description: string;
category: string;
technologies: string[];
dateCreated: string;
url?: string;
liveUrl?: string;
githubUrl?: string;
screenshotUrl?: string;
features?: string[];
technicalChallenge?: string;
businessImpact?: {
roi?: string;
performanceGain?: string;
usersImpacted?: string;
};
}
interface ProjectSchemaProps {
project: Project;
}
export function ProjectSchema({ project }: ProjectSchemaProps) {
const schema = {
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": project.title,
"description": project.description,
"applicationCategory": project.category,
"operatingSystem": "Web-based",
"programmingLanguage": project.technologies,
"author": {
"@type": "Person",
"name": "Damjan Savić",
"@id": "https://damjan-savic.com/#person"
},
"dateCreated": project.dateCreated,
"url": project.url || project.liveUrl,
"screenshot": project.screenshotUrl,
"featureList": project.features || [],
"softwareRequirements": "Modern web browser with JavaScript enabled",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "EUR"
}
};
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
);
}