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 Programer",
"subtitle": "Skalabilna softverska resenja sa IoT i AI integracijom",
"description": "Kao fullstack programer iz Kelna, Damjan Savic se specijalizuje za razvoj skalabilnih softverskih resenja sa IoT i AI integracijom."
},
"author": {
"name": "Damjan Savic",
"role": "Senior Fullstack Developer & Digital Solutions Consultant",
"location": "Keln, Nemacka",
"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 - Digitalna resenja & JTL integracija",
"siteDescription": "Programer individualnih resenja za automatizaciju procesa",
"nav": {
"home": "Pocetna",
"about": "O meni",
"services": "Usluge",
"portfolio": "Portfolio",
"blog": "Blog",
"contact": "Kontakt"
},
"actions": {
"readMore": "Procitaj vise",
"viewMore": "Prikazi vise",
"viewAll": "Prikazi sve",
"back": "Nazad",
"close": "Zatvori",
"submit": "Posalji",
"loading": "Ucitavanje..."
},
"errors": {
"generic": "Doslo je do greske",
"notFound": "Stranica nije pronadjena",
"loading": "Greska pri ucitavanju",
"return": "Povratak na pocetnu stranicu"
},
"cookies": {
"message": "Ovaj sajt koristi kolacice za poboljsanje vaseg iskustva pregledanja. Podaci se ne dele sa trecim stranama.",
"accept": "Prihvati kolacice",
"decline": "Odbij",
"necessary": "Neophodni kolacici",
"necessaryDesc": "Potrebni za osnovne funkcije sajta",
"analytics": "Analiticki kolacici",
"analyticsDesc": "Za analitiku radi poboljsanja sajta",
"learnMore": "Saznaj vise"
}
},
"navigation": {
"main": {
"home": "Pocetna",
"about": "O meni",
"portfolio": "Portfolio",
"blog": "Blog",
"contact": "Kontakt"
},
"admin": {
"login": "Prijava",
"dashboard": "Kontrolna tabla",
"logout": "Odjava"
},
"footer": {
"legal": {
"privacy": "Politika privatnosti",
"terms": "Uslovi koriscenja",
"imprint": "Impresum"
}
},
"mobile": {
"menu": "Meni",
"close": "Zatvori",
"open": "Otvori meni"
}
},
"footer": {
"sections": {
"contact": {
"title": "Kontakt",
"email": "info@damjan-savic.com",
"location": "Keln, Nemacka"
},
"navigation": {
"title": "Navigacija",
"links": {
"portfolio": "Portfolio",
"blog": "Blog",
"about": "O meni",
"contact": "Kontakt"
}
},
"social": {
"title": "Drustvene mreze"
}
},
"legal": {
"copyright": "Sva prava zadrzana",
"links": {
"privacy": "Politika privatnosti",
"imprint": "Impresum",
"terms": "Uslovi koriscenja"
}
}
},
"pages": {
"home": {
"hero": {
"title": "AI & AUTOMATION SPECIALIST",
"name": "DAMJAN SAVIC",
"subtitle": "AI AGENTI | VOICE AI | AUTOMATIZACIJA PROCESA",
"description": "Razvoj AI agenata i resenja za automatizaciju. Od voice AI platformi do autonomnih web agenata.",
"currentRole": "Trenutno @ Everlast Consulting GmbH",
"cta": "KONTAKTIRAJTE ME",
"navigation": {
"experience": "ISKUSTVO",
"skills": "VESTINE",
"projects": "PROJEKTI",
"about": "O MENI"
}
},
"about": {
"title": "O Damjanu Savicu - Senior Fullstack Developer & Digital Solutions Consultant",
"content": "Damjan Savic je AI & Automation Specialist sa fokusom na Voice AI, autonomne agente i automatizaciju procesa. Sa MA diplomom iz razvoja softvera i preko 7 godina iskustva u razvoju digitalnih resenja, kombinuje tehnicku ekspertizu sa strateskim razumevanjem poslovanja.",
"buttons": {
"learnMore": "Saznaj vise",
"downloadCV": "Preuzmi CV"
}
},
"experience": {
"title": "Radno iskustvo",
"positions": [
{
"role": "Process Automation Specialist",
"company": "Everlast Consulting GmbH",
"period": "12/2024 - DANAS",
"highlights": [
"Razvoj AI agenata sa n8n i Zapier",
"Izgradnja web scraping resenja",
"Migracija sa Power Automate na n8n"
]
},
{
"role": "Consultant Digital Solutions",
"company": "Ritter Digital GmbH",
"period": "08/2023 - 11/2024",
"highlights": [
"Backend servisi na namenskim serverima",
"AI integracija preko Power Automate",
"RFID/IoT resenja sa Zebra hardverom"
]
},
{
"role": "ERP Integration Specialist & E-Commerce Developer",
"company": "Joyce & Girls",
"period": "01/2023 - 08/2023",
"highlights": [
"ApparelMagic & TradeByte integracija",
"MariaDB Middleware razvoj",
"Windows Server administracija",
"Shopify optimizacija"
]
}
]
},
"skills": {
"title": "Vestine",
"skills": [
{
"name": "AI & LLMs",
"level": 90,
"description": "GPT-4, Claude API, Vapi Voice AI"
},
{
"name": "Automatizacija",
"level": 85,
"description": "n8n, Zapier, Power Automate"
},
{
"name": "Python",
"level": 90,
"description": "Backend, APIs, Automatizacija"
},
{
"name": "TypeScript",
"level": 85,
"description": "React, Next.js, Node.js"
},
{
"name": "Baze podataka",
"level": 85,
"description": "PostgreSQL, Supabase, MariaDB"
},
{
"name": "DevOps",
"level": 75,
"description": "Docker, Vercel, Namenski serveri"
}
]
},
"projects": {
"title": "Portfolio",
"viewAll": "Svi projekti"
}
},
"about": {
"seo": {
"title": "O meni - Damjan Savic | Fullstack Developer & AI Specijalista",
"description": "Saznajte vise o Damjanu Savicu - AI & Automation Specialist sa fokusom na Voice AI, autonomne agente i automatizaciju procesa iz Kelna."
},
"hero": {
"aboutMe": "FULLSTACK DEVELOPER KELN - DAMJAN SAVIC",
"title": "Python Developer Keln & React Developer - Damjan Savic",
"description": "Kao Fullstack Developer u Kelnu, Damjan Savic je vas Freelance Developer za Python automatizaciju i React razvoj."
}
},
"contact": {
"breadcrumb": "KONTAKT",
"hero": {
"title": "Hajde da radimo zajedno",
"subtitle": "Imate projekat na umu? Hajde da razgovaramo kako vam mozemo pomoci da ostvarite vase ciljeve."
},
"contactInfo": {
"title": "Kontakt informacije",
"description": "Mozete me kontaktirati putem sledecih kanala",
"address": {
"label": "Lokacija kancelarije",
"value": "Rotdornallee, Keln"
},
"phone": {
"label": "Telefon",
"value": "+49 175 695 0979"
},
"email": {
"label": "E-mail",
"value": "info@damjan-savic.com"
}
},
"contactForm": {
"title": "Kontaktirajte me",
"description": "Imate pitanja ili zelite da saradjujemo? Posaljite mi poruku.",
"name": {
"label": "Ime",
"placeholder": "Vase puno ime"
},
"email": {
"label": "E-mail",
"placeholder": "vas.email@primer.com"
},
"message": {
"label": "Poruka",
"placeholder": "Vasa poruka za mene..."
},
"submit": "Posalji poruku",
"successMessage": "Hvala vam na poruci! Javicu vam se sto je pre moguce.",
"errorMessage": "Izvinite, doslo je do greske prilikom slanja vase poruke."
}
},
"privacy": {
"seo": {
"title": "Politika privatnosti",
"description": "Politika privatnosti za portfolio sajt Damjana Savica"
},
"content": {
"title": "Politika privatnosti",
"lastUpdated": "Poslednje azuriranje: 10. mart 2024."
}
},
"terms": {
"seo": {
"title": "Uslovi koriscenja",
"description": "Uslovi koriscenja za portfolio sajt Damjana Savica"
},
"content": {
"title": "Uslovi koriscenja",
"lastUpdated": "Poslednje azuriranje: 10. mart 2024."
}
},
"notfound": {
"title": "Stranica nije pronadjena",
"description": "Trazena stranica ne postoji ili je premestena.",
"backHome": "Povratak na pocetnu"
}
},
"portfolio": {
"seo": {
"title": "Portfolio - Fullstack Developer Keln Damjan Savic | Python & React Projekti",
"description": "Portfolio Freelance Developera iz Kelna Damjana Savica: Python automatizacija, OLLAMA AI integracija, ERP sistem integracija, E-Commerce razvoj."
},
"sections": {
"title": "Software Developer Keln - Portfolio Damjan Savic",
"subtitle": "Python Developer Keln & React Developer - Uspesni projekti"
},
"filters": {
"all": "Sve",
"categories": {
"Data Science": "Data Science",
"AI Development": "AI Razvoj",
"Integration": "Integracija",
"Full-Stack Development": "Full-Stack Razvoj",
"Data Processing": "Obrada podataka"
}
},
"ui": {
"loading": "Ucitavanje projekata...",
"noProjects": "Nema pronadjenih projekata",
"viewProject": "Pogledaj projekat",
"backToPortfolio": "Nazad na Portfolio",
"technologies": "Tehnologije"
}
},
"blog": {
"meta": {
"title": "Blog Damjana Savica - JTL Integracija & Digitalna Resenja",
"description": "Uvidi i najbolje prakse Damjana Savica o JTL-WaWi, e-trgovini i digitalnoj transformaciji.",
"header": {
"title": "Uvidi & Najbolje prakse Damjana Savica",
"subtitle": "Damjan Savic deli uvide i najbolje prakse o JTL-WaWi, e-trgovini i digitalnoj transformaciji"
}
},
"ui": {
"readMore": "Procitaj vise",
"loading": {
"posts": "Ucitavanje blog postova...",
"post": "Ucitavanje blog posta..."
},
"errors": {
"posts": "Greska pri ucitavanju blog postova",
"post": "Trazeni blog post ne postoji ili je premesten."
},
"backToBlog": "Nazad na Blog",
"publishedOn": "Objavljeno",
"category": "Kategorija",
"tags": "Oznake"
}
},
"login": {
"seo": {
"title": "Prijava",
"description": "Prijavite se za pristup kontrolnoj tabli"
},
"header": {
"title": "Prijavite se na kontrolnu tablu"
},
"form": {
"email": {
"label": "E-mail adresa",
"placeholder": "vas.email@primer.com"
},
"password": {
"label": "Lozinka",
"placeholder": "Vasa lozinka"
},
"submit": {
"default": "Prijavi se",
"loading": "Prijavljivanje..."
},
"errors": {
"default": "Doslo je do greske",
"invalidCredentials": "Nevazeci podaci za prijavu"
}
},
"security": {
"secureConnection": "Bezbedna veza"
}
},
"dashboard": {
"header": {
"title": "Kontrolna tabla analitike",
"activeUsers": "aktivnih korisnika"
},
"metrics": {
"pageViews": {
"title": "Pregledi stranica",
"perMinute": "po minutu"
},
"uniqueVisitors": {
"title": "Jedinstveni posetioci",
"currentlyActive": "trenutno aktivnih"
},
"conversions": {
"title": "Konverzije",
"rate": "stopa konverzije"
},
"timeOnSite": {
"title": "Prosecno vreme na sajtu",
"bounceRate": "stopa napustanja"
}
},
"topPages": {
"title": "Najpopularnije stranice",
"columns": {
"path": "Putanja",
"views": "Pregledi",
"change": "Promena"
}
},
"status": {
"loading": "Ucitavanje kontrolne table...",
"error": "Greska pri ucitavanju podataka",
"notAuthenticated": "Molimo prijavite se"
}
}
}