diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index d5031ce..61dfcaf 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -17,7 +17,8 @@
"Bash(pnpm approve-builds:*)",
"Bash(curl:*)",
"Bash(npx tailwindcss:*)",
- "Bash(taskkill:*)"
+ "Bash(taskkill:*)",
+ "Bash(dir:*)"
],
"deny": []
}
diff --git a/index.html b/index.html
index 585948d..2426235 100644
--- a/index.html
+++ b/index.html
@@ -1,5 +1,5 @@
-
+
@@ -12,18 +12,32 @@
})(window,document,'script','dataLayer','GTM-NQK6ZV7N');
+
-
-
+
+
+
+
+
+
-
-
+
+
- Damjan Savić - Fullstack Entwickler | Python, JavaScript, KI
+
+
+
+
+
+
+
+
+
+ Damjan Savić - Senior Fullstack Entwickler & Digital Solutions Consultant Köln | Python, React & KI-Experte
@@ -34,23 +48,26 @@
-
-
+
+
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/public/manifest.json b/public/manifest.json
new file mode 100644
index 0000000..ff8606b
--- /dev/null
+++ b/public/manifest.json
@@ -0,0 +1,40 @@
+{
+ "name": "Damjan Savić - Senior Fullstack Entwickler & Digital Solutions Consultant",
+ "short_name": "Damjan Savić",
+ "description": "Portfolio von Damjan Savić - Senior Fullstack Entwickler und Digital Solutions Consultant in Köln. Enterprise Software Development, KI-Integration und Cloud Architecture.",
+ "start_url": "/",
+ "display": "standalone",
+ "background_color": "#18181B",
+ "theme_color": "#18181B",
+ "orientation": "portrait-primary",
+ "icons": [
+ {
+ "src": "/logo.svg",
+ "sizes": "any",
+ "type": "image/svg+xml",
+ "purpose": "any maskable"
+ },
+ {
+ "src": "/logo.png",
+ "sizes": "1000x1000",
+ "type": "image/png",
+ "purpose": "any"
+ },
+ {
+ "src": "/logo.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/logo.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "any"
+ }
+ ],
+ "categories": ["business", "developer", "productivity"],
+ "lang": "de-DE",
+ "dir": "ltr",
+ "prefer_related_applications": false
+}
\ No newline at end of file
diff --git a/public/robots.txt b/public/robots.txt
index 8c9713c..2807c94 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -1,7 +1,6 @@
# Allow all crawlers
User-agent: *
Allow: /
-Crawl-delay: 1
# Disallow admin or sensitive paths if any
Disallow: /admin
diff --git a/public/sitemap.xml b/public/sitemap.xml
index 8cb1bfb..fc8f92d 100644
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -3,7 +3,7 @@
xmlns:xhtml="http://www.w3.org/1999/xhtml">
https://damjan-savic.com/
- 2025-08-01
+ 2025-01-15
weekly
1.0
@@ -12,7 +12,7 @@
https://damjan-savic.com/en/
- 2025-08-01
+ 2025-01-15
weekly
1.0
@@ -21,7 +21,7 @@
https://damjan-savic.com/sr/
- 2025-08-01
+ 2025-01-15
weekly
1.0
@@ -30,7 +30,7 @@
https://damjan-savic.com/about
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -39,7 +39,7 @@
https://damjan-savic.com/en/about
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -48,7 +48,7 @@
https://damjan-savic.com/sr/about
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -57,7 +57,7 @@
https://damjan-savic.com/portfolio
- 2025-08-01
+ 2025-01-15
weekly
0.9
@@ -66,7 +66,7 @@
https://damjan-savic.com/en/portfolio
- 2025-08-01
+ 2025-01-15
weekly
0.9
@@ -75,7 +75,7 @@
https://damjan-savic.com/sr/portfolio
- 2025-08-01
+ 2025-01-15
weekly
0.9
@@ -84,7 +84,7 @@
https://damjan-savic.com/blog
- 2025-08-01
+ 2025-01-15
weekly
0.9
@@ -93,7 +93,7 @@
https://damjan-savic.com/en/blog
- 2025-08-01
+ 2025-01-15
weekly
0.9
@@ -102,7 +102,7 @@
https://damjan-savic.com/sr/blog
- 2025-08-01
+ 2025-01-15
weekly
0.9
@@ -111,7 +111,7 @@
https://damjan-savic.com/contact
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -120,7 +120,7 @@
https://damjan-savic.com/en/contact
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -129,7 +129,7 @@
https://damjan-savic.com/sr/contact
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -138,7 +138,7 @@
https://damjan-savic.com/privacy
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -147,7 +147,7 @@
https://damjan-savic.com/en/privacy
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -156,7 +156,7 @@
https://damjan-savic.com/sr/privacy
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -165,7 +165,7 @@
https://damjan-savic.com/terms
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -174,7 +174,7 @@
https://damjan-savic.com/en/terms
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -183,7 +183,7 @@
https://damjan-savic.com/sr/terms
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -192,7 +192,7 @@
https://damjan-savic.com/blog/erp-integration-breuninger
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -201,7 +201,7 @@
https://damjan-savic.com/en/blog/erp-integration-breuninger
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -210,7 +210,7 @@
https://damjan-savic.com/sr/blog/erp-integration-breuninger
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -219,7 +219,7 @@
https://damjan-savic.com/blog/fullstack-development-timetracking
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -228,7 +228,7 @@
https://damjan-savic.com/en/blog/fullstack-development-timetracking
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -237,7 +237,7 @@
https://damjan-savic.com/sr/blog/fullstack-development-timetracking
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -246,7 +246,7 @@
https://damjan-savic.com/blog/rfid-automation
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -255,7 +255,7 @@
https://damjan-savic.com/en/blog/rfid-automation
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -264,7 +264,7 @@
https://damjan-savic.com/sr/blog/rfid-automation
- 2025-08-01
+ 2025-01-15
monthly
0.7
@@ -273,7 +273,7 @@
https://damjan-savic.com/portfolio/ai-data-reader
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -282,7 +282,7 @@
https://damjan-savic.com/en/portfolio/ai-data-reader
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -291,7 +291,7 @@
https://damjan-savic.com/sr/portfolio/ai-data-reader
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -300,7 +300,7 @@
https://damjan-savic.com/portfolio/bi-vision
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -309,7 +309,7 @@
https://damjan-savic.com/en/portfolio/bi-vision
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -318,7 +318,7 @@
https://damjan-savic.com/sr/portfolio/bi-vision
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -327,7 +327,7 @@
https://damjan-savic.com/portfolio/business-intelligence-ai
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -336,7 +336,7 @@
https://damjan-savic.com/en/portfolio/business-intelligence-ai
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -345,7 +345,7 @@
https://damjan-savic.com/sr/portfolio/business-intelligence-ai
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -354,7 +354,7 @@
https://damjan-savic.com/portfolio/claude-personal-assistant
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -363,7 +363,7 @@
https://damjan-savic.com/en/portfolio/claude-personal-assistant
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -372,7 +372,7 @@
https://damjan-savic.com/sr/portfolio/claude-personal-assistant
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -381,7 +381,7 @@
https://damjan-savic.com/portfolio/e-commerce-integration
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -390,7 +390,7 @@
https://damjan-savic.com/en/portfolio/e-commerce-integration
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -399,7 +399,7 @@
https://damjan-savic.com/sr/portfolio/e-commerce-integration
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -408,7 +408,7 @@
https://damjan-savic.com/portfolio/local-llm-training
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -417,7 +417,7 @@
https://damjan-savic.com/en/portfolio/local-llm-training
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -426,7 +426,7 @@
https://damjan-savic.com/sr/portfolio/local-llm-training
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -435,7 +435,7 @@
https://damjan-savic.com/portfolio/rfid-automation
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -444,7 +444,7 @@
https://damjan-savic.com/en/portfolio/rfid-automation
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -453,7 +453,7 @@
https://damjan-savic.com/sr/portfolio/rfid-automation
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -462,7 +462,7 @@
https://damjan-savic.com/portfolio/timetracking-software
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -471,7 +471,7 @@
https://damjan-savic.com/en/portfolio/timetracking-software
- 2025-08-01
+ 2025-01-15
monthly
0.8
@@ -480,7 +480,7 @@
https://damjan-savic.com/sr/portfolio/timetracking-software
- 2025-08-01
+ 2025-01-15
monthly
0.8
diff --git a/src/components/SEO.tsx b/src/components/SEO.tsx
index 1e5a2f0..3c9b5e2 100644
--- a/src/components/SEO.tsx
+++ b/src/components/SEO.tsx
@@ -4,6 +4,10 @@ import { useTranslation } from 'react-i18next';
import { HreflangTags } from './HreflangTags';
import { seoContent as seoContentDe } from '../i18n/locales/de/seo-content';
import { seoContent as seoContentEn } from '../i18n/locales/en/seo-content';
+import { seoContent as seoContentSr } from '../i18n/locales/sr/seo-content';
+import { meta as metaDe } from '../i18n/locales/de/meta';
+import { meta as metaEn } from '../i18n/locales/en/meta';
+import { meta as metaSr } from '../i18n/locales/sr/meta';
import { AutoBreadcrumbs } from './schemas/BreadcrumbSchema';
interface SEOProps {
@@ -38,8 +42,14 @@ const SEO: React.FC = ({
const currentLanguage = i18n.language;
// SEO-Content basierend auf Sprache auswählen
- const seoContent = currentLanguage === 'de' ? seoContentDe : seoContentEn;
+ const seoContent = currentLanguage === 'de' ? seoContentDe :
+ currentLanguage === 'sr' ? seoContentSr :
+ seoContentEn;
+ const meta = currentLanguage === 'de' ? metaDe :
+ currentLanguage === 'sr' ? metaSr :
+ metaEn;
const defaultDescription = description || seoContent.hero.description;
+ const defaultKeywords = keywords || meta.site.keywords;
// Default schema für die Website
const defaultSchema = {
@@ -54,7 +64,11 @@ const SEO: React.FC = ({
'https://linkedin.com/in/damjansavic',
'https://github.com/damjansavic'
],
- jobTitle: ['Fullstack Developer', 'Software Engineer', 'KI Spezialist'],
+ jobTitle: currentLanguage === 'de' ?
+ ['Senior Fullstack Entwickler', 'Digital Solutions Consultant', 'Software Architekt', 'KI/AI Spezialist'] :
+ currentLanguage === 'sr' ?
+ ['Старији програмер пуног стека', 'Консултант за дигитална решења', 'Софтверски архитекта'] :
+ ['Senior Fullstack Developer', 'Digital Solutions Consultant', 'Software Architect', 'AI Specialist'],
worksFor: {
'@type': 'Organization',
name: 'CoderConda'
@@ -109,8 +123,10 @@ const SEO: React.FC = ({
? i18n.options.supportedLngs
.filter((lng: string) => lng !== 'cimode')
.map((lng: string) => ({
- hrefLang: lng,
- href: `${siteUrl}/${lng}${window.location.pathname}`,
+ hrefLang: lng === 'de' ? 'de-DE' : lng === 'sr' ? 'sr-RS' : 'en-US',
+ href: lng === 'de' ?
+ `${siteUrl}${window.location.pathname}` :
+ `${siteUrl}/${lng}${window.location.pathname}`,
}))
: [];
@@ -133,7 +149,11 @@ const SEO: React.FC = ({
-
+
{alternateUrls?.map(
({ hrefLang }: { hrefLang: string; href: string }) => (
@@ -151,9 +171,9 @@ const SEO: React.FC = ({
-
+
{/* Schema.org markup */}