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:
@@ -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;
|
||||
Reference in New Issue
Block a user