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,13 @@
// src/i18n/locales/en/pages/home/about.ts
export const about = {
title: 'About Damjan Savić - Senior Fullstack Developer & Digital Solutions Consultant',
content: 'Damjan Savić is a Senior Fullstack Developer and Digital Solutions Consultant with over 10 years of experience in Enterprise Software Development. Based in Cologne, Germany, Damjan Savić specializes in developing scalable cloud-native solutions, AI integration with OLLAMA and Large Language Models, and digital transformation. Damjan Savić combines deep expertise in Python, React, TypeScript, and Microservices Architecture with a holistic consulting approach. From strategic IT consulting to implementing SAP/ERP integrations and developing custom e-commerce platforms - Damjan Savić delivers innovative solutions for complex business requirements. As a DevOps Engineer, Damjan Savić implements modern CI/CD pipelines and container orchestration with Docker and Kubernetes to ensure highest quality and efficiency. Damjan Savić transforms businesses through intelligent automation, cloud architecture, and cutting-edge technology solutions.',
image: {
alt: 'Damjan Savić - Senior Fullstack Developer & Digital Solutions Consultant | Software Architect | Cloud Expert | AI Specialist'
},
buttons: {
learnMore: 'Learn more',
downloadCV: 'Download CV'
}
} as const;
export type AboutTranslations = typeof about;
@@ -0,0 +1,86 @@
// src/i18n/locales/en/pages/home/experience.ts
export const experience = {
title: 'Professional Experience',
navigation: {
prev: '←',
next: '→'
},
positions: [
{
role: 'Process Automation Specialist',
company: 'Everlast Consulting GmbH',
period: '12/2024 - PRESENT',
highlights: [
'Developing AI agents with n8n and Zapier',
'Building web scraping solutions',
'Migration from Power Automate to n8n'
]
},
{
role: 'Consultant Digital Solutions',
company: 'Ritter Digital GmbH',
period: '08/2023 - 11/2024',
highlights: [
'Backend services on dedicated servers',
'AI integration via Power Automate',
'RFID/IoT solutions with Zebra hardware'
]
},
{
role: 'ERP Integration Specialist & E-Commerce Developer',
company: 'Joyce & Girls',
period: '01/2023 - 08/2023',
highlights: [
'ApparelMagic & TradeByte integration',
'MariaDB middleware development',
'Windows Server administration',
'Shopify optimization'
]
},
{
role: 'RPA Developer & E-Commerce Manager',
company: 'C&S Marketing',
period: '08/2022 - 01/2023',
highlights: [
'Shopware 6 & JTL integration',
'Python automation',
'Google Ads optimization',
'CMS management'
]
},
{
role: 'E-Commerce Developer',
company: 'Brands Club GmbH',
period: '08/2021 - 07/2022',
highlights: [
'Shopify & JTL integration',
'Server administration',
'Content production',
'Marketing automation'
]
},
{
role: 'E-Commerce Developer',
company: 'Feine Uhren Eupen',
period: '01/2021 - 08/2021',
highlights: [
'Shopware 5 development',
'Product photography',
'Luxury watch segment sales',
'E-Commerce management'
]
},
{
role: 'Online Marketing Manager',
company: 'Ufer8, Ambis, Teatro & Die Halle Tor 2',
period: '01/2018 - 12/2020',
highlights: [
'Social media content',
'Event marketing',
'Event organization',
'Marketing automation'
]
}
]
} as const;
export type ExperienceTranslations = typeof experience;
@@ -0,0 +1,27 @@
// src/i18n/locales/en/pages/home/expertise.ts
export const expertise = {
title: 'Areas of Expertise',
areas: [
{
title: 'ERP Integration',
description: 'Expert in JTL-Wawi implementation, configuration, and optimization. Specialized in inventory management systems and POS integration.',
skills: ['JTL-Wawi', 'JTL-WMS', 'JTL-POS', 'Apparel Magic']
},
{
title: 'Development',
description: 'Full-stack development with focus on Python automation, React frontends, and database design.',
skills: ['Python', 'React/Next.js', 'MariaDB', 'Docker']
},
{
title: 'E-Commerce',
description: 'Extensive experience with various e-commerce platforms and marketplace integrations.',
skills: ['Shopify', 'Shopware', 'WooCommerce', 'API Integration']
},
{
title: 'Digital Marketing',
description: 'Strategic approach to digital marketing with focus on automation and analytics.',
skills: ['Google Ads', 'Meta Ads', 'SEO', 'Analytics']
}
]
} as const;
export type ExpertiseTranslations = typeof expertise;
@@ -0,0 +1,31 @@
// src/i18n/locales/en/pages/home/hero.ts
export const hero = {
title: 'AI & AUTOMATION SPECIALIST',
name: 'DAMJAN SAVIĆ',
subtitle: 'AI AGENTS | VOICE AI | PROCESS AUTOMATION',
description: 'Building AI agents and automation solutions. From voice AI platforms to autonomous web agents.',
currentRole: 'Currently @ Everlast Consulting GmbH',
cta: 'GET IN TOUCH',
image: {
alt: 'Damjan Savić - AI & Automation Specialist | AI Agents, Voice AI & Process Automation'
},
social: {
getInTouch: 'Get in touch',
linkedin: {
title: 'Visit my LinkedIn profile'
},
github: {
title: 'Visit my GitHub profile'
},
email: {
title: 'Send me an email'
}
},
navigation: {
experience: 'EXPERIENCE',
skills: 'SKILLS',
projects: 'PROJECTS',
about: 'ABOUT'
}
} as const;
export type HeroTranslations = typeof hero;
@@ -0,0 +1,25 @@
// src/i18n/locales/de/pages/home/index.ts
import { hero } from './hero';
import { about } from './about';
import { experience } from './experience';
import { expertise } from './expertise';
import { skills } from './skills';
import { projects } from './projects';
export const home = {
hero,
about,
experience,
expertise,
skills,
projects
} as const;
export type HomeTranslations = typeof home;
// Re-export individual sections for direct access
export {
hero,
about,
experience,
expertise,
skills,
projects
};
@@ -0,0 +1,10 @@
// src/i18n/locales/en/pages/home/projects.ts
export const projects = {
title: 'Portfolio',
viewAll: 'All Projects →',
loading: 'Loading projects...',
error: {
loading: 'Error loading projects'
}
} as const;
export type ProjectsTranslations = typeof projects;
@@ -0,0 +1,41 @@
// src/i18n/locales/en/pages/home/skills.ts
export const skills = {
title: 'Skills',
skills: [
{
name: 'AI & LLMs',
level: 90,
description: 'GPT-4, Claude API, Vapi Voice AI'
},
{
name: 'Automation',
level: 85,
description: 'n8n, Zapier, Power Automate'
},
{
name: 'Python',
level: 90,
description: 'Backend, APIs, Automation'
},
{
name: 'TypeScript',
level: 85,
description: 'React, Next.js, Node.js'
},
{
name: 'Database',
level: 85,
description: 'PostgreSQL, Supabase, MariaDB'
},
{
name: 'DevOps',
level: 75,
description: 'Docker, Vercel, Dedicated Servers'
}
],
aria: {
skillLevel: 'Skill level',
selectSkill: 'Select skill'
}
} as const;
export type SkillsTranslations = typeof skills;