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
+411
View File
@@ -0,0 +1,411 @@
{
"meta": {
"site": {
"name": "Damjan Savic",
"title": "Damjan Savic | Fullstack, IoT & AI Developer",
"subtitle": "Scalable Software Solutions with IoT and AI Integration",
"description": "As a fullstack developer from Cologne, Damjan Savic specializes in developing scalable software solutions with IoT and AI integration."
},
"author": {
"name": "Damjan Savic",
"role": "Senior Fullstack Developer & Digital Solutions Consultant",
"location": "Cologne, Germany",
"email": "info@damjan-savic.com"
},
"social": {
"linkedin": "https://www.linkedin.com/in/damjansavic/",
"github": "https://github.com/damjansavic",
"email": "info@damjan-savic.com"
}
},
"common": {
"siteTitle": "Damjan Savic - Digital Solutions & JTL Integration",
"siteDescription": "Developer of custom solutions for process automation",
"nav": {
"home": "Home",
"about": "About",
"services": "Services",
"portfolio": "Portfolio",
"blog": "Blog",
"contact": "Contact"
},
"actions": {
"readMore": "Read More",
"viewMore": "View More",
"viewAll": "View All",
"back": "Back",
"close": "Close",
"submit": "Submit",
"loading": "Loading..."
},
"errors": {
"generic": "An error has occurred",
"notFound": "Page not found",
"loading": "Error loading",
"return": "Return to homepage"
},
"cookies": {
"message": "This website uses cookies to improve your browsing experience. Data is not shared with third parties.",
"accept": "Accept Cookies",
"decline": "Decline",
"necessary": "Necessary Cookies",
"necessaryDesc": "Required for basic website functionality",
"analytics": "Analytics Cookies",
"analyticsDesc": "For analytics to improve the website",
"learnMore": "Learn More"
}
},
"navigation": {
"main": {
"home": "Home",
"about": "About",
"portfolio": "Portfolio",
"blog": "Blog",
"contact": "Contact"
},
"admin": {
"login": "Login",
"dashboard": "Dashboard",
"logout": "Logout"
},
"footer": {
"legal": {
"privacy": "Privacy Policy",
"terms": "Terms & Conditions",
"imprint": "Imprint"
}
},
"mobile": {
"menu": "Menu",
"close": "Close",
"open": "Open Menu"
}
},
"footer": {
"sections": {
"contact": {
"title": "Contact",
"email": "info@damjan-savic.com",
"location": "Cologne, Germany"
},
"navigation": {
"title": "Navigation",
"links": {
"portfolio": "Portfolio",
"blog": "Blog",
"about": "About",
"contact": "Contact"
}
},
"social": {
"title": "Social Media"
}
},
"legal": {
"copyright": "All rights reserved",
"links": {
"privacy": "Privacy Policy",
"imprint": "Imprint",
"terms": "Terms of Service"
}
}
},
"pages": {
"home": {
"hero": {
"title": "AI & AUTOMATION SPECIALIST",
"name": "DAMJAN SAVIC",
"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",
"navigation": {
"experience": "EXPERIENCE",
"skills": "SKILLS",
"projects": "PROJECTS",
"about": "ABOUT"
}
},
"about": {
"title": "About Damjan Savic - Senior Fullstack Developer & Digital Solutions Consultant",
"content": "Damjan Savic is an AI & Automation Specialist focusing on Voice AI, autonomous agents, and process automation. With an M.A. in Software Development and over 7 years of experience developing digital solutions, he combines technical expertise with strategic business understanding.",
"buttons": {
"learnMore": "Learn More",
"downloadCV": "Download CV"
}
},
"experience": {
"title": "Work Experience",
"positions": [
{
"role": "Process Automation Specialist",
"company": "Everlast Consulting GmbH",
"period": "12/2024 - PRESENT",
"highlights": [
"Development of 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"
]
}
]
},
"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"
}
]
},
"projects": {
"title": "Portfolio",
"viewAll": "All Projects"
}
},
"about": {
"seo": {
"title": "About Me - Damjan Savic | Fullstack Developer & AI Specialist",
"description": "Learn more about Damjan Savic - AI & Automation Specialist focusing on Voice AI, autonomous agents, and process automation from Cologne."
},
"hero": {
"aboutMe": "FULLSTACK DEVELOPER COLOGNE - DAMJAN SAVIC",
"title": "Python Developer Cologne & React Developer - Damjan Savic",
"description": "As a Fullstack Developer in Cologne, Damjan Savic is your Freelance Developer for Python automation and React development."
}
},
"contact": {
"breadcrumb": "CONTACT",
"hero": {
"title": "Let's Work Together",
"subtitle": "Have a project in mind? Let's discuss how we can help you achieve your goals."
},
"contactInfo": {
"title": "Contact Information",
"description": "You can reach me through the following channels",
"address": {
"label": "Office Location",
"value": "Rotdornallee, Cologne"
},
"phone": {
"label": "Phone",
"value": "+49 175 695 0979"
},
"email": {
"label": "Email",
"value": "info@damjan-savic.com"
}
},
"contactForm": {
"title": "Contact Me",
"description": "Have questions or want to collaborate? Send me a message.",
"name": {
"label": "Name",
"placeholder": "Your full name"
},
"email": {
"label": "Email",
"placeholder": "your.email@example.com"
},
"message": {
"label": "Message",
"placeholder": "Your message to me..."
},
"submit": "Send Message",
"successMessage": "Thank you for your message! I will get back to you as soon as possible.",
"errorMessage": "Sorry, there was an error sending your message."
}
},
"privacy": {
"seo": {
"title": "Privacy Policy",
"description": "Privacy Policy for the portfolio website of Damjan Savic"
},
"content": {
"title": "Privacy Policy",
"lastUpdated": "Last updated: March 10, 2024"
}
},
"terms": {
"seo": {
"title": "Terms and Conditions",
"description": "Terms and Conditions for the portfolio website of Damjan Savic"
},
"content": {
"title": "Terms and Conditions",
"lastUpdated": "Last updated: March 10, 2024"
}
},
"notfound": {
"title": "Page Not Found",
"description": "The requested page does not exist or has been moved.",
"backHome": "Return to Homepage"
}
},
"portfolio": {
"seo": {
"title": "Portfolio - Fullstack Developer Cologne Damjan Savic | Python & React Projects",
"description": "Portfolio of Freelance Developer Cologne Damjan Savic: Python Automation, OLLAMA AI Integration, ERP System Integration, E-Commerce Development."
},
"sections": {
"title": "Software Developer Cologne - Portfolio Damjan Savic",
"subtitle": "Python Developer Cologne & React Developer - Successful Projects"
},
"filters": {
"all": "All",
"categories": {
"Data Science": "Data Science",
"AI Development": "AI Development",
"Integration": "Integration",
"Full-Stack Development": "Full-Stack Development",
"Data Processing": "Data Processing"
}
},
"ui": {
"loading": "Loading projects...",
"noProjects": "No projects found",
"viewProject": "View Project",
"backToPortfolio": "Back to Portfolio",
"technologies": "Technologies"
}
},
"blog": {
"meta": {
"title": "Blog by Damjan Savic - JTL Integration & Digital Solutions",
"description": "Insights and best practices from Damjan Savic on JTL-WaWi, e-commerce, and digital transformation.",
"header": {
"title": "Insights & Best Practices from Damjan Savic",
"subtitle": "Damjan Savic shares insights and best practices on JTL-WaWi, e-commerce, and digital transformation"
}
},
"ui": {
"readMore": "Read More",
"loading": {
"posts": "Loading blog posts...",
"post": "Loading blog post..."
},
"errors": {
"posts": "Error loading blog posts",
"post": "The requested blog post does not exist or has been moved."
},
"backToBlog": "Back to Blog",
"publishedOn": "Published on",
"category": "Category",
"tags": "Tags"
}
},
"login": {
"seo": {
"title": "Login",
"description": "Sign in to access the dashboard"
},
"header": {
"title": "Sign in to Dashboard"
},
"form": {
"email": {
"label": "Email address",
"placeholder": "your.email@example.com"
},
"password": {
"label": "Password",
"placeholder": "Your password"
},
"submit": {
"default": "Sign in",
"loading": "Signing in..."
},
"errors": {
"default": "An error occurred",
"invalidCredentials": "Invalid credentials"
}
},
"security": {
"secureConnection": "Secure connection"
}
},
"dashboard": {
"header": {
"title": "Analytics Dashboard",
"activeUsers": "active users"
},
"metrics": {
"pageViews": {
"title": "Page Views",
"perMinute": "per minute"
},
"uniqueVisitors": {
"title": "Unique Visitors",
"currentlyActive": "currently active"
},
"conversions": {
"title": "Conversions",
"rate": "conversion rate"
},
"timeOnSite": {
"title": "Avg. Time on Site",
"bounceRate": "bounce rate"
}
},
"topPages": {
"title": "Top Pages",
"columns": {
"path": "Path",
"views": "Views",
"change": "Change"
}
},
"status": {
"loading": "Loading Dashboard...",
"error": "Error loading data",
"notAuthenticated": "Please sign in"
}
}
}